まえがき
ゼロから作るDeep Learning -Pythonで学ぶディープラーニング理論の実装-を読み終えました。
と言っても1周既に読んでいるので2周目ですが...
G検定受験や、統計学の勉強を挟んだので2週目は比較的スラスラ読めました。これが成長?
DeepLearningの技術と行っても色んな場所に色んな種類のものがあるので、今回は自分なりに情報を整理していきます。
本の構成
8章で構成されているこの本の章毎の内容を大まかに書きます。
1章 Python 入門
この本で登場するソースコードが理解できる範囲のpythonの勉強。
写経しながら進めればOK。便利な記法は都度説明が記載されてるとても嬉しい。
2章 パーセプトロン
ニューラルネットワークの起源とも言えるパーセプトロンについての勉強。
なぜ"深層"である必要があるかとかはわかってくるはず。
3章 ニューラルネットワーク
ニューラルネットワーク(ディープでない)を実際に実装していく。まずは順伝播
入力値と重み、バイアスを使って計算し、活性化関数を通して次の層へつなげる流れの勉強。
4章 ニューラルネットワークの学習
"学習"とは精度を上げることを目的に重みを調整していくこと
ニューラルネットワークは主により良い"重み"を見つけることで精度が上がる。
そのために損失関数を設定し、どれくらい正解とずれているのかを数値化(関数化)する。
関数f(x)を微分すると傾きが出るから、それを勾配に沿って少しずらすと損失関数の値は小さくなるよねっていう話。ここで微分、偏微分の考えが出てくる。
5章 誤差逆伝播法
4章の微分は考え方的に理解がしやすいが、計算量が多すぎて使い物にならない。そこで、ほぼ同値を求めることができる誤差逆伝播法を学びます。ここで出てくる"計算グラフ"の考え方結構好き。
6章 学習に関するテクニック
より早く、良い精度を出すための考え方みたいなのを学ぶ。
7章 畳み込みニューラルネットワーク
この本、そして画像認識をする上での肝となる技術。すごく分かりやすい。
ただし、4次元ぐらいのデータで実装するのでたまに混乱する。
8章 ディープラーニング
画像処理中心の最新動向系統の話。
4年前の本なので少し情報が古い部分もあるが発展の歴史として知っておいて損はないしG検定でも使える知識。
自分なりのまとめ
DeepLearningの中に何個かの要素があるように感じたのでそれを自分なりにまとめます。
- 活性化関数
- 損失関数
- 最適化手法(Optimizer)
- 重みの初期値
- 過学習対策
- ハイパーパラメーターの最適化
- その他精度向上のヒント
活性化関数
ニューロンに入ってきた値を変換することに使用する関数。非線形関数の表現が出来る。
- シグモイド関数
- ステップ関数
- ReLU関数 実装がかんたんで高精度が出る関数
- ソフトマックス関数
- Mish
2020/2時点での高性能な活性化関数
ついに誕生!期待の新しい活性化関数「Mish」解説
損失関数
予測結果と正しい回答の差をどう計算するかの関数。ここは問題に応じたものを選べば良いのかな?ちょっと理解が弱いポイントです。
- 2乗和誤差
- クロスエントロピー誤差
最適化手法(Optimizer)
誤差と勾配を求めたあとどういう方針で重みを更新するかという手法
どれが一番というものはないみたいです。
ちょっと調べてみた。
Optimizer SGD -> 約 373,000 件
Optimizer momentum -> 約 1,640,000 件
Optimizer AdaGrad -> 約 75,900 件
Optimizer Adam -> 約 2,530,000 件
Optimizer Eve -> 約 1,490,000 件
重みの初期値
重みを小さくすることで、過学習が起きにくくなる。
また、活性化関数に応じてある程度良い精度に学習できる初期値が提唱されている
- Xavierの初期値 活性化関数が戦型であることを前提に導出されている
- Heの初期値 ReLUで推奨されている
過学習対策
訓練データに適応しすぎて、新しいデータに対する制度が低い状態
- weightdecay
- dropout
- BatchNormalization
ただし、併用すればいいというものでもない?
Batch Normalization と Dropout は併用しない方が良いという話
ハイパーパラメータの最適化
学習率など人手で決定する必要のパラメータをハイパーパラメータという。
- GridSearch
その他精度向上のヒント
- アンサンブル学習
- 学習係数の減衰
- データ拡張
入力画像から回転や移動した別の画像をつくり、増やす前処理
あとがき
この本ではCNNの中の動きを学びました。現場で使うとなると何らかのフレームワーク使うことにはなると思いますけど、なんとなく動きを理解できたのは良かった。
なにか一個作ったほうがためになりそうな気もするけどどうしようかといったところ