【ゼロから作るDeep Learning】要点まとめ 第3章ニューラルネットワーク
最近オライリー社から出版されている「ゼロから作るDeep Learning」を読み始めた。
数学の知識がない僕には結構難しかったので、備忘録として要点をまとめていこうと思う。
1,2章に関してはpythonの話や、ANDゲート等の基本情報的な内容が多いので、ここでは省略する。
3章 - ニューラルネットワークについて
Affine空間
- 入力値xと重みパラメータ、バイアスを使って行列の計算をする。 例)x1, x2、一層目の隠れ層が3つのノードからなるとき。 入力値が2つで出力が3つを求められるので、重みは3×2の配列で必要。
x1w11 + x2w12 + b = a1 x1w21 + x2w22 + b = a2 x1w31 + x2w32 + b = a3
↑のような行列の計算をAffineという。
- 一層目に出力された値を活性化関数を使って更に計算する(シグモイド関数、RELU)
- 最終層への出力時は、活性化関数に、恒等関数(回帰問題)、ソフトマックス関数(分類問題)を使用する。
活性化関数
Affineの結果から次のノードに渡すべき値を出力する関数。
- シグモイド関数
- RELU(出力の値が0以上ならそのまま値を、0未満なら0を出力する)
出力層の活性化関数
- ソフトマックス関数: 出力される値の合計が1になるため、確率を求めることができる。分類問題に使用される。基本的にAffineの結果が一番大きい値を使用するので、学習フェーズ以外では使用されない。
- 恒等関数: 入力された値をそのまま返却する。回帰問題に使用される。
出力層のノードの個数
期待する候補の数だけ必要。 例えば与えられた数値が何なのかを判定する場合は0~9のうちのどれかということになるので、 出力層は10個になる。
バッチ処理
画像のような二次元配列のデータを使う場合に、纏めて複数のデータをニューラルネットワークに投入して結果を得る方法のこと。
例) 10個の画像データ。1データが28 * 28の784ピクセル隠れ層は2つ、それぞれ50, 100のノードを保つ場合。
x = 100 × 784 w1 = 784 × 50(隠れ層1への重み付け) w2 = 50 × 100(隠れ層2への重み付け) w3 = 100 × 10(出力層への重み付け)