東大松尾研が公開しているエンジニア向けDeep Learning講座、DL4USの評判が良さそうなので一通りやってみました。
やってみての感想
これまでディープラーニングのオンライン講座は fast.ai が一番だと思ってました。
ただ、
- オリジナルのライブラリで抽象化されすぎていて実装がよくわからん(概念は理解できるけど、、特にv2 !)
- モデルの学習でGPUを使って数時間以上〜がちょいちょいある(という記憶)
- YouTubeの教材をまじめに聴くとそれなりに長い(英語の勉強にもなっていいんだけど)
と、学習時間がそこそこ必要という不満もありました、個人的に。
(v1とv2を一通りやりました。今はv3のようですがv3のことはよくわかりません。。)
それに比べて、DL4USは
素晴らしい !! その気になれば数日で終わらせることもできる
基本的に以下のとても参考になる記事に従っていれば問題なく進められます。
うまくいかなかった箇所
MNISTの学習でなぜか発散する(Lesson1 Section1、Lesson2 Section2、Lesson4 Section2等)
もともとのコードでは最適化アルゴリズムが optimizer='sgd'
になっていますがそのままでは自分の環境ではなぜかAccuracyが0.11となって学習が発散してしまいました。。
optimizer='adam'
やoptimizer='rmsprop'
にしてやるとAccuracyも98%ぐらいになってうまくいきました。
MS-COCOをunzipするときのTips (Lesson5 Section1)
Colab上でMS-COCOのデータを解凍するとファイル数が多すぎるため標準出力に大量にメッセージ出力され、 それに伴いMacのファンが唸り始めて一向に処理が終わる気配がありませんでした..
以下のように標準出力を出さないようにスクリプトを書き換えてやると問題なく解凍できました
! sed -i -e 's/-d download\//-d download 1>\/dev\/null/' download_mscoco.sh ! sed -i -e 's/N_TRAIN_DATA = 50000/N_TRAIN_DATA = 30000/' preprocess_mscoco.py
その他参考になったこと
パラメータの初期化 (Lesson1 Section3)
特にGlorotの初期化法は活性化関数が全て線形な場合の解析結果であり、中央付近が線形とみなせるsigmoid関数やtanh関数に適していると言えます。 また、Heの初期化法は活性化関数がReLUであるときに適しています。
巷のKerasのコードでは活性化関数がReLuであってもデフォルト値であるGlorot(Xavier)の初期化になっている場合が多いですが、ちゃんとHeの初期化になっていて感心しました
ちなみに、normal と uniform の使い分けはどうなの? と気になって調べてみたのですが 基本的には差はないようですね。。
【参考記事】
- glorot_normal init should be glorot_uniform? · Issue #52 · keras-team/keras · GitHub
- neural network - When to use (He or Glorot) normal initialization over uniform init? And what are its effects with Batch Normalization? - Data Science Stack Exchange
によると
- 基本的には personal choice である
- Bengioは uniform を好んで使っていた、一方、Hintonは normal を使っていた
- ResNet では he_normal が使われている
- DLライブラリは uniform を使っているのが多い (のでKerasもそれをデフォルトとしたとCholletさんが言っている)
そうです。
BatchNormalization (Lesson2 Section3)
⋆ 後続の研究で、Batch Normalizationは内部共変量シフトを軽減させる効果は実はほとんどないことが実験的に示されています。 一方でBatch Normalizationにより損失関数・勾配の形状が緩やかになり、勾配法などによる最適化が容易になることが実験的に・一部理論的に示されています。 出典: S. Santurkar et al. "How Does Batch Normalization Help Optimization? (No, It Is Not About Internal Covariate Shift)". arXiv. 2018
うーん、そうだったのか、、これは知らなかった、、
論文読んでみたいと思います