6−3 ニューラルネットワークがなんで偉いのか?ー機械学習の真髄がここに⁉️

AI学習ダイアリー
パワポで作ってみました!
ゼロから作るDeep Learning 』読書ノート(現在進行形)
0章「まえがき」
1章「Python入門」
2章「パーセプトロン」
3章「ニューラルネットワーク」(今回はここ!)

前章の「パーセプトロン」を発展させ「ニューラルネットワーク」へ。
これで、

これまで人の手で行っていた「重みパラメータ」の調整を、
データから自動で学習できるようになる、

という。

まさしく、

機械が自分で学習する=「機械学習」

の世界だ。

ただ、両者の違いは、たった一点というから驚きだ。
その違いとは、

中間層(隠れ層)の活性化関数。(*1)

てっきり、
単層と多層の違いと思っていたので、二度びっくり!

【ポイント1: 中間層の活性化関数の違い】
パーセプトロン :    STEP関数
ニューラルネットワーク :  Sigmoid関数 → Relu関数(最近はこちら)

ここでいったん3層ニューラルネットワークを実装し(*2)
次に出力層の活性化関数の話。

先ほどの関数とは違い、
機械学習の種類で使う関数が違う。

【ポイント2: 出力層の活性化関数の違い】
回 帰 : 恒等関数
分 類  :  Softmax関数

これで
ニューラルネットワーク全体のしくみの説明は終わったので、
機械学習では超有名なデータセット、
「MNIST(エムニスト)を使って、
手書き数字画像分類の推論処理の実装を行う。(*3)

なんやかんやを繰り返し、
最後は、
「バッチ処理」。

まとまりのある入力データをバッチといい、
バッチ処理することで高速に効率よく処理できるという。

それは、

Numpyなどのライブラリは、大きな配列の計算を効率よく行えるからだ、

という理由。

そうか、コンピュータってそもそも計算機なんだもんな、

と改めて納得した。

いや、でも、ちょっと待て。

なんでニューラルネットワークは、
重みパラメータを自動で学習できるのか?

そんな話、どこにも出てきてないやん!

お楽しみは、次章で、

ということか。

*1 活性化関数(activation function)とは、入力信号の総和を出力信号に変換する関数。
*2 実装のまとめ(p65)だけをやる場合、① Numpy のimport、② Sigmoid,identity _function(恒等関数)の2つの関数の再定義が必要(p48,p63)
*3 ここからエラーとの戦いが始まる。
① p73  エラーメッセージ : ModuleNotFoundError: No module named ‘dataset’
原因となったコード:sys.path.append(os.pardir)
これで対応し、解決
② p74 エラーメッセージ :  ImportError: No module named ‘PIL’
原因となったコード: from PIL import Image
これで対応し、解決(このコード! pip install pillow)
③ p76 pickleファイルからみの2つのエラー
ー1.エラーメッセージ : FileNotFoundError:[Error 2] No such file or directory : ’sample_weight.pkl’
原因となったコード:with open (“sample_weight.pkl”,  ‘rb’) as f:
これで対応し、解決
ー2.エラーメッセージ : ImportError:No module named ‘pickle’
原因となったコード:network = pickle.load(f)
これは②と同じエラーなので、このコード!pip import pickle

Follow me!