160924 Deep Learning Tuningathon

7,003 views

Published on

Deep Learning Tuningathonの講義資料

Published in: Technology
0 Comments
57 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,003
On SlideShare
0
From Embeds
0
Number of Embeds
506
Actions
Shares
0
Downloads
0
Comments
0
Likes
57
Embeds 0
No embeds

No notes for slide

160924 Deep Learning Tuningathon

  1. 1. Deep Learning 勉強会 パラメーターチューニングの極意 Takanori OGATA ABEJA Inc.
  2. 2. © ABEJA, Inc. Deep Learningのパラメータを理解し、チューニングを実践することで Deep Learningに関する理解を深める ■学べること ・どのパラメータを変えると実行速度や学習速度がどう変わるのか? ・ネットワークの構築方法を変えるとどう精度にインパクトするのか? ■対象 Deep Learningはある程度使ったことあるが、ネットワークの細かな チューニングはどうすればいいかわからない 目的
  3. 3. © ABEJA, Inc. Deep Learningに対する初学者以上の知識 Deep Learningで自分でネットワークを書いたことがある Python(numpy, tensorflow)に関する知識 Linux, SSH, AWSに関する知識 今回の勉強会の対象者
  4. 4. Deep Learningをマスターするためには?
  5. 5. ネットワークの気持ちを理解することが重要
  6. 6. ネットワークの気持ちを理解するためには?
  7. 7. © ABEJA, Inc. • 実践あるのみ • 問題設定や、ネットワークの構造でチューニングの仕方は異なるので、 量をこなすことが重要 • 色々なデータセットでTrainingしてみる • パラメータを変えて結果がどう変わるか計測してみる • 様々な論文を読んで、ある問題に対してどのようなアーキテクチャやパ ラメータを使っているか読み解く ネットワークの気持ちを理解するためには?
  8. 8. © ABEJA, Inc. ・Ubuntu 16.04 on AWS ・Tensorflow + Keras(https://keras.io/) 今回使う環境 Kerasを使ったCNNのSample
  9. 9. © ABEJA, Inc. 全結合層 畳み込み層 プーリング層 ネットワークの深さ 活性化関数 出力の正規化 Dropout 重みの正則化 Deep Learningのパラメーター ❶モデル系 ❷最適化系 ❸その他 学習率 (最適化のアルゴリズム) Batch Size Epoch数 Data Augmentation Weight Initialization データの事前処理 *今回は主要なところのみ紹介
  10. 10. © ABEJA, Inc. 全結合層 畳み込み層 プーリング層 ネットワークの深さ 活性化関数 出力の正規化 Dropout 重みの正則化 Deep Learningのパラメーター 学習率 (最適化のアルゴリズム) Batch Size Epoch数 Data Augmentation Weight Initialization データの事前処理 ❶モデル系 ❷最適化系 ❸その他 *今回は主要なところのみ紹介
  11. 11. © ABEJA, Inc. 全結合層(Fully Connected Layer) ■主要パラメータ ・隠れ層の数 ■学習パラメータの総数 パラメータの総数は Input * hidden + bias 入力が4096次元、hiddenが512だと 4096*512+512 = 2,097,664 *少ないほうが速度、イテレーション数ともに速く学習できる事が多い
  12. 12. © ABEJA, Inc. 全結合層(Fully Connected Layer) 大 Hidden layerの数 小 Pros 表現力が高い 省パラメータ 学習が早い Cons 過学習しやすい 学習が遅い 少なすぎると精度が落ちる 学習できないことがある
  13. 13. © ABEJA, Inc. 畳み込み層(Convolutional Layer) ■主要パラメータ ・カーネルサイズ ・フィルタの数 ■学習パラメータの総数 Weightsの総数(≒パラメータの総数, Biasは除く)は Channel * Height * Width * Filters 入力が(ch, h, w) = (32, 32, 32), カーネルサイズが(h, w) = (3, 3), フィルタ数 f = 64とすると 32 * 3 * 3 * 64 = 18,432 *全結層と比べると意外と少なくなる、CNNがうまくいく理由の1つ
  14. 14. © ABEJA, Inc. 畳み込み層(Convolutional Layer) 大 カーネルサイズ 小 Pros より広い範囲の領域から 影響を受けることができる 省パラメータ 実行速度は早い Cons パラメータ大 実行速度が遅くなる 局所的な影響しか受けない * 最初の層は大きめのカーネル(ex, 7x7)、最後の方は3x3, 1x1のカーネルを使うのが主流 大 フィルタの数 小 * 全結合層の隠れ層と同じような雰囲気 Pros 表現力が高い 省パラメータ 学習が早い Cons 過学習しやすい 学習が遅い 少なすぎると精度が落ちる 学習できないことがある
  15. 15. © ABEJA, Inc. ネットワークの深さ ■主要パラメータ 何段、全結合や畳込みを積むか? ■学習パラメータの総数 積んだ分だけ増える
  16. 16. © ABEJA, Inc. ネットワークの深さ 大 ネットワークの深さ 小 Pros 表現力が高い 省パラメータ 学習が早い Cons 過学習しやすい 勾配消失問題が発生する 学習が遅い 少なすぎると精度が落ちる 学習できないことがある *勾配が消えないような工夫をして、 3x3, 1x1の畳み込みを多段に重ねるのが主流 *どのくらい深いほうがいいのかは、研究でも注目されている、奥が深い
  17. 17. © ABEJA, Inc. 活性化関数(Activation Function) ■主要パラメータ ・活性化関数の種類(relu, pleru, elu, sigmoid, tanh, etc…) とりあえず始めは、畳み込みにはReLU使って置けば良い。 Outputの層だけ、タスクに応じて変更する必要あり (クラス分類ならSoftmax, RegressionならSigmoid, tanh等)
  18. 18. © ABEJA, Inc. 出力の正規化(Normalization) ■主要パラメータ Local Response Normalization (LRN), Batch Normalization, etc… ■コメント かなり重要だが、最初は気にしなくて良いので サーバーが学習してくれてる間に、みなさんはBatch Normalization[1]を学習しましょう。
  19. 19. © ABEJA, Inc. Dropout ■主要パラメータ Dropoutの確率 p (0.0 – 1.0) Dropoutをどの層の間に挟むか(入れる or not) Pros 過学習しにくくなる 省パラメータ 学習が早い Cons 学習が遅い (たくさんIterationを 回さないといけない) 過学習しやすくなる 大 生起確率 小
  20. 20. © ABEJA, Inc. 重みの正則化(Weight Decay) Overfittingを避けるためにLossに重みの正則化項を加える つまり、トータルのコスト = タスクに設定したロス + 重みλ *Ω(θ) ■主要パラメータ ・L1 or L2の正則化の選択(or ブレンド) ・重みλ Pros 過学習しにくくなる 省パラメータ 学習が早い Cons 学習が遅い (たくさんIterationを 回さないといけない) 過学習しやすくなる 大 重み 小 Overfittingの例[3] where [2]
  21. 21. © ABEJA, Inc. 全結合層 畳み込み層 プーリング層 ネットワークの深さ 活性化関数 出力の正規化 Dropout 重みの正則化 Deep Learningのパラメーター 学習率 (最適化のアルゴリズム) Batch Size Epoch数 Data Augmentation Weight Initialization データの事前処理 ❶モデル系 ❷最適化系 ❸その他 *今回は主要なところのみ紹介
  22. 22. © ABEJA, Inc. 学習率(Learning Rate) ■主要パラメータ *SGDの場合 学習率(Learning Late) モーメンタム(Momentum, Nestrov option) 減衰率(Decay)
  23. 23. © ABEJA, Inc. 学習率(Learning Rate) 学習率λ(Learning Late) θ = θ - λ∇θ 一回のバッチ更新でどのぐらいパラメータをアップデートするか *学習時にLossの推移を見るのは非常に重要 ■決め方 データ、ロス関数に大きく依存 *学習中にLearning Late, Momentum, 減衰率について調べて みましょう [5] ■自動的に決めてくれないの。。。? Adagrad, Adadelta, Adam等様々なアルゴリズムが考案されている が今回は使わない 学習率の初期値によるLossの推移 [4]
  24. 24. © ABEJA, Inc. Batch Size & Epoch *省略 口頭で説明します
  25. 25. © ABEJA, Inc. 全結合層 畳み込み層 プーリング層 ネットワークの深さ 活性化関数 出力の正規化 Dropout 重みの正則化 Deep Learningのパラメーター 学習率 (最適化のアルゴリズム) Batch Size Epoch数 Data Augmentation Weight Initialization データの事前処理 ❶モデル系 ❷最適化系 ❸その他 *今回は主要なところのみ紹介
  26. 26. © ABEJA, Inc. Data Augmentation ■主要パラメータ 増やし方(回転、反転、スケーリング、ノイズの追加 etc…) 増やす枚数 *基本的には増やしたほうがベター http://www.slideshare.net/KenChatfield/chatfield14-devil Pros 過学習しにくくなる 精度向上 *じっくりチューニングする場合 はこちら 学習が早い *Try and Errorの際はこちら Cons 学習が遅くなる 過学習しやすくなる 大 データ枚数 小
  27. 27. © ABEJA, Inc. Weight Initialization *省略 口頭で説明します
  28. 28. © ABEJA, Inc. データの前処理 Inputデータを学習しやすくするために加工する *データに依存するが基本的にやったほうが良い ■主要パラメータ 前処理の方法 ・データ範囲を全て[0.0, 1.0]に変換 ・データを中心化 ・PCA Whitening ・ZCA Whitening Etc…
  29. 29. © ABEJA, Inc. チューニングのコツ ・一度の学習でパラメータの変更は1つまで ・毎回の学習方法と結果を記録しておく ・Train-Validation Lossを見て過学習していないかチェック ・TrainingデータとTestingデータはきちんと分けておく、毎回同じものを 使う
  30. 30. © ABEJA, Inc. BackendでTensorflowを使っているので、Tensorboardを利用すると効果的に学習結果を 表示できます *Train-Validation Lossを可視化するのはかなり重要! その他 https://www.tensorflow.org/versions/r0.10/how_tos/summaries_and_tensorboard/index.html
  31. 31. ルール説明
  32. 32. © ABEJA, Inc. みんなでパラメーター調整によりCifar10の精度を競います ■評価 ・精度 ・改良したコードのオシャレ度 ■縛り ・複雑なネットワーク(GoogleNet, ResNet, etc..)は使わない (難しいことしたい場合は要相談) ・今回はネットワークの気持ちを理解するために、最適化はSGDのみを利用 ・エポック数はMax200まで ルール説明
  33. 33. © ABEJA, Inc. みなさんがチューニングに注力できるようベースのコードを用意しています 下記コマンドを実行してテンプレをGet! ソースコード(テンプレ) git clone git@github.com:abeja-inc/deep_learning_tuningathon.git
  34. 34. © ABEJA, Inc. 空き時間を利用して、 ・資料内の分からないキーワードを調査&学習 ・実行内容と結果をまとめていく ・最終発表の準備 機械が学習している間に。。。
  35. 35. Enjoy Deep Learning!
  36. 36. © ABEJA, Inc. [1] S. Ioffe and C. Szegedy. Batch normalization: Accelerating deepnetwork training by reducing internal covariate shift. In ICML, 2015. [2] http://deeplearning.net/tutorial/gettingstarted.html [3] Ian Goodfellow, Yoshua Bengio, and Aaron Courville. Deep learning. Book in preparation for MIT Press, 2016 [4] http://cs231n.github.io/neural-networks-3/ [5] http://sebastianruder.com/optimizing-gradient-descent/ 引用文献

×