深層学習のテクニック
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfras...
-[[戻る>深層学習(deep learning)]]
--[[パーセプトロン]]
--[[ニューラルネットワーク]]
---[[ニューラルネットワーク(推論)]]
---[[ニューラルネットワーク(学習)]]~
・[[深層学習の誤差逆伝播法]]~
・深層学習のテクニック
*目次 [#xf223dce]
#contents
*概要 [#tf550353]
色々なオプションがある。
*XXに関するテクニック [#z81a8b64]
*学習に関するテクニック [#h518e281]
**学習に関する問題点 [#i78c0d96]
[[ニューラルネットワークの問題点には学習に関する問題点が...
**[[勾配(降下法)>#eaed3a38]]と[[誤差逆伝播法>#q2fc1f35]...
***[[勾配(降下法)>ニューラルネットワーク(学習)#e08372...
***[[誤差逆伝播法>深層学習の誤差逆伝播法]] [#q2fc1f35]
**[[勾配降下法>#eaed3a38]]アルゴリズムの選択 [#ma318ba7]
***SGD [#o2fe1f26]
-呼称
--SGD:Stochastic Gradient Descent
--確率的勾配降下法
-概要
--勾配が最も急な向きに勾配を下る手法
--勾配が急であればあるほど大きくパラメタを変化させる。
--変化を学習率というハイパーパラメタによって調整する。
-欠点
--最短距離でない、無駄に谷間を往復する。~
学習率が大きい場合は無駄な往復が目立つ。
--[[学習率の調整に手間がかかる。>ニューラルネットワーク#z...
調整が難しいため自動調整のアルゴリズムが必要。
-式
--オンライン
θ-=η∇θL(f(xi,θ), yi)
--バッチ
m
θ-=η/m∇θ∑L(f(xi,θ), yi)
i
--解説
---説明集合
{x1, ... , xm}
---目的集合
{y1, ... , ym}
---予測関数
^yi = f(xi,θ) i∈{1, ... , m}
---経験損失
m
1/m∑L(^yi, yi)
i
---勾配降下法
θt = θt-1 - η(∂L/∂θ)
---確率的勾配降下法
m
θt = θt-1 - η/m∇θ∑L(f(xi,θ), yi)
i
***MomentumSGD [#afd9f568]
-概要
--モーメンタムとは物理で言う慣性の考え方を適用したものの...
--[[SGD>#o2fe1f26]]に慣性(加速・減速)の概念を加えた。
--慣性として指数移動平均を使用する。
--局所的な谷底から抜け出すのに役立つ。
--加速しているため、極小値付近で止まり難い。
-式
v t = βv t−1 + (1−β)gt
W t−1 = Wt − η vt
***NesterovAG [#ja838935]
(Nesterov Accelerated Gradient)~
-極小値付近でブレーキをかける機能を加えたアルゴリズム
-現在と過去の勾配から将来の勾配を予測することでコレを実現。
***AdaGrad [#u12d8d2f]
(Adaptive Gradient)
-動いた量が増えたら更新を緩やかにする。
-[[NesterovAG>#ja838935]]のブレーキ機能を学習率の減衰によ...
-パラメタ更新量のスケーリング~
tは更新回数を表す下付き文字
--g(t) = 今回の勾配
--過去の更新量の二乗和
ht = (Σg(t)^2)
--現在の勾配を反比例するようスケーリング(=割る)~
この際、0除算にならないように分母に極小の値εを加算
θt = θt-1 - η(g(t)/(√ht+ε))
-極小値に差し掛かったところで更新が緩やかになることを狙っ...
--損失関数の偏微分が大きいパラメタでは学習率が比較的急に...
--損失関数の偏微分が小さいパラメタでは学習率が比較的緩や...
※ ε = 0.001
***RMSprop [#kdd7cbe0]
(Root Mean Square Propagation)
-[[AdaGrad>#u12d8d2f]]の問題点を改良した版
--更新回数が増えるほど更新量が減る。
--損失関数が大きいと次の更新量が急減する。
--急減するあまり更新が止まり易い。
-パラメタ更新量のスケーリング~
tは更新回数を表す下付き文字
--g(t) = 今回の勾配
--学習率の減衰の抑制を実現~
過去の勾配との指数移動平均の累積を取る。
---βが過去の勾配成分の累積をどれだけ重視するか指定するハ...
---更新するたびに過去の勾配はβ乗され指数関数的に減弱して...
ht = β(ht-1) + (1-β) * g(t)^2
---実装に際して、式を変形
ht = ht-1 + (1-β) (g(t)^2 - ht-1)
--現在の勾配を反比例するようスケーリング(=割る)~
この際、0除算にならないように分母に極小の値εを加算
θt = θt-1 - η(g(t)/(√ht+ε))
※ ε = 0.001、β = 0.9
***AdaDelta [#dc5e4977]
-[[AdaGrad>#u12d8d2f]]の改良版の[[RMSprop>#kdd7cbe0]]に、...
-パラメタ更新量のスケーリング~
tは更新回数を表す下付き文字
--g(t) = 今回の勾配
--学習率の減衰の抑制を実現~
---過去の勾配との指数移動平均の累積を取る。
vt = β(vt-1) + (1-β) * g(t) ^2
---更新量のスケーリング(=割る)~
この際、0除算にならないように分母に極小の値εを加算
ht = -(√(ut-1 + ε)/√(vt + ε)) * g(t)
---過去の更新量との指数移動平均の累積を取る。
ut = β(ut-1) + (1-β) * ht^2
---パラメタ更新
θt = θt-1 - η ht
※ β = 0.9
***Adam [#z75dbbb3]
(ADAptive Moment estimation)~
-[[MomentumSGD>#afd9f568]]と[[AdaDelta>#u12d8d2f]]的な自...
-パラメタ更新量のスケーリング~
tは更新回数を表す下付き文字
--g(t) = 今回の勾配
--学習率の減衰の抑制を実現~
---Momentum的な累積
mt = β1(mt-1) + (1-β1) * g(t)
^mt = mt / (1-β1^t)
---RMSprop的な指数移動平均の累積
vt = β2(vt-1) + (1-β2) * g(t)^2
^vt = vt / (1-β2^t)
--現在の勾配を反比例するようスケーリング(=割る)~
この際、0除算にならないように分母に極小の値εを加算
パラメタ更新量 = - (?/√^vt+ε)) * ^mt
※ ε = 0.001、β1 = 0.9、β2 = 0.999
***実装例 [#t25731a2]
-[[o'reillyのカサゴ深層学習の本>https://github.com/OpenTo...
-[[勾配降下法アルゴリズムの選択>データマイニング(DM)- P...
**重みの初期値 [#o35805ae]
***重みの初期値戦略 [#q6054249]
学習結果はこの初期値に大きく影響される。収束する・しない...
-すべての重みを同じ値で初期化すると学習が進行しない。
--「対称性の破れ」問題と言い、モデルの表現力が低下する。
--各層のニューロンが同じような役割を持ち、情報の流れが制...
--ランダムな初期値を設定しバイアスを使用することで、各ノ...
-初期値の大小
--初期の重みが大きいほど
---「対称性の破れ」は大きくなる(モデルの表現力が向上)。
---逆伝播の際に信号がうまく伝達するが、大き過ぎると値が爆...
--初期の重みが小さいほど
---「対称性の破れ」は小さくなる(モデルの表現力が低下)。
---逆伝播の際に信号が消失する恐れがあるが、正則化の観点か...
-一般的な重みの決め方
--重み
---ガウス分布や一様分布に従うランダムな初期化
---慣例で標準偏差0.01のガウス分布((正規分布)を使用。
--バイアス~
経験則に選択された定数
-経験則に基づく重みの決め方~
入出力層の数で標準偏差を決めてサンプリング~
m個の入力に対してn個の出力があるような全結合層の重みを初...
--[[Xavierの初期値、HEの初期値>深層学習のテクニック#cda1d...
--一様分布 (−√(1/m),√(1/m))からサンプリング
--正規化を施した一様分布 (−√(6/(m+n)),1√(6/(m+n)))からサ...
-その他の重みの決め方
--スパース初期化
--スケーリング係数gを用いてランダムに直交行列を初期化
-重みの初期化の抱える課題
--最適な重みの初期化基準を採択してもモデル性能の最適に繋...
---そもそも採択している基準が間違っている可能性
---初期化の時に導入された性質が学習の過程で消えてしまう可...
---最適化は速くなっても汎化誤差が意図せずに大きくなってし...
--そのため、初期化はモデルの性質をよく見極めた上で戦略的...
***活性化関数の出力分布 [#k8090516]
勾配消失や表現力の制限問題を回避するよう~
活性化関数の出力分布がバラけるように重みを初期値する。
-[[Sigmoid関数>ニューラルネットワーク(推論)#qc025e6f]]...
--標準偏差1の正規分布では値が0か1に集中する(勾配消失、表...
--標準偏差0.01の正規分布では値が0.5に集中する(表現力の制...
--Xavier(Glorot)の初期値は線形の活性化関数を対象にして...
標準偏差を1/√(前層ノード数)の正規分布にすると、深い層で歪...
--なお、Xavierの論文では後層ノード数も考慮した設定値が提...
-[[ReLu関数>ニューラルネットワーク#x80775f2]]の例
--標準偏差0.01の正規分布では値が0に寄る(微分時、勾配消失...
--Xavier(Glorot)の初期値で非線形なReLuは深い層でより値...
--HE(Kaiming)の初期値で、標準偏差を√(2/前層ノード数)の...
***[[Xavier、He>#k8090516]] [#cda1d3c9]
活性化関数の出力が広がりを持った分布になるように重みの初...
**バッチ正規化 [#t3c6ab88]
(Batch Normalization)
***概要 [#t3af6bd9]
-[[活性化関数の出力>#k8090516]]ではなく、アフィン変換層と...
--ミニバッチの平均0、標準偏差が1となるよう正規化の処理を...
--更に、固有のスケール(初期値1)とシフト(初期値0)を...
>出力を広がりを持った分布にする方法。
-内部共変量シフトを防ぎ、上手く学習できるようにする。
--内部共変量シフトとは学習時のパラメタ変化がデータ分布へ...
--上位層のパラメタ更新で下位層のデータ分布が変化し学習結...
--これを防ぐことで、初期値の影響を小さくし、過学習が抑制...
-[[勾配消失・爆発を解消する方法>ニューラルネットワーク#id...
***計算 [#bfd04b12]
(Bはミニバッチの集合的な意味)
--平均値を計算
m
μB = 1/m Σ xi
i=1
--(平均値から)[[分散>統計解析#m656dd23]]を計算
m
σ^2B = 1/m Σ(xi-μB)^2
i=1
--正規化(εはゼロ除算防止の微小値)
xi' = (xi-μB) / √(σ^2B + ε)
--スケーリング(γ)とシフト(β)
yi = γxi' + β
***実装時 [#q0aa194c]
BatchNormalization
-コンストラクタ
--引数なしでもOK
--平均と分散の移動平均は別になるので使いまわしNG
-実行(call)
--training:
---false:推論時は学習した移動統計
---true:学習時はミニバッチの平均・分散
--trainable:
---false:[[転移学習>#ebe9edcc]]
---true:[[ファイン・チューニング>#ea94272b]]
***学習時と推論時 [#w7f17af7]
-学習時
--ミニバッチの平均と分散で正規化する。
--平均と分散の移動平均を更新する。
-推論
--平均と分散の移動平均で正規化する。
--平均と分散の移動平均を更新しない。
**ハイパーパラメタとチューニング [#g80ab15e]
***選択 [#y03e8317]
-[[学習率>ニューラルネットワーク#za4d873f]]
-[[層のサイズ、層の深さ、バッチサイズ>ニューラルネットワ...
***最適化 [#m865261a]
[[グリッドサーチ、ランダムサーチ、ベイズ最適化>機械学習(...
**過学習を抑止する方法 [#f5d40509]
***データ拡張 [#l8a79d61]
(data augmentation)
<画像の場合>
-処理
--CNNの画像データにノイズ(拡大・縮小、反転、回転、並進)...
--実際に得られそうな拡張のみ行う(例えば上下固定なら回転...
--画像のサイズや形は変更しない(と言うか、深層学習の入力...
-効果
--これによりノイズに「頑健」(=統計用語で「決定的でない要...
--ロバスト性を高める。と言う(外乱の影響に頑健と言うよう...
-[[実装>データマイニング(DM)- Python - CNN#o122ce57]]
--左右反転(flip)
--回転(rotate)
--並進(move)
--拡大(crop)
--ガンマ変換(gamma)
--ガウシアンノイズ(gaussian)
--色の三属性の調整
---コントラスト(色相:hue)
---ブライトネス(輝度:brightness)
---カラフルネス(彩度:saturation)
-使用時の注意
--確率的な適用~
処理量を抑えるためミニバッチ毎に確率的にかける。~
--leakageの防止
---拡張元画像が同じ拡張画像をtrainデータとtestデータに混...
---データ分割後にデータ拡張を行う順番で処理を行えばleakag...
-特殊な処理
--MixUp~
画像を合成
--Cutout / Random Erasing~
入力画像をランダムなマスクで欠落させ~
より強い正則化の効果を作り出す(≒ [[ドロップアウト>#hf3c7...
--Cutmix~
CutoutをMixUpで改良した改良版
<言語の場合>
-MixUp
-EDA~
テキストデータの水増しやバリエーションを生成する。
--同義語置換(Synonym Replacement)
--ランダム挿入(Random Insertion)
--ランダム削除(Random Deletion)
--ランダム置換(Random Swap)
<音声の場合>
-ノイズ付与(Gaussian Noise)
-MixUp
-ボリューム変更
-ピッチ(音程)シフト
-SpecAugment
--時間方向のマスキング(Time Masking)
--周波数方向のマスキング(Frequency Masking)
--時間方向のシフト
***[[出力の分布調整>ニューラルネットワーク#hdea3b9f]] [#r...
-過学習の発生を軽減する一因になる。
-[[データ正規化>データマイニング(DM)- CRISP-DM#v9d19242...
-CNNに於いては、畳み込み層とプーリング層の間にバッチ正規...
***[[機械学習と同様のアンサンブル手法>機械学習(machine l...
バギング、ブースティング、ブートストラップ、スタッキング
***[[機械学習と同様の正則化>統計解析#i38c7fea]] [#q7425431]
機械学習と同様、明示的な正則化の重みの減衰(Weight Decay)
***陰的正則化機能 [#q1834025]
-[[以下>#yc09c881]]のような、明示的な正則化ではない暗黙の...
-また、NNは、その構造自体が何かしらの陰的正則化機能を含ん...
(非常に高度な数学理論を駆使してようやく一部が解き明かさ...
***[[ハイパーパラメタとチューニング>#g80ab15e]] [#yc09c881]
***早期終了(early stopping) [#q2b741ae]
-[[訓練誤差>深層学習の誤差逆伝播法#q7efa2ae]]が頭打ちにな...
-[[汎化誤差>深層学習の誤差逆伝播法#q7efa2ae]]が上昇に転じ...
***ドロップアウト(Dropout) [#hf3c7a28]
-[[アンサンブル学習のバギング>#v44f2bbc]]に相当する効果(...
--学習時にのみ適用され、推論時には適用されない。
--特定の割合のノードをランダムに無効化する(出力をランダ...
-以下は、実装レベルの話
--推論時の順伝播には消去した割合(30%なら 1 - 0.3 = 0.7)...
この意味は、[[アンサンブル学習のバギング>機械学習(machin...
--有効化した場合、順伝播は素通しで、逆伝播の勾配は1。
--無効化した場合、順伝播はソコで止まり、逆伝播の勾配は0。
***ドロップコネクト(Dropconnect) [#ta2e931d]
-ドロップアウト(Dropout) ではノード(出力値)を消す。
-ドロップコネクト(Dropconnect)ではエッジ(重み)を消す。
-効果の違い
--学習時にのみ適用され、推論時には適用されないが、無効化...
--この結果、パラメタ数が削減され、モデルの複雑さが減少し...
**転移学習 [#ebe9edcc]
-学習済みのモデルを異なった分野で利用する手法
-学習済みモデルには手を加えず(、重みを固定し)、~
追加の出力層だけを新たに学習させモデルを作成する。
***概要 [#k07a1a43]
-人が過去の経験を活かして新しい物事を習得する流れと似てい...
-大量の犬の画像データと少量の猫の画像データがあり、~
犬の種類判別モデルと猫の種類判別モデルを作成する場合、~
犬の種類判別の課題から得られた知識を猫の種類判別モデルに...
***詳細 [#i669f1c6]
-メリット・デメリット
--メリット
---限られたデータから高精度なモデルを作成できる
---少ないデータでの学習のため学習時間を短縮できる
--デメリット
---精度の改善ではなく悪化をもたらす場合がある(負の転移(...
---負の転移は、転移元と転移先の関連性が低い、転移の方法が...
-構築方法
--学習済みモデルの最終出力層(全結合)だけを付け替えてデ...
最終出力層(全結合)のパラメタだけ変更して新しいモデルを...
---入力層に近い部分は、タスクに固有の特徴ではなく汎用的な...
---奥の層に行くに連れて特徴が複雑になると、拾う特徴は段々...
--少ないデータで、最終出力層(全結合)のパラメタだけ変更...
**ファイン・チューニング [#ea94272b]
学習済みモデルに手を加えて(、重みを初期値し、)、~
追加の出力層以外も新たに再度学習させモデルを作成する。
***概要 [#s38ca193]
[[転移学習>#ebe9edcc]]との違いは、既存部分を再学習するか...
***詳細 [#k36d2d62]
[[転移学習>#ebe9edcc]]との違いに関してのみ言及。
-メリット・デメリット
--メリット
--デメリット
***構築方法 [#iad66a2b]
-学習済みモデルの最終出力層(全結合)を付け替え、~
出力層(全結合)だけでなく入力層に近い部分のパラメタも変...
--学習率を通常の 10^-2 倍程度に小さくする。
--出力層(全結合)の何層かのみ初期値を乱数にして学習させ...
奥にある層は複雑で固有な特徴を学習しているので学習済みの...
--一部の層のパラメタを全く学習させないという工夫もある。~
手持ちのデータが少ないときほど学習させるパラメタを絞る。
**転移学習とファイン・チューニングの違い [#q86c1484]
出力層の再学習は共通しているが、
***転移学習 [#v4fb5182]
学習済みモデルには手を加えず、学習を行い新たにモデルを作成
-出力層だけを学習させる。
***ファイン・チューニング [#ef93997b]
学習済みモデルにも手を加えて、学習を行い新たにモデルを作成
-出力層以外も学習させる。
-出力層以外の学習率を低く設定する。
**[[転移学習とファイン・チューニングの実装>データマイニン...
*参考 [#b62d3054]
-転移学習(TL:Transfer Learning)とFine Tuningの違いって...
https://ts0818.hatenablog.com/entry/2021/02/15/205258
終了行:
「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfras...
-[[戻る>深層学習(deep learning)]]
--[[パーセプトロン]]
--[[ニューラルネットワーク]]
---[[ニューラルネットワーク(推論)]]
---[[ニューラルネットワーク(学習)]]~
・[[深層学習の誤差逆伝播法]]~
・深層学習のテクニック
*目次 [#xf223dce]
#contents
*概要 [#tf550353]
色々なオプションがある。
*XXに関するテクニック [#z81a8b64]
*学習に関するテクニック [#h518e281]
**学習に関する問題点 [#i78c0d96]
[[ニューラルネットワークの問題点には学習に関する問題点が...
**[[勾配(降下法)>#eaed3a38]]と[[誤差逆伝播法>#q2fc1f35]...
***[[勾配(降下法)>ニューラルネットワーク(学習)#e08372...
***[[誤差逆伝播法>深層学習の誤差逆伝播法]] [#q2fc1f35]
**[[勾配降下法>#eaed3a38]]アルゴリズムの選択 [#ma318ba7]
***SGD [#o2fe1f26]
-呼称
--SGD:Stochastic Gradient Descent
--確率的勾配降下法
-概要
--勾配が最も急な向きに勾配を下る手法
--勾配が急であればあるほど大きくパラメタを変化させる。
--変化を学習率というハイパーパラメタによって調整する。
-欠点
--最短距離でない、無駄に谷間を往復する。~
学習率が大きい場合は無駄な往復が目立つ。
--[[学習率の調整に手間がかかる。>ニューラルネットワーク#z...
調整が難しいため自動調整のアルゴリズムが必要。
-式
--オンライン
θ-=η∇θL(f(xi,θ), yi)
--バッチ
m
θ-=η/m∇θ∑L(f(xi,θ), yi)
i
--解説
---説明集合
{x1, ... , xm}
---目的集合
{y1, ... , ym}
---予測関数
^yi = f(xi,θ) i∈{1, ... , m}
---経験損失
m
1/m∑L(^yi, yi)
i
---勾配降下法
θt = θt-1 - η(∂L/∂θ)
---確率的勾配降下法
m
θt = θt-1 - η/m∇θ∑L(f(xi,θ), yi)
i
***MomentumSGD [#afd9f568]
-概要
--モーメンタムとは物理で言う慣性の考え方を適用したものの...
--[[SGD>#o2fe1f26]]に慣性(加速・減速)の概念を加えた。
--慣性として指数移動平均を使用する。
--局所的な谷底から抜け出すのに役立つ。
--加速しているため、極小値付近で止まり難い。
-式
v t = βv t−1 + (1−β)gt
W t−1 = Wt − η vt
***NesterovAG [#ja838935]
(Nesterov Accelerated Gradient)~
-極小値付近でブレーキをかける機能を加えたアルゴリズム
-現在と過去の勾配から将来の勾配を予測することでコレを実現。
***AdaGrad [#u12d8d2f]
(Adaptive Gradient)
-動いた量が増えたら更新を緩やかにする。
-[[NesterovAG>#ja838935]]のブレーキ機能を学習率の減衰によ...
-パラメタ更新量のスケーリング~
tは更新回数を表す下付き文字
--g(t) = 今回の勾配
--過去の更新量の二乗和
ht = (Σg(t)^2)
--現在の勾配を反比例するようスケーリング(=割る)~
この際、0除算にならないように分母に極小の値εを加算
θt = θt-1 - η(g(t)/(√ht+ε))
-極小値に差し掛かったところで更新が緩やかになることを狙っ...
--損失関数の偏微分が大きいパラメタでは学習率が比較的急に...
--損失関数の偏微分が小さいパラメタでは学習率が比較的緩や...
※ ε = 0.001
***RMSprop [#kdd7cbe0]
(Root Mean Square Propagation)
-[[AdaGrad>#u12d8d2f]]の問題点を改良した版
--更新回数が増えるほど更新量が減る。
--損失関数が大きいと次の更新量が急減する。
--急減するあまり更新が止まり易い。
-パラメタ更新量のスケーリング~
tは更新回数を表す下付き文字
--g(t) = 今回の勾配
--学習率の減衰の抑制を実現~
過去の勾配との指数移動平均の累積を取る。
---βが過去の勾配成分の累積をどれだけ重視するか指定するハ...
---更新するたびに過去の勾配はβ乗され指数関数的に減弱して...
ht = β(ht-1) + (1-β) * g(t)^2
---実装に際して、式を変形
ht = ht-1 + (1-β) (g(t)^2 - ht-1)
--現在の勾配を反比例するようスケーリング(=割る)~
この際、0除算にならないように分母に極小の値εを加算
θt = θt-1 - η(g(t)/(√ht+ε))
※ ε = 0.001、β = 0.9
***AdaDelta [#dc5e4977]
-[[AdaGrad>#u12d8d2f]]の改良版の[[RMSprop>#kdd7cbe0]]に、...
-パラメタ更新量のスケーリング~
tは更新回数を表す下付き文字
--g(t) = 今回の勾配
--学習率の減衰の抑制を実現~
---過去の勾配との指数移動平均の累積を取る。
vt = β(vt-1) + (1-β) * g(t) ^2
---更新量のスケーリング(=割る)~
この際、0除算にならないように分母に極小の値εを加算
ht = -(√(ut-1 + ε)/√(vt + ε)) * g(t)
---過去の更新量との指数移動平均の累積を取る。
ut = β(ut-1) + (1-β) * ht^2
---パラメタ更新
θt = θt-1 - η ht
※ β = 0.9
***Adam [#z75dbbb3]
(ADAptive Moment estimation)~
-[[MomentumSGD>#afd9f568]]と[[AdaDelta>#u12d8d2f]]的な自...
-パラメタ更新量のスケーリング~
tは更新回数を表す下付き文字
--g(t) = 今回の勾配
--学習率の減衰の抑制を実現~
---Momentum的な累積
mt = β1(mt-1) + (1-β1) * g(t)
^mt = mt / (1-β1^t)
---RMSprop的な指数移動平均の累積
vt = β2(vt-1) + (1-β2) * g(t)^2
^vt = vt / (1-β2^t)
--現在の勾配を反比例するようスケーリング(=割る)~
この際、0除算にならないように分母に極小の値εを加算
パラメタ更新量 = - (?/√^vt+ε)) * ^mt
※ ε = 0.001、β1 = 0.9、β2 = 0.999
***実装例 [#t25731a2]
-[[o'reillyのカサゴ深層学習の本>https://github.com/OpenTo...
-[[勾配降下法アルゴリズムの選択>データマイニング(DM)- P...
**重みの初期値 [#o35805ae]
***重みの初期値戦略 [#q6054249]
学習結果はこの初期値に大きく影響される。収束する・しない...
-すべての重みを同じ値で初期化すると学習が進行しない。
--「対称性の破れ」問題と言い、モデルの表現力が低下する。
--各層のニューロンが同じような役割を持ち、情報の流れが制...
--ランダムな初期値を設定しバイアスを使用することで、各ノ...
-初期値の大小
--初期の重みが大きいほど
---「対称性の破れ」は大きくなる(モデルの表現力が向上)。
---逆伝播の際に信号がうまく伝達するが、大き過ぎると値が爆...
--初期の重みが小さいほど
---「対称性の破れ」は小さくなる(モデルの表現力が低下)。
---逆伝播の際に信号が消失する恐れがあるが、正則化の観点か...
-一般的な重みの決め方
--重み
---ガウス分布や一様分布に従うランダムな初期化
---慣例で標準偏差0.01のガウス分布((正規分布)を使用。
--バイアス~
経験則に選択された定数
-経験則に基づく重みの決め方~
入出力層の数で標準偏差を決めてサンプリング~
m個の入力に対してn個の出力があるような全結合層の重みを初...
--[[Xavierの初期値、HEの初期値>深層学習のテクニック#cda1d...
--一様分布 (−√(1/m),√(1/m))からサンプリング
--正規化を施した一様分布 (−√(6/(m+n)),1√(6/(m+n)))からサ...
-その他の重みの決め方
--スパース初期化
--スケーリング係数gを用いてランダムに直交行列を初期化
-重みの初期化の抱える課題
--最適な重みの初期化基準を採択してもモデル性能の最適に繋...
---そもそも採択している基準が間違っている可能性
---初期化の時に導入された性質が学習の過程で消えてしまう可...
---最適化は速くなっても汎化誤差が意図せずに大きくなってし...
--そのため、初期化はモデルの性質をよく見極めた上で戦略的...
***活性化関数の出力分布 [#k8090516]
勾配消失や表現力の制限問題を回避するよう~
活性化関数の出力分布がバラけるように重みを初期値する。
-[[Sigmoid関数>ニューラルネットワーク(推論)#qc025e6f]]...
--標準偏差1の正規分布では値が0か1に集中する(勾配消失、表...
--標準偏差0.01の正規分布では値が0.5に集中する(表現力の制...
--Xavier(Glorot)の初期値は線形の活性化関数を対象にして...
標準偏差を1/√(前層ノード数)の正規分布にすると、深い層で歪...
--なお、Xavierの論文では後層ノード数も考慮した設定値が提...
-[[ReLu関数>ニューラルネットワーク#x80775f2]]の例
--標準偏差0.01の正規分布では値が0に寄る(微分時、勾配消失...
--Xavier(Glorot)の初期値で非線形なReLuは深い層でより値...
--HE(Kaiming)の初期値で、標準偏差を√(2/前層ノード数)の...
***[[Xavier、He>#k8090516]] [#cda1d3c9]
活性化関数の出力が広がりを持った分布になるように重みの初...
**バッチ正規化 [#t3c6ab88]
(Batch Normalization)
***概要 [#t3af6bd9]
-[[活性化関数の出力>#k8090516]]ではなく、アフィン変換層と...
--ミニバッチの平均0、標準偏差が1となるよう正規化の処理を...
--更に、固有のスケール(初期値1)とシフト(初期値0)を...
>出力を広がりを持った分布にする方法。
-内部共変量シフトを防ぎ、上手く学習できるようにする。
--内部共変量シフトとは学習時のパラメタ変化がデータ分布へ...
--上位層のパラメタ更新で下位層のデータ分布が変化し学習結...
--これを防ぐことで、初期値の影響を小さくし、過学習が抑制...
-[[勾配消失・爆発を解消する方法>ニューラルネットワーク#id...
***計算 [#bfd04b12]
(Bはミニバッチの集合的な意味)
--平均値を計算
m
μB = 1/m Σ xi
i=1
--(平均値から)[[分散>統計解析#m656dd23]]を計算
m
σ^2B = 1/m Σ(xi-μB)^2
i=1
--正規化(εはゼロ除算防止の微小値)
xi' = (xi-μB) / √(σ^2B + ε)
--スケーリング(γ)とシフト(β)
yi = γxi' + β
***実装時 [#q0aa194c]
BatchNormalization
-コンストラクタ
--引数なしでもOK
--平均と分散の移動平均は別になるので使いまわしNG
-実行(call)
--training:
---false:推論時は学習した移動統計
---true:学習時はミニバッチの平均・分散
--trainable:
---false:[[転移学習>#ebe9edcc]]
---true:[[ファイン・チューニング>#ea94272b]]
***学習時と推論時 [#w7f17af7]
-学習時
--ミニバッチの平均と分散で正規化する。
--平均と分散の移動平均を更新する。
-推論
--平均と分散の移動平均で正規化する。
--平均と分散の移動平均を更新しない。
**ハイパーパラメタとチューニング [#g80ab15e]
***選択 [#y03e8317]
-[[学習率>ニューラルネットワーク#za4d873f]]
-[[層のサイズ、層の深さ、バッチサイズ>ニューラルネットワ...
***最適化 [#m865261a]
[[グリッドサーチ、ランダムサーチ、ベイズ最適化>機械学習(...
**過学習を抑止する方法 [#f5d40509]
***データ拡張 [#l8a79d61]
(data augmentation)
<画像の場合>
-処理
--CNNの画像データにノイズ(拡大・縮小、反転、回転、並進)...
--実際に得られそうな拡張のみ行う(例えば上下固定なら回転...
--画像のサイズや形は変更しない(と言うか、深層学習の入力...
-効果
--これによりノイズに「頑健」(=統計用語で「決定的でない要...
--ロバスト性を高める。と言う(外乱の影響に頑健と言うよう...
-[[実装>データマイニング(DM)- Python - CNN#o122ce57]]
--左右反転(flip)
--回転(rotate)
--並進(move)
--拡大(crop)
--ガンマ変換(gamma)
--ガウシアンノイズ(gaussian)
--色の三属性の調整
---コントラスト(色相:hue)
---ブライトネス(輝度:brightness)
---カラフルネス(彩度:saturation)
-使用時の注意
--確率的な適用~
処理量を抑えるためミニバッチ毎に確率的にかける。~
--leakageの防止
---拡張元画像が同じ拡張画像をtrainデータとtestデータに混...
---データ分割後にデータ拡張を行う順番で処理を行えばleakag...
-特殊な処理
--MixUp~
画像を合成
--Cutout / Random Erasing~
入力画像をランダムなマスクで欠落させ~
より強い正則化の効果を作り出す(≒ [[ドロップアウト>#hf3c7...
--Cutmix~
CutoutをMixUpで改良した改良版
<言語の場合>
-MixUp
-EDA~
テキストデータの水増しやバリエーションを生成する。
--同義語置換(Synonym Replacement)
--ランダム挿入(Random Insertion)
--ランダム削除(Random Deletion)
--ランダム置換(Random Swap)
<音声の場合>
-ノイズ付与(Gaussian Noise)
-MixUp
-ボリューム変更
-ピッチ(音程)シフト
-SpecAugment
--時間方向のマスキング(Time Masking)
--周波数方向のマスキング(Frequency Masking)
--時間方向のシフト
***[[出力の分布調整>ニューラルネットワーク#hdea3b9f]] [#r...
-過学習の発生を軽減する一因になる。
-[[データ正規化>データマイニング(DM)- CRISP-DM#v9d19242...
-CNNに於いては、畳み込み層とプーリング層の間にバッチ正規...
***[[機械学習と同様のアンサンブル手法>機械学習(machine l...
バギング、ブースティング、ブートストラップ、スタッキング
***[[機械学習と同様の正則化>統計解析#i38c7fea]] [#q7425431]
機械学習と同様、明示的な正則化の重みの減衰(Weight Decay)
***陰的正則化機能 [#q1834025]
-[[以下>#yc09c881]]のような、明示的な正則化ではない暗黙の...
-また、NNは、その構造自体が何かしらの陰的正則化機能を含ん...
(非常に高度な数学理論を駆使してようやく一部が解き明かさ...
***[[ハイパーパラメタとチューニング>#g80ab15e]] [#yc09c881]
***早期終了(early stopping) [#q2b741ae]
-[[訓練誤差>深層学習の誤差逆伝播法#q7efa2ae]]が頭打ちにな...
-[[汎化誤差>深層学習の誤差逆伝播法#q7efa2ae]]が上昇に転じ...
***ドロップアウト(Dropout) [#hf3c7a28]
-[[アンサンブル学習のバギング>#v44f2bbc]]に相当する効果(...
--学習時にのみ適用され、推論時には適用されない。
--特定の割合のノードをランダムに無効化する(出力をランダ...
-以下は、実装レベルの話
--推論時の順伝播には消去した割合(30%なら 1 - 0.3 = 0.7)...
この意味は、[[アンサンブル学習のバギング>機械学習(machin...
--有効化した場合、順伝播は素通しで、逆伝播の勾配は1。
--無効化した場合、順伝播はソコで止まり、逆伝播の勾配は0。
***ドロップコネクト(Dropconnect) [#ta2e931d]
-ドロップアウト(Dropout) ではノード(出力値)を消す。
-ドロップコネクト(Dropconnect)ではエッジ(重み)を消す。
-効果の違い
--学習時にのみ適用され、推論時には適用されないが、無効化...
--この結果、パラメタ数が削減され、モデルの複雑さが減少し...
**転移学習 [#ebe9edcc]
-学習済みのモデルを異なった分野で利用する手法
-学習済みモデルには手を加えず(、重みを固定し)、~
追加の出力層だけを新たに学習させモデルを作成する。
***概要 [#k07a1a43]
-人が過去の経験を活かして新しい物事を習得する流れと似てい...
-大量の犬の画像データと少量の猫の画像データがあり、~
犬の種類判別モデルと猫の種類判別モデルを作成する場合、~
犬の種類判別の課題から得られた知識を猫の種類判別モデルに...
***詳細 [#i669f1c6]
-メリット・デメリット
--メリット
---限られたデータから高精度なモデルを作成できる
---少ないデータでの学習のため学習時間を短縮できる
--デメリット
---精度の改善ではなく悪化をもたらす場合がある(負の転移(...
---負の転移は、転移元と転移先の関連性が低い、転移の方法が...
-構築方法
--学習済みモデルの最終出力層(全結合)だけを付け替えてデ...
最終出力層(全結合)のパラメタだけ変更して新しいモデルを...
---入力層に近い部分は、タスクに固有の特徴ではなく汎用的な...
---奥の層に行くに連れて特徴が複雑になると、拾う特徴は段々...
--少ないデータで、最終出力層(全結合)のパラメタだけ変更...
**ファイン・チューニング [#ea94272b]
学習済みモデルに手を加えて(、重みを初期値し、)、~
追加の出力層以外も新たに再度学習させモデルを作成する。
***概要 [#s38ca193]
[[転移学習>#ebe9edcc]]との違いは、既存部分を再学習するか...
***詳細 [#k36d2d62]
[[転移学習>#ebe9edcc]]との違いに関してのみ言及。
-メリット・デメリット
--メリット
--デメリット
***構築方法 [#iad66a2b]
-学習済みモデルの最終出力層(全結合)を付け替え、~
出力層(全結合)だけでなく入力層に近い部分のパラメタも変...
--学習率を通常の 10^-2 倍程度に小さくする。
--出力層(全結合)の何層かのみ初期値を乱数にして学習させ...
奥にある層は複雑で固有な特徴を学習しているので学習済みの...
--一部の層のパラメタを全く学習させないという工夫もある。~
手持ちのデータが少ないときほど学習させるパラメタを絞る。
**転移学習とファイン・チューニングの違い [#q86c1484]
出力層の再学習は共通しているが、
***転移学習 [#v4fb5182]
学習済みモデルには手を加えず、学習を行い新たにモデルを作成
-出力層だけを学習させる。
***ファイン・チューニング [#ef93997b]
学習済みモデルにも手を加えて、学習を行い新たにモデルを作成
-出力層以外も学習させる。
-出力層以外の学習率を低く設定する。
**[[転移学習とファイン・チューニングの実装>データマイニン...
*参考 [#b62d3054]
-転移学習(TL:Transfer Learning)とFine Tuningの違いって...
https://ts0818.hatenablog.com/entry/2021/02/15/205258
ページ名: