【ゼロから作るDeep Learning】6.2-6.3

255 Views

June 23, 24

スライド概要

profile-image

AI・機械学習を勉強したい学生たちが集まる、京都大学の自主ゼミサークルです。私たちのサークルに興味のある方はX(Twitter)をご覧ください!

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

2024年度前期輪読会#9「ゼロから作るDeep Learning」 6章 学習に関するテクニック 6.2~6.3 奈良女子大学 藤本 馨 0

2.

概要 目次 1.重みの初期値 2.Batch Normalization 3.まとめ 1

3.

1.重みの初期値 2

4.

重みの初期値  学習に適切な重みの初期値を考える  重みを小さくすることで、過学習が起こりにくくなる   (入力に過剰に反応しすぎるから?) では、全て0にしてみるのはどうか?  ニューロンが対称的に変化するため学習のパフォーマンスが低くなる    順伝播中はすべてのニューロンが0になる 逆伝播中は重みがすべて同じように更新される 全て定数にしても同じことがいえる  重みが対称的な構造を持つ場合、学習がうまくいかない  適度にばらけたランダムな初期値が必要 参考・引用元URL:https://medium.com/@freshtechyy/weight-initialization-for-deep-neural-network-e0302b6f5bf3 3

5.

隠れ層のアクティベーション分布 ● 重みの初期値により隠れ層のアクティベーション(活性化関数を通 した後の出力)がどう変化するかを観察  5層のニューラルネットワーク  入力データ数:1000  入力するデータ:平均:0、標準偏差:1のガウス分布に従う乱数で生成  各隠れ層のニューロン数:100  ランダムに生成した入力データを流し、重みの初期値を変化させて 各層のアクティベーションデータ分布をヒストグラムで描画 4

6.

隠れ層のアクティベーション分布(活性化関数:シグモイド関数)  重みを平均:0、標準偏差:1のガウス分布に従う乱数で生成  0と1に偏った分布  シグモイド関数は出力が0または1に近づくにつれて 微分の値が0に近づく  したがって、0と1に偏ったデータ分布では逆伝播時の勾配が どんどん小さくなってしまう アクティベーション結果が0と1に偏る ➡ 勾配消失  重みを平均:0、標準偏差:0.01のガウス分布に従う乱数で生成  0.5付近に集中  アクティベーションに偏りがあると、複数のニューロンがほ ぼ同じ値を出力するため表現力が落ちる アクティベーションが偏る ➡ 表現力が制限される 参考・引用元URL:https://www.anarchive-beta.com/entry/2020/08/15/180000 5

7.

隠れ層のアクティベーション分布(活性化関数:シグモイド関数) ● Xavierの初期値  各層のアクティベーションを同じ広がりのある分布にすることを目的と した重みのスケール  前層のノードの個数を𝒏とした場合、 𝒏の標準偏差を持つ分布を使う 𝟏 ● アクティベーションはある程度の広がり を持っている ● シグモイド関数の表現力も制限されるこ となく、効率的な学習が行える 参考・引用元URL:https://www.anarchive-beta.com/entry/2020/08/15/180000 6

8.

隠れ層のアクティベーション分布(活性化関数:ReLU) ● 重みを平均:0、標準偏差:0.01のガウス分布に従う乱数で生成 ● 各層のアクティベーションは0に近い値 ● 逆伝播の際の重みの勾配も同様に小さくなる アクティベーション結果が0に偏る ➡ 学習が進まない ● 重みを「Xavierの初期値」に従って生成 ● ReLU関数は負の値がすべて0になるので、0以外の要素に 着目 ● 層が深くなるにつれて、アクティベーションに偏りが生ま れている アクティベーションが偏る ➡ 表現力が制限される 参考・引用元URL:https://www.anarchive-beta.com/entry/2020/08/15/180000 7

9.

隠れ層のアクティベーション分布(活性化関数:ReLU) ● Heの初期値  各層のアクティベーションを同じ広がりのある分布にすることを目的と した重みのスケール  前層のノードの個数を𝒏とした場合、 𝒏の標準偏差を持つ分布を使う 𝟐 ● アクティベーションの分布が均一に保た れている 参考・引用元URL:https://www.anarchive-beta.com/entry/2020/08/15/180000 8

10.

重みの初期値による学習の比較 ● 重みの初期値の与え方による学習への 影響を見てみる  異なる重みの初期値によるMNISTデータ を用いた学習経過を比較  5層のニューラルネットワーク  入力データ数:784  各隠れ層のニューロン数:100  活性化関数:ReLU Xavierの初期値を用いた時と、Heの 初期値を用いたときは学習が進んでい る  Heの初期値を用いた時が一番学習の 進みが早い  適切な重みの初期値の設定は学習にお いて重要  9

11.

2. Batch Normalization 10

12.

Batch Normalization ● 前章では、アクティベーションの分布が適度な広がりを持つよう に重みの初期値を設定した ● Batch Normalizationでは、強制的にアクティベーションの分布 が適度な広がりを持つように調整する  アフィン変換を行った後にデータ分布の正規化を行う ● Batch Normalizationには以下の利点がある 学習を早く進行させることが出来る  初期値にそれほど依存しない  過学習を抑制する  Afiine Batch Norm ReLU 11

13.

Batch Normalization ● ミニバッチ:𝐵 = 𝑥1 , 𝑥2 , … , 𝑥𝑚 ごとに、平均が0、分散が1になる ように正規化を行う 1. 2. 3. 1 𝑚 バッチデータの平均:𝜇𝐵 ← 𝑚 𝑖=1 𝑥𝑖 1 𝑚 2 バッチデータの分散:𝜎 𝐵 ← 𝑚 𝑖=1 𝑥𝑖 − 𝜇𝐵 2 バッチデータの正規化(各データから平均を引き、標準偏差で割る): 𝑥𝑖 ← 𝑥𝑖 −𝜇𝐵 𝜎 2 𝐵+𝜖  𝜖は0で除算されることを防止するためのもの  上記はガウス分布の場合 4. 分布の調整:𝑦𝑖 ← 𝛾𝑥𝑖 + 𝛽  𝑦𝐵 = 𝑦1 , 𝑦2 , … , 𝑦𝑚 が平均𝛽、標準偏差𝛾となるように学習に適した値に調整する 12

14.

Batch Normalizationの評価 ● MNISTデータセットを使ってBatch Normalizationがある時とな い時とで学習の進みがどう変わるかを確認 初期値:標準偏差0.05のガウス分布 初期値:標準偏差1.0のガウス分布 初期値:標準偏差0.0001のガウス分布 ● 正規化を行うことで学習が進んでいることが分かる  ただし、重みの初期値が小さすぎる場合と大きすぎる場合は学習の進み は遅くなる 参考・引用元URL:https://www.anarchive-beta.com/entry/2020/08/16/180000 13

15.

3.まとめ 14

16.

まとめ • 重みの 初期値 Batch Norm 重みの初期値は大きすぎず、小さすぎず、適度にばらけていると、アクティベーションの分 布が適度な広がりを持ち、学習がうまくいく • 活性化関数:シグモイド関数の場合、重みの初期値は「Xavierの初期値」を用いる • 活性化関数:ReLU関数の場合、重みの初期値は「Heの初期値」を用いる • アクティベーションの分布が適度な広がりを持つように調整する方法を Batch Normalizationという 学習の進行を早めることが出来る 過学習を抑制する 重みの初期値に対してそこまで神経質にならなくてもよくなる • • • 15