機械学習プロフェッショナルシリーズ 深層学習 chapter3 確率的勾配降下法2. +
⽬次
1. 勾配降下法
2. ニュートン法
3. 確率的勾配降下法
4. ミニバッチ
5. 汎化性能と過適合
6. 過適合の緩和
i. 重み減衰
ii. 重み上限
iii. ドロップアウト
7. 学習のトリック
i. データの正規化
ii. データ拡張
iii. 複数ネットの平均
iv. 学習係数の決め⽅
v. モメンタム
vi. 重みの初期化
vii. サンプルの順序
4. +
勾配降下法
◯勾配降下法とは
Ø ⽬的関数の局所的な最⼩値 (⼤域的な最⼩値とは限らない) を反復計算
で求める⽅法
Ø 何らかの初期値𝑤(#)
を出発点に𝑤(%)
を以下の式で更新する
𝒘(%'()
= 𝒘(%)
− 𝜖𝛻𝐸
𝐸 : ⽬的関数
𝜖 : 学習係数
𝑤 : 𝐸の変数
◯具体的に深層学習のどの場⾯で⽤いられるのか?
Ø 順伝播型ネットワークの誤差関数𝐸 𝒘 を最⼩化する際に⽤いる
Ø 𝒘はネットワークの重みとバイアス
𝛻𝐸 ≡
𝜕𝐸
𝜕𝒘
=
𝜕𝐸
𝜕𝑤(
…
𝜕𝐸
𝜕𝑤2
3
勾配 のとき
5. +
ちなみに…
Ø 勾配降下法は関数の最⼩化⼿法で最も単純な⼿法
Ø 最⼩化⼿法にはニュートン法もあるよ!
◯ニュートン法とは
Ø ⽬的関数の2次のテーラー展開を最⼩化するように,パラメータの
修正量を各ステップごとに決定するアルゴリズム
Ø 勾配降下法よりも極⼩解への収束が早い
𝒘(%'()
= 𝒘(%)
− 𝐻5(
𝛻𝐸
𝐸 : ⽬的関数
𝑤 : 𝐸の変数
ヘッセ⾏列(Hessian matrix) 𝐻 = 𝛻6
𝐸
ニュートン法の詳細は → http://www.dais.is.tohoku.ac.jp/~shioura/teaching/mp11/mp11-13.pdf
ニュートン法は勾配降下法と違い,学習係数の決定に
学習が⼤きく左右されることがない
ディープネットの学習では
⽬的関数の2次微分の計算が
難しいのでニュートン法は
つらい
6. +
確率的勾配降下法
◯確率的勾配降下法(stochastic gradient descent : SGD)とは
𝒘(%'()
= 𝒘(%)
− 𝜖𝛻𝐸7
𝐸7 : サンプルnについての誤差関数
𝜖 : 学習係数
𝑤 : ネットワークの重みとバイアス
◯確率的勾配降下法のメリット
Ø 計算効率が向上し,学習が速く実⾏できる
Ø 望まない局所的な極⼩解にトラップされるリスクを低減
Ø 訓練データの収集と最適化の計算を同時並⾏で⾏える → オンライン学習
Ø 勾配降下法はすべてのサンプルを⽤いて重みを更新 → バッチ学習
Ø 訓練サンプルのうち1つのサンプルだけを使って以下のように
パラメータの更新を⾏う⽅法
Ø 重みの更新に⽤いるサンプルは毎回取り替える
11. +
過適合の緩和法
◯重み減衰
𝒘(%'() = 𝒘(%) − 𝜖
1
𝑁%
; 𝛻𝐸7 + 𝜆 𝒘(%)
𝐸%(𝒘) ≡
1
𝑁%
; 𝐸7 𝒘 +
𝜆
2
𝒘 6
7∈=>
𝜆 : 正則化パラメータ
通常𝜆=0.01~0.00001
Ø 以下のように誤差関数に重みの⼆乗和を加算し,
これの最⼩化を⾏う
Ø 最終項の追加により,学習時により⼩さい重みが選好される.
勾配降下法の更新式は以下の通り
※重み減衰は通常ネットワークの重みだけに適⽤し,
バイアスには適⽤しない
重みは⾃⾝の⼤きさに⽐例した速さで常に減衰
12. +
過適合の緩和法
◯重み上限
; 𝑤CD
6
< 𝑐
D
Ø 各ユニットの結合重みの⼆乗和に対し,上限を制約
Ø 上限を超える場合は重みに1以下の定数を掛け,制約を満たす
ようにする
Ø 重み減衰を上回る効果があり,特に後述のドロップアウトと
共に⽤いると⾼い効果を発揮
正則化の種類 テストデータ分類誤差(%)
重み減衰 1.62
重み上限 1.35
ドロップアウト+重み減衰 1.25
ドロップアウト+重み上限 1.05
表:各正則化⼿法ごとの⼿書き数字認識MNISTの分類精度の⽐較
15. +
データの正規化
𝑥7D ←
𝑥7D − 𝑥̅D
𝜎D
𝜎D : 学習データの標準偏差
𝑥̅D : 全学習データの平均
Ø 訓練データの偏りをなくすような前処理
Ø テストデータおよび推論時の各データにも同じ前処理を施す必要あり
Ø 以下の変換を⾏い,サンプルの各成分の平均を0,分散を1にする
(a) 元のサンプル集合
(b) 平均を0にする変換後
(c) 成分ごとの分散を1にする変換後
これもデータの偏りをなくす前処理の⼀つ
(d) ⽩⾊化:成分間の相関を0にする変換
𝜎Dが超⼩さい場合は代わり
にmax(𝜎,𝜖) (𝜖は⼩さな値)
で割ったりする
データの正規化
18. +
学習係数の決め⽅
Ø 学習係数を決める際,定番といえる考え⽅は以下の2つ
n 学習の進捗とともに学習係数を⼩さくする
n 層ごとに異なる値を⽤いる
Ø 学習係数を⾃動的に定める(変化させる)⽅法はいくつか存在する
n 本書では最もよく使われる⽅法としてAdaGradを紹介
その他の⽅法は → http://sebastianruder.com/optimizing-gradient-descent/
Ø 勾配法ではパラメータの更新量の⼤きさは学習係数により変化
n 誤差関数の勾配を𝒈% ≡ 𝛻𝐸%と書き,このベクトルの成分を𝑔%,D
と書くと,重みの更新量の𝑖成分は以下の通り
−𝜖𝑔%,D勾配降下法: −
𝜖
∑ 𝑔%T,D
6%
%TU(
𝑔%,DAdaGrad:
勾配の累積が⼤きいほど学習率を⼩さくする