前章の「パーセプトロン」を発展させ「ニューラルネットワーク」へ。
これで、
これまで人の手で行っていた「重みパラメータ」の調整を、
データから自動で学習できるようになる、
という。
まさしく、
機械が自分で学習する=「機械学習」
の世界だ。
ただ、両者の違いは、たった一点というから驚きだ。
その違いとは、
中間層(隠れ層)の活性化関数。(*1)
てっきり、
単層と多層の違いと思っていたので、二度びっくり!
【ポイント1: 中間層の活性化関数の違い】
パーセプトロン : STEP関数
ニューラルネットワーク : Sigmoid関数 → Relu関数(最近はこちら)
ここでいったん3層ニューラルネットワークを実装し(*2)、
次に出力層の活性化関数の話。
先ほどの関数とは違い、
機械学習の種類で使う関数が違う。
【ポイント2: 出力層の活性化関数の違い】
回 帰 : 恒等関数
分 類 : Softmax関数
これで
ニューラルネットワーク全体のしくみの説明は終わったので、
機械学習では超有名なデータセット、
「MNIST(エムニスト)」を使って、
手書き数字画像分類の推論処理の実装を行う。(*3)
なんやかんやを繰り返し、
最後は、
「バッチ処理」。
まとまりのある入力データをバッチといい、
バッチ処理することで高速に効率よく処理できるという。
それは、
Numpyなどのライブラリは、大きな配列の計算を効率よく行えるからだ、
という理由。
そうか、コンピュータってそもそも計算機なんだもんな、
と改めて納得した。
いや、でも、ちょっと待て。
なんでニューラルネットワークは、
重みパラメータを自動で学習できるのか?
そんな話、どこにも出てきてないやん!
お楽しみは、次章で、
ということか。