6ー5.計算グラフで微分をスピードマスター❗️〜ゼロつく読書ノート5

AI学習ダイアリー
「学習」にもいろんな意味がある

4章「ニューラルネットワークの学習」では、

学習とは、データから重みパラメータの値を自動で決定すること

と定義されていた。

前回はサラッと流したが、
改めて考えれば、
一般的にいう「学習」(*1)とは、ぜんぜん意味が違うことに気づく。

*1 一般的には、新しい知識を身につけたり、できなかったことができるようになること。

機械学習も、コンピュータが勝手に学習してなんでもできるようになる、
という勘違いが一部にあり、
それがひいては、
AIはなんでもできるような話になってしまうのだが、
ここでいう学習とは極めて限定的な定義なのだ。

そして、
その定義に基づいた学習の手順は、
次の4つからなる。

1.ミニバッチ 訓練データからランダムに一部のデータを選び出す。
2.勾配の算出 ミニバッチの損失関数を減らすため、各重みパラメータの勾配を算出する。方法は、①数値微分、誤差逆伝播法(本章で解説)
3.パラメータの更新 重みパラメータを勾配方向に微少量だけ更新する。SGD(確率的勾配降下法)を使用。
4.繰り返す 1〜3を繰り返す。

今回、この章では、
手順2の誤差逆伝播法を、
「計算グラフ」という手法を使って、ていねいに解説している。

計算グラフの例。グラフといっても図形的。

視覚的に理解が可能という計算グラフは、
文系頭にもすんなり入ってくる。

キモである
「局所的な計算」や、
合成関数の微分の「連鎖律」が、
計算グラフではひじょうにわかりやすい。

さらに、
ニューラルネットワークの機能ごとに、
「層(レイヤ)」にまとめ、
それを、
「クラス」で実装するのもポイントだ(p10ー11に解説あり)

なお、ここらへんの考え方は、
オブジェクト指向でなぜつくるのか第2版
に詳しい。

オブジェクト指向は、IT系の試験には頻出項目。

最終的に、
各種レイヤを組み合わせ、
2層のニューラルネットワークを実装する。

この膨大な(わたしにとって)コードを読み解くのは宿題にして、
レイヤとして「モジュール化」(*2)することで、
5層、10 層、20 層・・・と大きなネットワークを
まるでレゴブロックを組み立てるように、
かんたんにつくることができる、
というのはすごいと思った。

*2 ひとつの機能でひとまとめにしたものを「モジュール」といい(ここではレイヤ)、それをひとつの部品とみなすこと。

さて、
3〜5章にわたってくわしく解説されてきた
ニューラルネットワーク。
量は多いが読み返すたびに気づきがある。
何度も何度も読み返したい。

Follow me!