「ゼロから作る Deep Learning」を読む
第2章
パーセプトロン
入力: x1, x2, 重み: w1, w2, 閾値: theta としたとき、出力 y は
0 (x1 * w1 + x2 * w2 ≦ θ の場合)
1 (x1 * w1 + x2 * w2 > θ の場合)
バイアス
閾値 θ のかわりにバイアス b を使ってパーセプトロンを表すと
0 (b + x1 * w1 + x2 * w2 ≦ 0 の場合)
1 (b + x1 * w1 + x2 * w2 > 0 の場合)
実装するときはこっちのほうがよく使われるっぽい
AND, NAND, OR ゲートは上記のパーセプトロンで表現できるが、 XOR ゲートはできない
グラフを見るとわかりやすい(p29)
パーセプトロンの層を重ねることで XOR を表現することができる
なので、厳密に言うと「XOR ゲートは単層のパーセプトロンでは表現できない」
XOR ゲートは2層のパーセプトロンで表現できる
code:python
def XOR(x1, x2):
s1, s2 = OR(x1, x2), NAND(x1, x2)
y = AND(s1, s2)
return y
第3章
ニューラルネットワークは、パーセプトロンの重みの決定を自動で学習できる
パーセプトロンの一般化
y = h(b + w1x1 + w2x2)
この h() を活性化関数と呼ぶ
入力信号の総和を出力信号に変換する関数
活性化関数
ステップ関数: 第2章でつくったパーセプトロン(単純パーセプトロン)はこれ
シグモイド関数
h(x) = 1 / (1 + exp(-x))
https://scrapbox.io/files/642775c940e51b001ce223e2.png
ReLU関数 (Rectified Linear Unit)
h(x) = max(0, x)
https://scrapbox.io/files/642775f70f309d001b6ea7c4.png
ニューラルネットワークでは、活性化関数に線形関数を用いてはいけない
たとえば活性化関数 h(x) = cx としたとき、それを三重に重ねても h(h(h(x))) = c^3x となり、これもまた線形関数のため、層を重ねることなく隠れ層のないネットワークで表現できてしまい、多層にすることのメリットがなくなるので
機械学習の問題の分類
分類問題: データがどのクラスに属するか
会期問題: ある入力データから数値の予測を行う
ソフトマックス関数
出力が0から1の間になる
出力の総和が1になる
= 出力を「確率」として解釈できる
適用しても各要素の大小関係は変わらない(指数関数は単調増加関数なので)
なので、分類問題では出力層への適用が不要。指数関数の計算はそれなりに資源を食うので、省略するのが一般的。