「ゼロから作るDeep Learning」シリーズを読んだ

Feb 24, 2021 21:46 · 32 words · 1 minute read

ニューラルネットワークに入門しようと思って、オライリーの「ゼロから作るDeep Learning」シリーズを読んだ。

第1巻はゼロからニューラルネットワークを構築する。ニューラルネットワークも大きな処理ステップは線形回帰やロジスティック回帰など他の機械学習と一緒。モデルとなる関数と損失関数を定め、損失関数が小さくなるモデルのパラメータを勾配法で学習する。はじめの実装では数値微分による勾配法で学習させる。これがすごく遅い。写経しながら読んでいたのが、あまりに学習が進まなくて写し間違いを疑ったほど。次に誤差逆伝播法を使って学習させる。速い。誤差逆伝播法の貢献を実感できる。

活性化関数や損失関数などに、微分可能でほとんどの部分で微分が0にならない関数を選ぶということが繰り返し強調される。例えばステップ関数ではなくシグモイド関数にする。微分が0になると、損失Lを小さくするのにパラメータをどちらへ変化させればいいかわからないからだ。これまで評価関数(微分して0でもよい)と損失関数の2つがある理由を理解していなかったので勉強になった。

第2巻は自然言語処理、時系列・シークエンスデータに対するニューラルネットワークの本。前半は単語の分散表現や word2vec とその高速化の話。後半は RNN, LSTM, seq2seq, Attention, Transformer の紹介となっている。RNN 以降のモデルは複雑で、そんなんでうまくいくんだという感想。RNN が並列化できないのに対し、Transformer は処理がシーケンシャルではなく、学習を並列化できるらしい。

第3巻ではのフレームワークを作る本。Chainer, PyTorch, Tensorflow など実在のフレームワークに共通するパーツを実装していく。理論的な話は第1巻と重複する部分も多い。複雑なニューラルネットワークを構築するにあたって第1巻の実装では遅い・書きにくい部分を改善していく点が差分。熟れたインターフェースを提供するためにオペレータを上書きするとか、複雑な計算グラフの伝播順序とか、メモリの節約方法とか。

どれも評判通り良い本だった。