Nuts and Bolts of Applying Deep Learning

CS231の講義の関連動画を辿ってAndrew Ng先生がNIPS2016で行った講演「Nuts and Bolts of Applying Deep Learning」を見つけました。これがすごく面白い内容だったので超主観的にポイントをまとめてみます。

講演のビデオやスライド、Web上で見つけたブログは以下にあります。

スライドと1番目のBlog記事がよくまとまっているのでそれを読めば十分な気はします。が、自分の勉強としてまとめていきます。。

Major Deep Learning Trends [2:50]

  • データが少ないときは ハンドエンジニアリングで性能の差がつく
  • ビッグデータ時代は データ量で性能が決まる

To hit the top margin, you need a huge amount of data and a large NN model.

定式化: データ量 x 大きなモデル = 性能

End-to-end Deep learning [13:57]

  • End-to-endアプローチは 莫大なデータがある場合においてうまくいく
  • 例えば、自動運転では精度を満たすだけのデータが足りずまだ難しい
  • そういうケースではハンドエンジニアリングは依然として重要である

End-to-end works only when you have enough (x,y) data to learn function of needed level of complexity.

データ量万歳\(^o^)/です。

Bias-Variance tradeoff [27:04]

  • どんな状況であれ やるべきことは Bigger modelMore data
  • Bias と Variance を同時に改善できる(トレードオフの関係にならなくなる)
  • New model architectureの検討はハードル高いし大抵の問題はそこまで必要ない

基本的なワークフロー f:id:sanshonoki:20170520204228p:plain

Data synthesis (Data augmentation)[31:46]

  • データ合成はデータ量を増やせて性能改善にとても有効(More data)
    • ex. ノイズのない音声にノイズをのせるetc..
  • とはいえ、あくまでも人工的なデータなので学習にあまり効かない場合もある

Mismatched train/test (new bias/variance) [38:53]

学習用データの環境とアプリケーションの環境が異なるケースが増えてきている

学習環境とアプリケーション環境のデータセットの違いも考慮したワークフロー f:id:sanshonoki:20170520204239p:plain

Human-level performance [51:26]

  • 人間の認識精度をリファレンスとすべき
  • リファレンスと学習結果の差を見て 何にフォーカスするか判断できる

    human-levelエラーとtrainエラーの差が大 trainエラーとdevエラーの差が大
    Biasにフォーカス Varianceにフォーカス

What can AI/DL do ? [1:06:33]

AIアプリケーションとして有望なもの

  • 人間が1秒以内でできるタスク
  • 繰り返しシーケンスの次の結果の予測
    • ex. ユーザーが次の広告をクリックするかどうか

Personal advice (building ML career) [1:10:32]

  • 論文をたくさん読んで結果を再現する
  • Dirty work(データ収集、前処理、パラメータチューニング、デバッグ、データベースの最適化 etc…)をしよう

Dirty workは進捗がなかなか実感できないので勇気づけられます。「No magic」ということなので愚直にやりましょうということですね。。