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

More Related Content

160924 Deep Learning Tuningathon