この記事は個人的なお勉強用のメモです。
このお勉強の位置
深層学習 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層
正直なところ、上の図を描いたが、不正解。
模範解答は、中間層が2層になっていて、それぞれの層に3ノード存在する図になっている。
中間層は合計6ノード。
自分は「中間層:3ノード2層」を、中間層のノードの総数が3ノードと解釈してしまった。
これは誤った考えなのだろうか。
とはいえ、中間層の2層目が1ノードしかなく、それがそのまま出力層に渡っているので
この中間層の2層目は現実的には意味が無いような気がしている。
図に動物分類の実例を記入
「鳴き声の大きさ」を記入してみたが、音声付きの動画を入力と考えるならば
おそらく解答を大きく外してはいないだろう。
総入力を求めているソース
W:2行1列
x:1行2列
b:スカラー?(手元のソースだと b = np.array(0.5)だが、講義動画では b = 0.5 になっている)
np.dot関数でベクトルの内積を求める。
中間層の出力を定義しているソース
「順伝播(3層・複数ユニット)」から抜き出す。
↑ 自分の解答
(「中間層の出力を定義」というのが正確に把握しづらい。)
正解は、
z2 = functions.relu(u2)
だけでなく、その1行上の
u2 = np.dot(z1, W2) + b2
も、だそう。
(「出力を定義」なので、出力部分だけが正解、というわけではないのか。)
演習問題
「修了テスト~練習問題~」に入力層~中間層の問題は存在しなかった。
代わりに、参考図書の記載。
『ゼロから作るDeep Learning』(オライリー・ジャパン)
3章 ニューラルネットワーク
3.1 パーセプトロンからニューラルネットワークへ
3.3 多次元配列の計算
3.4 3層ニューラルネットワークの実装
この辺りの記述が、今回のお勉強と非常に似ている。