じぶんメモ

プログラミングのメモ、日常のメモとか。

【ゼロから作る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(出力層への重み付け)