Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Deep Learning book 11. Practical Methodology

2ab3dc02a9448f246bab64174b19dc1e?s=47 Kento Nozawa
November 06, 2017

Deep Learning book 11. Practical Methodology

2ab3dc02a9448f246bab64174b19dc1e?s=128

Kento Nozawa

November 06, 2017
Tweet

More Decks by Kento Nozawa

Other Decks in Research

Transcript

  1. Kento NOZAWA @nzw0301 * 例示は,ほぼnzwが考えているものです DEEP LEARNING 11. Practical Methodology

  2. Intro 2 • DLアルゴリズムがどう機能するかを知っていることは,適用上重要 ◦ nzw:(DLに限らないが)ライブラリを実行することは,理解したことにならない • 実践する上で様々な判断が必要 ◦ データを増やすか減らすか

    ◦ モデルを複雑にするか ◦ 正則化をどういれるか ◦ Optimizerで何を使うか ◦ 近似推論を使うか ◦ デバッグ,… • それぞれを試すのは時間がかかるので,闇雲には試したくない
  3. Recommendations are adapted from Ng (2015) 3 1. Determine your

    goal ◦ 使う評価関数とその目標値を設定 ▪ 例) validation accuracyで0.95 ◦ 解こうとしている問題から決める 2. 評価値計算を含めた end-to-end なパイプライン 3. パフォーマンスでどこがボトルネックか計測 ◦ 目標値に対してどこが足を引っ張っているのか明らかに ◦ 精度が悪い理由)Overfitting, Underfitting, データやソフトウェアの欠陥 4. インクリメンタルな変更を繰り返す ◦ 3つ目の結果をもと ▪ データ増やす ▪ パラメタ変える ▪ アルゴリズム変える等
  4. 1. Performance Metrics • 最初にどのメトリクスを使うかを決める ◦ 決めたら次に取る行動が決まってくる ◦ 設定したメトリクスで達成したい値も設定すべき ◦

    例)「Deep Learningでとりあえず凄いことしたい」は抽象的すぎるのでよくない • ほとんどの応用上,誤差が0は不可能 ◦ 特徴量は予測値の推定に必要な情報をすべてのもっていない ◦ モデルは確率的(初期値,ミニバッチなど) ◦ データは有限 4
  5. 1. メトリクスとデータ • 利用できるデータは限定的 ◦ いいモデルを作るために,大量のデータは重要 ◦ しかしそのコストに見合うだけの価値が,誤差を減らしたときにあるかを判断すること ▪ 極端な例)正解率99%のシステムを99.01%するために100TBのデータを集めたいか

    • データ収集には時間,お金,人的コストがかかる ◦ 例)医療や脳波における侵略的測定 • ベンチマークに対してどのアルゴリズムが良いかを調べる場合は増やさない ◦ 例)ImageNetなどコンペ 5
  6. 1. メトリクスの目標値はどうやって決めるのか? • アカデミックな場合 ◦ 既存研究のベンチマークの結果から決定 ▪ 例)去年のImageNet以上 • 実応用の場合

    ◦ いくつか値が考えられる ▪ 安全面 ▪ コスト ▪ 顧客にアピールできる 6
  7. • 解く問題やデータに依存 ◦ 間違え方によっては致命的に使えない • 2値分類での例 ◦ メールのスパム分類器 i. 非スパムをスパムと判定し,迷惑ボックスへ:重要なメール見落とすので危ない

    ii. スパムを非スパムと判定し,受信ボックスへ:イラッとする程度 ◦ もっと直感的な例:きのこ分類器 i. 毒キノコを食用キノコと判定し,食べた:やばい,死ぬかもしれない ii. 食用きのこを毒キノコと判定し,捨てた:あとでしょんぼりする程度 • 対応例)誤差関数における前者のコストをあげる 1. 誤り方が平等でないケース 7
  8. • 2値分類において片方のクラスだけに偏っているケース ◦ 例)100万人に1人の珍しい病気 ▪ 全員が病でないと判定したときの正解率: 99.9999 ▪ AccuracyやError rateをメトリクスとして適切ですか?

    • 解決の1例:Precision と Recall 1. Accuracyが機能しないケース 8
  9. 1. Precision & Recall 黒丸:不健康病な人  ☓: 健康な人 赤枠:不健康な人たち(今回予測したい人たち) 青枠:モデルに不健康と予測された人たち Precision

    = Recall = 9
  10. 100万人に1人の病を検知した場合の例 • 全員を不健康と判定 ◦ Precisionは0.0001 ◦ Recall は1.0 • 全員を健康と判定

    ◦ Precisionは1.0 ◦ Recall は0.0 1. Precision と Recallの例 10
  11. • PR curve ◦ y軸をprecision,x軸をrecallとしたグラフ ◦ precisionとrecallはトレードオフの関係:閾値を変えて判断 • F-socre (F1-score)

    ◦ PR curveは2変数なので1変数に集約 ◦ precisionとrecallの調和平均 ◦ どちらか一方を重み付けする場合: f-measure 1. PR curveとF-score 11
  12. • 状況によってはモデルがラベルを決めずに、人に判定させる ◦ 例)出力が確率値(2値)の場合、0.5±0.1は人に投げるなど • Coverage:モデルで判定したデータの割合 ◦ すべて人間が判定: Accuracy 100%,

    Coverage 0% ◦ 5%を人間が判定 :Accuracy 95%, Coverage 95% 前者のほうが高性能だが,意味がない 1. 他の評価値:Coverage 12
  13. 2. Default Baseline Models • 問題に応じてDeep Learningを使わないところから考える ◦ “AI-complete” な問題ならDeep

    Learningから始めるのがいい ◦ 例)Object recognition, speech recognition, machine translation • データに応じてモデルを選ぶ ◦ 画像など局所構造なら CNN ◦ シーケンスの情報が有効なタスクなら RNN 13
  14. 2. 最適化関係のデフォルト • SGD with momentum with a deacying learning

    rate ◦ 最小のlrまで線形/指数的に減らしていく ◦ validation errorを追跡し,plateuに入ったら2~10で割る • Adam ◦ (余談)個人的な経験で VAE系と相性が悪いことがある • Batch Normalization ◦ CNNにシグモイド系の非線形関数を使っている場合は特に有効 ◦ BNなしでもベースライン ▪ ただし,収束が遅かったり汎化性能に問題があれば BNいれる 14
  15. 2. ベースラインにおける汎化に関するテクは? • 学習データが1000万以上なくても、正則化や含めるべき • 以下のテクはほぼいつでも使える ◦ Ealry stopping ◦

    Dropout ◦ BN:場合によってはdropoutを省略できる 15
  16. 2. モデルを一から作るのではなく,既存モデルも • 取り組むタスクが既にあるタスクと似ているなら、そのモデルを使う • データも似てるなら学習済みモデルも使える ◦ ところでKerasにもいくつかあります ◦ Xception

    ◦ VGG16 ◦ VGG19 ◦ ResNet50 ◦ InceptionV3 ◦ InceptionResNetV2 ◦ MobileNet 16
  17. 2. 教師なし機械学習を使うかどうか • NLPでは教師なし機械学習で得られた特徴量を使うとよい ◦ word2vec, Glove, FastTextのword embeddings ◦

    余談)学習済みの部分は lrを小さめにしたり,学習しないなど • CVではsemi-supervisedや教師データが少数な場合除き利益は微妙 • 取り組むタスクで教師なしが重要だと既知なら含める • 入れなくてもbaselineのモデルがoverfitしてたらあとで足すのも可 17
  18. 最初に作ったモデルの学習データについてのメトリクスを測ったら性能が低い 1. 全データを使いきれてない ◦ 層やユニット数を増やす ◦ optimzierの向上:学習率を見直す 2. 大きいモデルでoptimizerを調節してもよくならない ◦

    原因:データの質が悪い i. ノイズがたくさん乗ってる ii. 出力に対して適切な特徴量になってない ◦ 対策:綺麗なデータやもっと良い特徴量を含んだデータを集める 3. Determining Whether to Gather More Data 18
  19. 3.学習データでうまくいき,テストでだめな場合 19 • 学習データとの差が大きい場合,データ増やすのは効果的 ◦ 考慮すべき点 ▪ データ収集のコスト ▪ 他手段によるテスト誤差を減らせる可能性

    ▪ 有意にテスト性能を上げると期待できるだけのデータ量であるかどうか ◦ 大企業の場合,ユーザ数などが多いので,データ収集のコストが低い傾向 • しかし,データを集めにくい場合 ◦ 汎化の章のテクニックなどを使う ▪ モデルを小さくする ▪ 正則化を強める ▪ Dropout入れたりなど ◦ それでもだめならまたデータを集めることを考える
  20. 3. データを集める場合,どのくらい集めるか? • データ数の対数スケールでしか寄与しない ◦ 少し増やしても汎化誤差への寄与は小さい (Fig5.4をみてね) • メトリクスが決まっていると集めるべきデータ数を概算できる ◦

    予算が決めらる 20
  21. 4. Selecting Hyperparameters 21 • Deep Learningではアルゴリズムの挙動を制御するハイパーパラメタ ◦ 学習時間 ◦

    メモリ ◦ モデルの質 ◦ 汎化性能 • ハイパーパラメタの選び方 ◦ 人手:それぞれのパラメタについての理解が必要 ◦ 自動:理解が乏しくてもいいが,コストがかかりやすい
  22. 4.1 Manual Hyperparameter Tuning 22 • 調整するパラメタと,誤差関数への効果・計算コストの関係をちゃんと知る • 目標:実行時間やメモリ制約下のもとで汎化誤差を小さくすること ◦

    1日で終わらせたい ◦ GRU8枚 ◦ GPU1枚 ◦ スマホで動かしたい
  23. 4.1 パラメタの増減と汎化誤差の関係 汎化誤差はハイパーパラメタの増減に対してU字の曲線を描く Figure From Ian Goodfellow and Yoshua Bengio

    and Aaron Courville. Deep Learning. MIT Press, 2016. 23
  24. 4.1 U字曲線にならないパラメタ 24 • 離散値をとるパラメタ ◦ ユニット数 ◦ 層数 •

    Binary値しかとれないパラメタや処理 ◦ 入力データの前処理
  25. 4.1 学習率 25 • 1つしか調節できない場合:学習率を触れ ◦ 学習率が正しく設定されていれば,モデルの capacityは最大になる • 学習率の増減に対しても訓練誤差はU字曲線

    ◦ 学習率が大きすぎる ▪ 誤差関数は増加する ◦ 学習率が小さすぎる ▪ 収束までのepoch数が増える ▪ 訓練誤差が高いところに停滞 (* 誤差関数が凸の場合は起こらないので特性)
  26. 4.1 目標の値に満たない場合とパラメタ 26 • 訓練時に値が満たないとき ◦ 正則化を外す・緩める ◦ optimizerがちゃんと動作させる ◦

    ユニット数・層数を増やしてモデルの表現力を上げる • テスト時に値が満たないとき ◦ test error = (train error) + (gap between train error and test error) ▪ NNでは訓練誤差は基本的に小さい値になる ▪ train errorを上げることなく,後者を小さくする:正則化や dropout
  27. 4.2 Automatic Hyperparameter Optimization Algorithms • 理想的なアルゴリズム ◦ パラメタの指定が不要で入力値と出力関数を決めるだけ ◦

    SVMやlogistic regressionは調節するパラメタが少ないので人気でもある • NNでは選ぶパラメタが多いあるの調節に時間がかかる ◦ 特に新しいネットワークやアルゴリズム • hyperparamater optimization ◦ 学習アルゴリズムとパラメタ探索を一緒にやる ◦ これ自体がパラメタをもつが,それを選ぶのは相対的に楽 27
  28. 4.3 Grid Search 28 数個しかない場合に有効なパラメタ探索アルゴリズム 1. 利用するパラメタの候補を少数だけ決める a. ここは経験的 b.

    log scaleにすることが多い i. 学習率 {0.1, 0.01, ...} ii. ユニット数 {50, 100, 200, ...} 2. これらのパラメタの直積集合の1要素ごとに学習 3. validation errorが低い要素を出力
  29. 連続値をとるパラメタ α = {-1, 0, 1} を考える 1. α =

    1が最良 a. 1以上がより良い可能性があるので, α= {1, 2 ,3} で再実行 2. α = 0が最良 a. 0±1の間がより良い可能性があるので, α = {-0.1, 0, 0.1}で再実行 4.3 Grid Searchはiterative 29
  30. 4.3 Grid Searchの欠点 30 • 計算量が指数的増加 • 並列に学習しても指数増加なので限界はある NOTE: 当たり前だがk-foldなどを行う場合は更に増加

  31. • ハイパーパラメタの値に対応した分布からサンプル ◦ 注:Grid-searchのように直積を取らない ◦ 学習率での例: ▪ log_learning_rate ~ u(-1,

    -5) ▪ learning_rate = 10log_learning_rate • Grid-searchよりも効率的 ◦ 特にあるパラメタが寄与が小さい場合 4.4 Random Search 31 Figure From Ian Goodfellow and Yoshua Bengio and Aaron Courville. Deep Learning. MIT Press, 2016.
  32. 4.5 Model-Based Hyperparameter Optimization • ハイパーパラメタの探索:最適化問題として考える ◦ validation errorを最小化するようなパラメタを決める ◦

    ハイパーパラメタで微分ができない /困難なことが多い • Bayesian Hyperparameter Search ◦ あるハイパーパラメタにおける validation errorの期待値とそのuncertaintyを求める ◦ 強くお勧めはしてない • その他 ◦ NNの構造を自動で決める [ICLR2017] ▪ 進化計算 ▪ 強化学習 (これ自体もNN) 32
  33. 4.5 The Drawbacks of Hyperparameter Search Algorithms • 明らかに悪いパラメタであっても事前情報がないと実行しきってしまう ◦

    非効率 ◦ 探索中に不要なパラメタが含まれる組み合わせも試してしまう • Freeze-Thaw Bayesian Optimization [Swersky+, 2014] ◦ 微妙な組み合わせであれば早い段階で学習を止める (freeze) ◦ いくつか実行して”freeze”した組み合わせがよさそうであれば “thaw”して学習を再開 33
  34. 5. Debugging Strategies • MLシステムの性能が悪い ◦ アルゴリズムが悪い ?実装が間違っている? • 色々な理由からデバッグが難しい

    ◦ 事前にアルゴリズムがうまくいくかわからない ▪ 例:ResNet152を医療画像に使ったら精度はどのくらいかは試さないとわからない ◦ 複数の構造があり,それを段階的に適用してる ▪ 一部がバグっていてもその近くでは許容できる誤差に収まることがありうる • ニューラルネットワークでは以下の2つの方法をとる ◦ 正しい挙動かを予測できる程度に単純なケースをつくる ◦ ネットワークのある部分で独立したテストをつくる 34
  35. 5. Visualize the model in action 35 • モデルの出力を聴覚的・視覚的に確認 ◦

    物体検知:実際にモデルが検知検知した画像を見る ◦ 音声の生成:実際に生成されたサンプルを聞く • accuracyやlog-likelyhoodなど量的な指標だけ見る場合には不適切 • 実際に確認しつつ,今の量的な指標が適切か判断できる ◦ 評価部分にバグがある場合,数値上高くても生成された音声が壊れてる等がありうる
  36. Visualize the worst mistake • 分類問題では,softmaxやsigmoidといった確率値を出力 ◦ このとき [確率値 =

    サンプルがそのクラスである確信度 ] • 正解の確率値が低く推定されているサンプル ◦ データの前処理やラベル付けが間違っている可能性 ◦ Googleの例:Street viewでcroppingの範囲が小さすぎて数字が削れていた 36
  37. ソフトウェアが正しく実装されているか • If training error is low but test error

    is high a. 実装は正しくてoverfittingしてる b. test errorの計算に至るまでにバグがある c. test dataがtrain dataとは異なる前処理をされている • If both errors are high ◦ 以下が考えられるが,判断できない (次のスライドへ) ▪ 実装ミス ▪ underfitting Reason about software using training and test error 37
  38. Fit a tiny dataset 38 train data全体ではなく,ごく一部のデータで学習させる 極端な例としてサンプル1つで学習 1. ちゃんと分類や生成ができた:underfitting

    2. できない:実装上のバグ
  39. Compare back-propagated derivatives 勾配計算を行う場合や微分可能な演算を追加する場合,bpropを実装する この計算が正しいかを確かめたい場合:finite differences (有限差分)を使う もっと近似精度を上げる場合: centeted diffirences

    39
  40. Compare back-propagated derivatives m次元からn次元ベクトルへの関数ではJaccobianの微分が必要 finite diffrenceingは単一の値しか見れない • 要素ごとにmn回計算 • 乱数を使った写像をつくる

    ◦ 入力と出力が1次元になるので,finite diffrencingできる • 複素数使う (略) 40
  41. Monitor histgrams of activations and gradient 41 • 活性化関数の適用前 ◦

    どれくらいサチってるか ◦ サチってるのはいくつあるか • 活性化関数(ReLUの場合) ◦ どのくらい0になるか ◦ 常に0になるユニットはいくつあるか • 勾配を見る ◦ すぐに消えたり,爆発していれば学習がうまくいってない • 勾配の変化の大きさを見る ◦ 大体1%くらい変わる ◦ NLPのような疎なデータは時間軸を取る