Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Deep Learning 1 (Chapter 4 , Chapter 5)
Search
banquet.kuma
February 02, 2020
Technology
0
460
Deep Learning 1 (Chapter 4 , Chapter 5)
自習のために「ゼロから作るDeepLearning 1巻」4,5章をまとめました
banquet.kuma
February 02, 2020
Tweet
Share
More Decks by banquet.kuma
See All by banquet.kuma
彼女を励ますために、Azure OpenAI Serviceを使って、kmakici LINE bot を作った
dar_kuma_san
0
120
面倒なことは、 Azure OpenAI Service× Power Automateにやらせよう!
dar_kuma_san
0
120
データで振り返るデータラーニングギルド【基礎集計の部】
dar_kuma_san
0
2.3k
My_lightning_talk_at_data_learning_guild_s_1st_anniversary_event.pdf
dar_kuma_san
0
710
Deep Learning 1 (Chapter 6)
dar_kuma_san
0
630
Deep Learning 1 (Chapter 2 , Chapter 3)
dar_kuma_san
0
680
I started learning Data Science.
dar_kuma_san
0
840
Python始めて半年で感じたこと/I’ve recently started to learn Python.
dar_kuma_san
0
280
Other Decks in Technology
See All in Technology
DevFest 2024 Incheon / Songdo - Compose UI 조합 심화
wisemuji
0
230
小学3年生夏休みの自由研究「夏休みに Copilot で遊んでみた」
taichinakamura
0
200
サーバーなしでWordPress運用、できますよ。
sogaoh
PRO
0
160
OCI技術資料 : ファイル・ストレージ 概要
ocise
3
12k
【令和最新版】ロボットシミュレータ Genesis x ROS 2で始める快適AIロボット開発
hakuturu583
2
1.3k
AWS re:Invent 2024 recap
hkoketsu
0
770
Google Cloud で始める Cloud Run 〜AWSとの比較と実例デモで解説〜
risatube
PRO
0
130
AI×医用画像の現状と可能性_2024年版/AI×medical_imaging_in_japan_2024
tdys13
0
970
非機能品質を作り込むための実践アーキテクチャ
knih
6
1.8k
サイバー攻撃を想定したセキュリティガイドライン 策定とASM及びCNAPPの活用方法
syoshie
3
1.6k
事業貢献を考えるための技術改善の目標設計と改善実績 / Targeted design of technical improvements to consider business contribution and improvement performance
oomatomo
0
210
20241218_今年はSLI/SLOの導入を頑張ってました!
zepprix
0
240
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
34
1.6k
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
Practical Orchestrator
shlominoach
186
10k
Writing Fast Ruby
sferik
628
61k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.4k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
A Tale of Four Properties
chriscoyier
157
23k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
4 Signs Your Business is Dying
shpigford
182
21k
A Modern Web Designer's Workflow
chriscoyier
693
190k
The Invisible Side of Design
smashingmag
299
50k
Transcript
「ゼロから作るDeepLearning」 4、5章まとめ Twitterアカウント : @dar_kuma_san 1
講座の流れ 【講座の⽬的】 ・ニューラルネットワークの理論を理解し、説明できるようになる ・基本的な動作をPythonで実装できるようになる ・ライブラリ活⽤時のパラメータの意味が理解できる 回 分野 章 キーワード 第1回
推論 2、3 ニューラルネットワーク、 活性化関数、⾏列計算 第2回 学習 4、5 損失関数、数値微分、 勾配法、誤差逆伝搬 第3回 学習 6 SDG、Adam、過学習、 ハイパーパラメータ 全3回を予定 2
1. 「学習」とは︖ ⇒推論と学習の違い 2. どうやって学習させるか︖ ⇒勾配法 3. 「傾き」の求め⽅ ⇒数値微分 4.
効率的な「傾き」の求め⽅ ⇒誤差逆伝播法 5. 学習⽅法について ⇒オンライン、ミニバッチ、バッチ 6. ⼿書き⽂字画像から学習 ⇒Pythonで実装 7. まとめ 第2回の⽬標 • 学習のアルゴリズム「勾配法」を理解する • 勾配の効率的な求め⽅「誤差逆伝播法」を理解する 講座の流れ 3
学習がなぜ必要か︖ 4
学習がなぜ必要か︖(1/2) • 「推論」は、未知のデータを⼊れて予測値を取り出す操作 • 「学習」は、正解が出るように重み(W)とバイアス(B)を調整する操作 推論 未知のデータXを⼊⼒して、予測値Yを出す 0 1 2
3 + = ⼊⼒ 出⼒ 重み バイアス 学習 + = ⼊⼒ 出⼒ 重み バイアス 0 1 2 3 3 2 ✕ 3 ◦ Xを⼊⼒したら、Yが出るように WとBを調整する 未知のデータ 既知のデータ 正解/不正解を教える 5
学習がなぜ必要か︖(2/2) 学習の簡単な例では、 パーセプトロンの重みとバイアスを機械に決めさせる ゲート AND OR NAND 式 閾値 真理値
(w& , w(, )=(0.5, 0.5, −0.7) (w&, w(,)=(−0.5, −0.5,0.7) (w&, w(,)=(0.5, 0.5, −0.2) 6
どうやって学習させるか︖ 7
どうやって学習させるか?(1/9) どのくらい正解から外れているかの指標︓損失関数 名称 2乗和誤差 交差エントロピー誤差 式 ⽤途 回帰問題 2クラス分類 多クラス分類
損失関数の種類 損失関数を最⼩にすることで、 「予測値」を「正解値」を近づける︕ & ( (y − t)( − t log y +(1 − t)log(1 − ) − ∑;<= > t; log y; y︓予測値、t︓正解値、k︓クラス数 8
2乗和誤差︓ 予測確率確率と正解ラベルの差の2乗和 どうやって学習させるか︖(2/9) 国語の点 (予測値) 80点 数学の点 地理の点 英語の点 国語の点
(実際) 75点 差 分 を 取 る L = & ( (y − t)( = & ( (80 − 75)( (:予測値 、 t ∶正解値) 9
= − 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
どうやって学習させるか︖(4/9) 「2クラス分類の交差エントロピー誤差」の性質 t(正解ラベル)、y(予測確率)の対数尤度にマイナスをかけたものに等しい つまり、「誤差を最⼩にする」 ≒ 「最⼤尤度になるyを求める」 = − t log
y +(1 − t)log(1 − ) H (1 − )(&IH) 対数を取って、マイナスをかける t : 0(失敗) or 1(成功) y︓成功確率 11
出典︓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
L = − log yQ L yQ 「多クラス分類の交差エントロピー誤差」の性質 “正解”の予測確率を低く⾒積もると急激に増える “正解”の予測確率を1に⾒積もると0になる
どうやって学習させるか︖(6/9) 正解の予測確率 交差エントロピー誤差 13
どうやって学習させるか︖(7/9) 損失関数は重み(W)とバイアス(B)の関数である。 損失関数の傾きと逆⽅向に動かして”⾕底”を⽬指せば良い L 重みW 、 バイアスB 損失関数 初期位置 ⾕底
傾き>0 傾き<0 動かす⽅向 重みの更新︓W ← W − ρ L W バイアスの更新︓B ← B − ρ L B 傾き は「学習率」と⾔って ハイパーパラメーターの⼀種である 傾きを利⽤して、関数が最⼩値を 取るように変数を最適化する ⼿法を「勾配法」という 更新後位置 ゴール 14
どうやって学習させるか︖(8/9) 1 . 重み(W)、バイアス(B)を”適当に”に決める 2. 訓練データを⼊れて、推論させる(誤差を求める) 3. 誤差から傾きを求める 4. 重み(W)、バイアス(B)を更新する
2〜4を繰り返す L W W ← W − ρ L W 学習の流れ ループ 15
この操作を全てのWとBについて、 繰り返し実施すれば、 いつか予測値と正解が⼀致するはず どうやって「傾き」を求めるか︖ どうやって学習させるか︖(9/9) 16
どうやって「傾き」を求めるか︖ 17
どうやって「傾き」を求めるか︖(1/5) 機械は解析的に傾きを求められないので、「数値微分」によって近似的に求める 重みW L(W) 損失関数 2h 現在位置 [\(]) [] ≅
\ ]_` I\(]I`) (` 傾き 前後に微⼩量 ℎ 移動させて変化を求める これが傾きの近似値 L W + h −L(W − h) 重みの更新︓W ← W − ρ L W 18
勾配法で、損失関数が減少する様⼦を確認する 重みの更新︓W ← W − ρ L(W, B) W バイアスの更新︓B
← B − ρ L(W, B) B W B W B 損失関数を以下と仮定する L W, B = W( + B( 傾きの⽅向 ゴール ゴール どうやって「傾き」を求めるか︖(2/5) 19
どうやって「傾き」を求めるか︖(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
どうやって「傾き」を求めるか︖(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
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
効率的に「傾き」を求める 23
効率的に「傾き」を求める(1/12) t& t( L = − ∑;<& ( t; log
y; 交差エントロピー誤差 ⼊⼒層 中間層1層⽬ 中間層2層⽬ 出⼒層 「傾き」をもっと簡単に計算できないか、3層のニューラルネットワークで考える 中間層1層⽬の第1ニューロンから中間層2層⽬の第1ニューロンにかかる 重みを ”効率的に”求めることを考える。 () 24
微分の連鎖律 誤差逆伝播の説明で多⽤します 効率的に「傾き」を求める(2/12) = u =g(x) = = , u
=g(q,r) v =h(q,r) = + = + 25
微分の連鎖律から以下が成り⽴つ の関係があるから、 1 2 3 それぞれの項を求めて掛ければ良い 効率的に「傾き」を求める(3/12) = & (
, & ( = & ( (& ( ) , & ( = & ( (&& ( ) 26
3の部分を求める の関係から、 効率的に「傾き」を求める(4/12) 27
活性化関数で変換しているから、 = 効率的に「傾き」を求める(5/12) 2の部分を求める 28
の関係があるから、 と変形できる 効率的に「傾き」を求める(6/12) 1の部分を求める 29
さらに変形していく、 の関係から、 効率的に「傾き」を求める(7/12) () () 30
前半部分を求める softmax関数を右の式に代⼊する 代⼊ 効率的に「傾き」を求める(8/12) - 31
さらに変形していく、 代⼊ この変形は、 以下の関係を使っている 効率的に「傾き」を求める(9/12) 32
なんと、 予測確率と正解ラベルの差分 という単純な形で表される︕ 代⼊ 1 2 3 これで、1、2、3 が揃いました 効率的に「傾き」を求める(10/12)
33
予測確率と正解ラベルの差分を含 む、簡単に求められる項の積 (⻘字のルートに関係する項) だけで表すことができた︕ このようにして、重みWとバイア スBの傾きを求める⼿法を 「誤差逆伝播法」という 活性化関数の微分が⼊っていること に注⽬! 効率的に「傾き」を求める(11/12)
() () 34
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
学習⽅法 36
出典︓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
学習⽅法(2/7) 学習⽅法には、「オンライン学習」、「ミニバッチ学習」、「バッチ学習」があり、 それぞれ性質が異なる。 名称 オンライン学習 ミニバッチ学習 バッチ学習 エントロピー誤差 更新のタイミング 1⽂字毎
1バッチ毎 全データ毎 メリット ・計算コストが⼩さい ・データ全て保管して おかなくて良い ・データの性質の変化 に機敏に対応できる ・局所最適解に陥りに くい ・局所最適解に陥りに くい ・バッチ学習に対して 計算コストが⼩さい ・外れ値の影響を受け にくい デメリット ・外れ値の影響を受け やすい ・局所最適解に陥りや すい ・新データを⼊れると、 全データで計算しなお す必要がある − ∑;<= > t; log y; − 1 { |<& } { R<= ~ R log R − 1 { |<& € { R<= ~ R log R k︓クラス数、B︓1バッチの⽂字数、N︓全⽂字数 38
オンライン学習 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
ミニバッチ学習 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
バッチ学習 全⽂字⼀括で⼊れる = − 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
さて、問題です 60,000個ある訓練データを、 1バッチ=100個として、 10,000バッチ学習させると、 何epochに相当するでしょうか︖ 学習⽅法(6/7) 【Answer】 全データは60,000/100 = 600バッチ
よって、全データは10,000/600 = 16.7 epochs になります 42
予測確率 = (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
第2回まとめ 44
第2回まとめ(1/2) • ディープラーニングの学習⽅法 傾きと逆⽅向にパラメータを更新して「⾕底」を⽬指す (勾配法) ・傾きの効率的な求め⽅ 推論で求めている値を使って、⾼速に傾きを求める (誤差逆伝播法) ・パラメータ更新のタイミング 学習法によってパラメーター更新のタイミングが異なる
(オンライン学習、ミニバッチ学習、バッチ学習) W ← W − ρ L W 45
第2回まとめ(2/2) 第3回は、以下を説明します 「第6章 学習に関するテクニック」 ・最適な重みパラメータを探索する⼿法(勾配⽅の進化形) ・パラメーターの初期値をどうするか︖ ・ハイパーパラメータの設定⽅法 ・過学習の対応策 局所最適解に陥ることがある 46
Appendix 47
名 前 identity sigmoid softmax 特 徴 ⼊⼒値をそのまま返す ・0〜1を返す ・中⼼が0.5
総和が1になる 役 割 回帰問題 2クラス分類 多クラス分類 式 グ ラ フ ℎ = ℎ ~ = z• ∑R<& | z‚ ℎ ℎ h() = & &_ƒ„… 出⼒層で使う活性化関数︓ " ℎ " softmax関数 48
ℎ ~ = z• ∑ R<& | z‚ softmax関数 softmax関数︓出⼒の総和は1になる。⼊/出⼒で⼤⼩関係は変わらない。
{ ~<& | ℎ(~ ) = 1 定義式 特徴 確率変数の定義を満たしている︕ " " ℎ( ) ( ( ℎ( ) ) ) ℎ( ) " ℎ " 入力に対し て 確率差が付き やすい ⼊⼒ 他のニューロン への⼊⼒が、 他のニューロン の出⼒に影響する 49
0.06 0.82 0.12 82% 6% “human” “cat” softmax関数を使うと、⼊⼒値を確率に変換できる。 " "
ℎ( ) ( ( ℎ( ) ) ) ℎ( ) 12% “dog” 0.3 2.9 1.0 & ( L & ( L ⼊⼒ 出⼒ softmax関数 softmax関数 50