2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

深層学習 Day 1 - Section 1 入力層~中間層 のまとめ

Last updated at Posted at 2020-11-08

この記事は個人的なお勉強用のメモです。

このお勉強の位置

深層学習 Day 1

Section 0 ニューラルネットワークの全体像 ← これと
Section 1 入力層~中間層 ← これ
Section 2 活性化関数
Section 3 出力層
Section 4 勾配降下法
Section 5 誤差逆伝播法

講義

ニューラルネットワークの全体像

識別モデル(情報を与えると、例えば分類をするモデル)

  • 入力層
    体長、体重、etcといった数値
  • 中間層
    学習する部分(重み $W$ やバイアス $b$)
  • 出力層
    犬、猫、ネズミかどうかの確率で出力

入力は数値。出力も数値。
出力値を正解値と比較する(誤差関数で誤差を求める)。
正しいかどうかをフィードバックして、$W$ と $b$ を更新する。

できること

  • 回帰
  • 分類

SVMもそうだが、ニューラルネットワーク(NN)は万能。

4層以上の中間層を持つNNを深層NNモデルという。

実用例

  • 自動売買
    入力:数値、出力:数値
  • チャットボット、翻訳
    入力:文章、出力:文章(文章を数値で解釈する)
  • 音声解釈
    入力:音声、出力:文字列(音声や文字列を数値で解釈する)
  • 囲碁、将棋
    入力:盤面の情報、出力:次の手(盤面の情報や次の手を数値で解釈する)

つまり、NNではすべて数値として処理する。

入力層と中間層

登場人物

  • 入力:$x_i$
  • 重み:$w_i$(傾き)
  • バイアス:$b$(入力の全体をずらす役割、切片)
  • 総入力:$u$
  • 出力:$z$
  • 活性化関数:$f$
\begin{align}
u&=w_1x_1+w_2x_2+w_3x_3+w_4x_4+b\\
&=Wx+b
\end{align}
z=f(u)

動画の講義では、(0, 0) を通る直線を2つ書いて、
2つの直線の間の傾きが $w$ という話をしているが
普通に考えると、$w$ は他の直線からの相対的な傾きではなく、
x軸からの絶対的な傾きだと思う。

実装演習

1_1_forward_propagation_after.ipynb

# 入力値
x = np.array([2, 3])
print_vec("入力", x)


# 総入力
u = np.dot(x, W) + b
print_vec("総入力", u)

総入力を求めるための、入力データと重みとの掛け算は、np.dot 関数を用いる。
※新しいバージョンのPythonでは、np.dot関数だけでなく、@ 演算子でも同様の掛け算ができるとのこと。
 @ 演算子は、Python 3.5, NumPy 1.10.0以降で利用可能。

確認テストについての考察

やろうとしていること

中間層で重み $W$ やバイアス $b$ を学習すること。
出力層で正しい値(確率)を出力すること。

↑ そこまで外した解答ではなかった。

模範解答
明示的なプログラムの代わりに多数の中間層を持つ
ニューラルネットワークを用いて、入力値から目的とする
出力値に変換する数学モデルを構築すること。

重みやバイアスを自力で調整することで目的の値を得る。

「自力で調整」というのは、深層学習ならではなのだろうか。
(機械学習でも $w$ を微分で求めたり勾配降下法で求めたりはした)

ネットワークの図


入力層:2ノード1層
中間層:3ノード2層
出力層:1ノード1層

image.png

正直なところ、上の図を描いたが、不正解。
模範解答は、中間層が2層になっていて、それぞれの層に3ノード存在する図になっている。
中間層は合計6ノード。

自分は「中間層:3ノード2層」を、中間層のノードの総数が3ノードと解釈してしまった。
これは誤った考えなのだろうか。
とはいえ、中間層の2層目が1ノードしかなく、それがそのまま出力層に渡っているので
この中間層の2層目は現実的には意味が無いような気がしている。

図に動物分類の実例を記入

image.png

「鳴き声の大きさ」を記入してみたが、音声付きの動画を入力と考えるならば
おそらく解答を大きく外してはいないだろう。

総入力を求めているソース

image.png

W:2行1列
x:1行2列
b:スカラー?(手元のソースだと b = np.array(0.5)だが、講義動画では b = 0.5 になっている)

np.dot関数でベクトルの内積を求める。

中間層の出力を定義しているソース

「順伝播(3層・複数ユニット)」から抜き出す。

image.png

↑ 自分の解答
(「中間層の出力を定義」というのが正確に把握しづらい。)

正解は、

z2 = functions.relu(u2) 

だけでなく、その1行上の

u2 = np.dot(z1, W2) + b2

も、だそう。
(「出力を定義」なので、出力部分だけが正解、というわけではないのか。)

演習問題

「修了テスト~練習問題~」に入力層~中間層の問題は存在しなかった。
代わりに、参考図書の記載。

『ゼロから作るDeep Learning』(オライリー・ジャパン)
3章 ニューラルネットワーク
3.1 パーセプトロンからニューラルネットワークへ
3.3 多次元配列の計算
3.4 3層ニューラルネットワークの実装

この辺りの記述が、今回のお勉強と非常に似ている。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?