469 Views
June 23, 24
スライド概要
AI・機械学習を勉強したい学生たちが集まる、京都大学の自主ゼミサークルです。私たちのサークルに興味のある方はX(Twitter)をご覧ください!
2024年度前期輪読会#9「ゼロから作るDeep Learning」 6章 学習に関するテクニック 6.2~6.3 奈良女子大学 藤本 馨 0
概要 目次 1.重みの初期値 2.Batch Normalization 3.まとめ 1
1.重みの初期値 2
重みの初期値 学習に適切な重みの初期値を考える 重みを小さくすることで、過学習が起こりにくくなる (入力に過剰に反応しすぎるから?) では、全て0にしてみるのはどうか? ニューロンが対称的に変化するため学習のパフォーマンスが低くなる 順伝播中はすべてのニューロンが0になる 逆伝播中は重みがすべて同じように更新される 全て定数にしても同じことがいえる 重みが対称的な構造を持つ場合、学習がうまくいかない 適度にばらけたランダムな初期値が必要 参考・引用元URL:https://medium.com/@freshtechyy/weight-initialization-for-deep-neural-network-e0302b6f5bf3 3
隠れ層のアクティベーション分布 ● 重みの初期値により隠れ層のアクティベーション(活性化関数を通 した後の出力)がどう変化するかを観察 5層のニューラルネットワーク 入力データ数:1000 入力するデータ:平均:0、標準偏差:1のガウス分布に従う乱数で生成 各隠れ層のニューロン数:100 ランダムに生成した入力データを流し、重みの初期値を変化させて 各層のアクティベーションデータ分布をヒストグラムで描画 4
隠れ層のアクティベーション分布(活性化関数:シグモイド関数) 重みを平均: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
隠れ層のアクティベーション分布(活性化関数:シグモイド関数) ● Xavierの初期値 各層のアクティベーションを同じ広がりのある分布にすることを目的と した重みのスケール 前層のノードの個数を𝒏とした場合、 𝒏の標準偏差を持つ分布を使う 𝟏 ● アクティベーションはある程度の広がり を持っている ● シグモイド関数の表現力も制限されるこ となく、効率的な学習が行える 参考・引用元URL:https://www.anarchive-beta.com/entry/2020/08/15/180000 6
隠れ層のアクティベーション分布(活性化関数:ReLU) ● 重みを平均:0、標準偏差:0.01のガウス分布に従う乱数で生成 ● 各層のアクティベーションは0に近い値 ● 逆伝播の際の重みの勾配も同様に小さくなる アクティベーション結果が0に偏る ➡ 学習が進まない ● 重みを「Xavierの初期値」に従って生成 ● ReLU関数は負の値がすべて0になるので、0以外の要素に 着目 ● 層が深くなるにつれて、アクティベーションに偏りが生ま れている アクティベーションが偏る ➡ 表現力が制限される 参考・引用元URL:https://www.anarchive-beta.com/entry/2020/08/15/180000 7
隠れ層のアクティベーション分布(活性化関数:ReLU) ● Heの初期値 各層のアクティベーションを同じ広がりのある分布にすることを目的と した重みのスケール 前層のノードの個数を𝒏とした場合、 𝒏の標準偏差を持つ分布を使う 𝟐 ● アクティベーションの分布が均一に保た れている 参考・引用元URL:https://www.anarchive-beta.com/entry/2020/08/15/180000 8
重みの初期値による学習の比較 ● 重みの初期値の与え方による学習への 影響を見てみる 異なる重みの初期値によるMNISTデータ を用いた学習経過を比較 5層のニューラルネットワーク 入力データ数:784 各隠れ層のニューロン数:100 活性化関数:ReLU Xavierの初期値を用いた時と、Heの 初期値を用いたときは学習が進んでい る Heの初期値を用いた時が一番学習の 進みが早い 適切な重みの初期値の設定は学習にお いて重要 9
2. Batch Normalization 10
Batch Normalization ● 前章では、アクティベーションの分布が適度な広がりを持つよう に重みの初期値を設定した ● Batch Normalizationでは、強制的にアクティベーションの分布 が適度な広がりを持つように調整する アフィン変換を行った後にデータ分布の正規化を行う ● Batch Normalizationには以下の利点がある 学習を早く進行させることが出来る 初期値にそれほど依存しない 過学習を抑制する Afiine Batch Norm ReLU 11
Batch Normalization ● ミニバッチ:𝐵 = 𝑥1 , 𝑥2 , … , 𝑥𝑚 ごとに、平均が0、分散が1になる ように正規化を行う 1. 2. 3. 1 𝑚 バッチデータの平均:𝜇𝐵 ← 𝑚 𝑖=1 𝑥𝑖 1 𝑚 2 バッチデータの分散:𝜎 𝐵 ← 𝑚 𝑖=1 𝑥𝑖 − 𝜇𝐵 2 バッチデータの正規化(各データから平均を引き、標準偏差で割る): 𝑥𝑖 ← 𝑥𝑖 −𝜇𝐵 𝜎 2 𝐵+𝜖 𝜖は0で除算されることを防止するためのもの 上記はガウス分布の場合 4. 分布の調整:𝑦𝑖 ← 𝛾𝑥𝑖 + 𝛽 𝑦𝐵 = 𝑦1 , 𝑦2 , … , 𝑦𝑚 が平均𝛽、標準偏差𝛾となるように学習に適した値に調整する 12
Batch Normalizationの評価 ● MNISTデータセットを使ってBatch Normalizationがある時とな い時とで学習の進みがどう変わるかを確認 初期値:標準偏差0.05のガウス分布 初期値:標準偏差1.0のガウス分布 初期値:標準偏差0.0001のガウス分布 ● 正規化を行うことで学習が進んでいることが分かる ただし、重みの初期値が小さすぎる場合と大きすぎる場合は学習の進み は遅くなる 参考・引用元URL:https://www.anarchive-beta.com/entry/2020/08/16/180000 13
3.まとめ 14
まとめ • 重みの 初期値 Batch Norm 重みの初期値は大きすぎず、小さすぎず、適度にばらけていると、アクティベーションの分 布が適度な広がりを持ち、学習がうまくいく • 活性化関数:シグモイド関数の場合、重みの初期値は「Xavierの初期値」を用いる • 活性化関数:ReLU関数の場合、重みの初期値は「Heの初期値」を用いる • アクティベーションの分布が適度な広がりを持つように調整する方法を Batch Normalizationという 学習の進行を早めることが出来る 過学習を抑制する 重みの初期値に対してそこまで神経質にならなくてもよくなる • • • 15
16