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

Deep Learning 1 (Chapter 4 , Chapter 5)

banquet.kuma
February 02, 2020

Deep Learning 1 (Chapter 4 , Chapter 5)

自習のために「ゼロから作るDeepLearning 1巻」4,5章をまとめました

banquet.kuma

February 02, 2020
Tweet

More Decks by banquet.kuma

Other Decks in Technology

Transcript

  1. 講座の流れ 【講座の⽬的】 ・ニューラルネットワークの理論を理解し、説明できるようになる ・基本的な動作をPythonで実装できるようになる ・ライブラリ活⽤時のパラメータの意味が理解できる 回 分野 章 キーワード 第1回

    推論 2、3 ニューラルネットワーク、 活性化関数、⾏列計算 第2回 学習 4、5 損失関数、数値微分、 勾配法、誤差逆伝搬 第3回 学習 6 SDG、Adam、過学習、 ハイパーパラメータ 全3回を予定 2
  2. 1. 「学習」とは︖ ⇒推論と学習の違い 2. どうやって学習させるか︖ ⇒勾配法 3. 「傾き」の求め⽅ ⇒数値微分 4.

    効率的な「傾き」の求め⽅ ⇒誤差逆伝播法 5. 学習⽅法について ⇒オンライン、ミニバッチ、バッチ 6. ⼿書き⽂字画像から学習 ⇒Pythonで実装 7. まとめ 第2回の⽬標 • 学習のアルゴリズム「勾配法」を理解する • 勾配の効率的な求め⽅「誤差逆伝播法」を理解する 講座の流れ 3
  3. 学習がなぜ必要か︖(1/2) • 「推論」は、未知のデータを⼊れて予測値を取り出す操作 • 「学習」は、正解が出るように重み(W)とバイアス(B)を調整する操作 推論 未知のデータXを⼊⼒して、予測値Yを出す 0 1 2

    3 + = ⼊⼒ 出⼒ 重み バイアス 学習 + = ⼊⼒ 出⼒ 重み バイアス 0 1 2 3 3 2 ✕ 3 ◦ Xを⼊⼒したら、Yが出るように WとBを調整する 未知のデータ 既知のデータ 正解/不正解を教える 5
  4. どうやって学習させるか?(1/9) どのくらい正解から外れているかの指標︓損失関数 名称 2乗和誤差 交差エントロピー誤差 式 ⽤途 回帰問題 2クラス分類 多クラス分類

    損失関数の種類 損失関数を最⼩にすることで、 「予測値」を「正解値」を近づける︕ & ( (y − t)( − t log y +(1 − t)log(1 − ) − ∑;<= > t; log y; y︓予測値、t︓正解値、k︓クラス数 8
  5. = − t log y +(1 − t)log(1 − )

    = −log 0.87=0.14 (Survived(実際)=1の時) = −log 0.13=2.0 (Survived(実際)=0の時) 2クラス分類の交差エントロピー誤差︓ -(予測確率の対数と正解ラベルの対数尤度) どうやって学習させるか︖(3/9) Survived (予測値) 0.87 Sex Survived (実際) 1 差 分 を 取 る Age Pclass Survived (実際) 0 (:予測値 、 t ∶正解ラベル) 10
  6. 出典︓https://ml4a.github.io/ml4a/jp/looking_inside_neural_nets/ 28 28 L = − ∑;<= J t; log

    y; = − log 0.6 0 100 200 0 120 255 0 89 180 正解 y= (0.1) y& (0.05) y( (0.0) yL (0.0) yM (0.05) yN (0.1) yO (0.0) yP (0.1) yQ (0.6) yJ (0.0) 0 1 2 3 4 5 6 7 8 9 (R :予測確率 、 R ∶正解ラベル) t= (0) t& (0) t( (0) tL (0) tM (0) tN (0) tO (0) tP (0) tQ (1) tJ (0) 交差エントロピー誤差 : 予測確率の対数と正解ラベルの積の和の符号を変えたもの どうやって学習させるか︖(5/9) one-hot label 12
  7. どうやって学習させるか︖(7/9) 損失関数は重み(W)とバイアス(B)の関数である。 損失関数の傾きと逆⽅向に動かして”⾕底”を⽬指せば良い L 重みW 、 バイアスB 損失関数 初期位置 ⾕底

    傾き>0 傾き<0 動かす⽅向 重みの更新︓W ← W − ρ L W バイアスの更新︓B ← B − ρ L B 傾き は「学習率」と⾔って ハイパーパラメーターの⼀種である 傾きを利⽤して、関数が最⼩値を 取るように変数を最適化する ⼿法を「勾配法」という 更新後位置 ゴール 14
  8. どうやって「傾き」を求めるか︖(1/5) 機械は解析的に傾きを求められないので、「数値微分」によって近似的に求める 重みW L(W) 損失関数 2h 現在位置 [\(]) [] ≅

    \ ]_` I\(]I`) (` 傾き 前後に微⼩量 ℎ 移動させて変化を求める これが傾きの近似値 L W + h −L(W − h) 重みの更新︓W ← W − ρ L W 18
  9. 勾配法で、損失関数が減少する様⼦を確認する 重みの更新︓W ← W − ρ L(W, B) W バイアスの更新︓B

    ← B − ρ L(W, B) B W B W B 損失関数を以下と仮定する L W, B = W( + B( 傾きの⽅向 ゴール ゴール どうやって「傾き」を求めるか︖(2/5) 19
  10. どうやって「傾き」を求めるか︖(3/5) 重み、バイアスが更新される過程を可視化する W, B = −10 , 10 からスタート 、繰り返し回数︓20回

    学習率=0.01 学習率=0.1 学習率=0.8 学習率=1.0 重みの更新︓W ← W − ρ L(W, B) W バイアスの更新︓B ← B − ρ L(W, B) B 20
  11. どうやって「傾き」を求めるか︖(4/5) 数値微分の問題点︓ ニューラルネットが巨⼤になるとパラメータ数が膨⼤になり、 現実的な時間で「傾き」を求められない︕ 28 28 予測確率 = (0.1) &

    (0.05) ( (0.0) L (0.0) M (0.05) N (0.1) O (0.0) P (0.1) Q (0.6) J (0.0) ⼊⼒層(784) 中間層(50) 出⼒層(10) 教科書記載の「⼿書き⽂字分類(MNIST)」のニューラルネットワーク 必要な重みWの数︓39,700 必要なバイアスの数︓60 (1,784)の⾏列 21
  12. 1 . 重み( W ) 、 バイ アス( B) を”適当に”に決める

    2. 訓練データ を入れて、 推論さ せる( 誤差を求める) 3. 誤差から 傾き を求める 4. 重み( W ) 、 バイ アス( B) を更新する 2~4を繰り 返す 学習の流れ ループ 数値微分を使った学習を細かく⾒ると、、 [\(b) [b ≅ _ I(I) (` 1つのパラメータの傾きを求める際に2回「推論」させる必要がある︕ つまり、2〜4を1回実施する度に (39,700+60)×2 + 1 = 79401回 推論動作が必要になる 10000回ループさせると、 7,940,000,001回、、、終わるだろうか(反語) どうやって「傾き」を求めるか︖(5/5) 22
  13. 効率的に「傾き」を求める(1/12) t& t( L = − ∑;<& ( t; log

    y; 交差エントロピー誤差 ⼊⼒層 中間層1層⽬ 中間層2層⽬ 出⼒層 「傾き」をもっと簡単に計算できないか、3層のニューラルネットワークで考える 中間層1層⽬の第1ニューロンから中間層2層⽬の第1ニューロンにかかる 重みを ”効率的に”求めることを考える。 () 24
  14. 1. ⾮線形であること ⇒ 多層化のメリットを活かす︕ 2. 推論動作での減衰が⼩さい ⇒ 多層化のメリットを活かす︕ 3. 傾きが0の領域がないこと

    ⇒ 勾配消失を防ぐ 4. 傾きが⼀定であること ⇒ 学習速度が早い 名前 step sigmoid tanh ReLU Leaky ReLU 特徴 0 or 1を返す ・0〜1を返す ・中⼼が0.5 ・-1〜1を返す ・中⼼が0 ・⼊出⼒が⽐例 ・a≦0で傾き=0 ・⼊出⼒が⽐例 ・a≦0で傾き≠0 式 グラフ ℎ ℎ ℎ ℎ ( > 0) ( ≦ 0) 1 1 + Iz z − Iz z + Iz ( > 0) ( ≦ 0) ( > 0) ( ≦ 0) 進化の過程 ℎ 中間層で使う活性化関数︓ 重みの更新︓W ← W − ρ L W 傾きが0だと 更新されない ! 効率的に「傾き」を求める(12/12) 35
  15. 出典︓https://ml4a.github.io/ml4a/jp/looking_inside_neural_nets/ 28 28 実は今まで、1個のデータ(1⽂字)について説明していました。 実際の学習では、多数の訓練データを使います。 訓練データが多数の場合について説明します。 0 100 200 0

    120 255 0 89 180 正解 y= (0.1) y& (0.05) y( (0.0) yL (0.0) yM (0.05) yN (0.1) yO (0.0) yP (0.1) yQ (0.6) yJ (0.0) 0 1 2 3 4 5 6 7 8 9 (R :予測確率 、 R ∶正解ラベル) t= (0) t& (0) t( (0) tL (0) tM (0) tN (0) tO (0) tP (0) tQ (1) tJ (0) 学習⽅法(1/7) この「8」だけに最適化 しても、、 37
  16. 学習⽅法(2/7) 学習⽅法には、「オンライン学習」、「ミニバッチ学習」、「バッチ学習」があり、 それぞれ性質が異なる。 名称 オンライン学習 ミニバッチ学習 バッチ学習 エントロピー誤差 更新のタイミング 1⽂字毎

    1バッチ毎 全データ毎 メリット ・計算コストが⼩さい ・データ全て保管して おかなくて良い ・データの性質の変化 に機敏に対応できる ・局所最適解に陥りに くい ・局所最適解に陥りに くい ・バッチ学習に対して 計算コストが⼩さい ・外れ値の影響を受け にくい デメリット ・外れ値の影響を受け やすい ・局所最適解に陥りや すい ・新データを⼊れると、 全データで計算しなお す必要がある − ∑;<= > t; log y; − 1 { |<& } { R<= ~ R log R − 1 { |<& € { R<= ~ R log R k︓クラス数、B︓1バッチの⽂字数、N︓全⽂字数 38
  17. オンライン学習 1⽂字の交差エントロピー誤差を計算する 1⽂字ごとに重み、バイアスを更新する 正解 y" (0.1) y# (0.05) y$ (0.0)

    y% (0.0) y& (0.05) y' (0.1) y( (0.0) y) (0.1) y* (0.6) y+ (0.0) 0 1 2 3 4 5 6 7 8 9 t" (0) t# (0) t$ (0) t% (0) t& (0) t' (0) t( (0) t) (0) t* (1) t+ (0) L = − ∑;<= J t; log y; 交差エントロピー誤差 ランダムに選択 学習⽅法(3/7) 39
  18. ミニバッチ学習 1バッチ(ex.100⽂字)の交差エントロピー誤差を計算する 交差エントロピー誤差を1⽂字あたりに変換する 1バッチごとに重み、バイアスを更新する 正解 y" (0.1) y# (0.05) y$

    (0.0) y% (0.0) y& (0.05) y' (0.1) y( (0.0) y) (0.1) y* (0.6) y+ (0.0) 0 1 2 3 4 5 6 7 8 9 t" (0) t# (0) t$ (0) t% (0) t& (0) t' (0) t( (0) t) (0) t* (1) t+ (0) = − 1 4 { |<& M { R<= J R log R 交差エントロピー誤差 N:全⽂字数 1バッチ=4⽂字の場合 全ての⽂字を使い切ることを「epoch」と⾔う。1epoch = 48/4 =12バッチ ランダムに選択 学習⽅法(4/7) 40
  19. バッチ学習 全⽂字⼀括で⼊れる = − 1 { |<& € { R<=

    J R log R 正解 y" (0.1) y# (0.05) y$ (0.0) y% (0.0) y& (0.05) y' (0.1) y( (0.0) y) (0.1) y* (0.6) y+ (0.0) 0 1 2 3 4 5 6 7 8 9 t" (0) t# (0) t$ (0) t% (0) t& (0) t' (0) t( (0) t) (0) t* (1) t+ (0) 全⽂字の交差エントロピー誤差を計算する 交差エントロピー誤差を1⽂字あたりに変換する 全⽂字ごとに重み、バイアスを更新する 交差エントロピー誤差 N:全⽂字数 学習⽅法(5/7) 41
  20. 予測確率 = (0.1) & (0.05) ( (0.0) L (0.0) M

    (0.05) N (0.1) O (0.0) P (0.1) Q (0.6) J (0.0) ⼊⼒層(784) 中間層(50) 出⼒層(10) 3層ニューラルネットワークで、60,000⽂字の⼿書き⽂字認識のミニバッチ学習 を⾏う。「数値微分」と「誤差逆伝播法」の速度差を体感する 60,000⽂字 ミニバッチ学習 100⽂字/バッチ 10000バッチ学習させる 学習⽅法(7/7) 43
  21. 名 前 identity sigmoid softmax 特 徴 ⼊⼒値をそのまま返す ・0〜1を返す ・中⼼が0.5

    総和が1になる 役 割 回帰問題 2クラス分類 多クラス分類 式 グ ラ フ ℎ = ℎ ~ = z• ∑R<& | z‚ ℎ ℎ h() = & &_ƒ„… 出⼒層で使う活性化関数︓ " ℎ " softmax関数 48
  22. ℎ ~ = z• ∑ R<& | z‚ softmax関数 softmax関数︓出⼒の総和は1になる。⼊/出⼒で⼤⼩関係は変わらない。

    { ~<& | ℎ(~ ) = 1 定義式 特徴 確率変数の定義を満たしている︕ " " ℎ( ) ( ( ℎ( ) ) ) ℎ( ) " ℎ " 入力に対し て 確率差が付き やすい ⼊⼒ 他のニューロン への⼊⼒が、 他のニューロン の出⼒に影響する 49
  23. 0.06 0.82 0.12 82% 6% “human” “cat” softmax関数を使うと、⼊⼒値を確率に変換できる。 " "

    ℎ( ) ( ( ℎ( ) ) ) ℎ( ) 12% “dog” 0.3 2.9 1.0 & ( L & ( L ⼊⼒ 出⼒ softmax関数 softmax関数 50