+ 深層学習 Chapter 3: 確率的勾配降下法 @zakktakk
+
深層学習Chapter 3:確率的勾配降下法
@zakktakk
+⽬次
1. 勾配降下法2. ニュートン法3. 確率的勾配降下法4. ミニバッチ5. 汎化性能と過適合6. 過適合の緩和
i. 重み減衰ii. 重み上限iii. ドロップアウト
7. 学習のトリックi. データの正規化ii. データ拡張iii. 複数ネットの平均iv. 学習係数の決め⽅v. モメンタムvi. 重みの初期化vii. サンプルの順序
+勾配降下法
まずはアニメーションでざっくり理解…
←勾配降下法で最⼩値を求めたい関数
←上の関数の微分
坂道を転がり落ちてるっぽい
(http://qiita.com/kenmatsu4/items/d282054ddedbd68fecb0)
+勾配降下法
◯勾配降下法とは
Ø ⽬的関数の局所的な最⼩値 (⼤域的な最⼩値とは限らない) を反復計算で求める⽅法
Ø 何らかの初期値𝑤(#)を出発点に𝑤(%)を以下の式で更新する
𝒘(%'() = 𝒘(%) − 𝜖𝛻𝐸𝐸 : ⽬的関数𝜖 : 学習係数𝑤: 𝐸の変数
◯具体的に深層学習のどの場⾯で⽤いられるのか?Ø 順伝播型ネットワークの誤差関数𝐸 𝒘 を最⼩化する際に⽤いるØ 𝒘はネットワークの重みとバイアス
𝛻𝐸 ≡𝜕𝐸𝜕𝒘 =
𝜕𝐸𝜕𝑤(
…𝜕𝐸𝜕𝑤2
3
勾配 のとき
+ちなみに…
Ø 勾配降下法は関数の最⼩化⼿法で最も単純な⼿法
Ø 最⼩化⼿法にはニュートン法もあるよ!
◯ニュートン法とはØ ⽬的関数の2次のテーラー展開を最⼩化するように,パラメータの修正量を各ステップごとに決定するアルゴリズム
Ø 勾配降下法よりも極⼩解への収束が早い
𝒘(%'() = 𝒘(%) − 𝐻5(𝛻𝐸 𝐸 : ⽬的関数𝑤: 𝐸の変数
ヘッセ⾏列(Hessian matrix) 𝐻 = 𝛻6𝐸
ニュートン法の詳細は → http://www.dais.is.tohoku.ac.jp/~shioura/teaching/mp11/mp11-13.pdf
ニュートン法は勾配降下法と違い,学習係数の決定に学習が⼤きく左右されることがない
ディープネットの学習では⽬的関数の2次微分の計算が難しいのでニュートン法はつらい
+確率的勾配降下法
◯確率的勾配降下法(stochastic gradient descent : SGD)とは
𝒘(%'() = 𝒘(%) − 𝜖𝛻𝐸7𝐸7 : サンプルnについての誤差関数𝜖 : 学習係数𝑤: ネットワークの重みとバイアス
◯確率的勾配降下法のメリットØ 計算効率が向上し,学習が速く実⾏できる
Ø 望まない局所的な極⼩解にトラップされるリスクを低減
Ø 訓練データの収集と最適化の計算を同時並⾏で⾏える → オンライン学習
Ø 勾配降下法はすべてのサンプルを⽤いて重みを更新 → バッチ学習
Ø 訓練サンプルのうち1つのサンプルだけを使って以下のようにパラメータの更新を⾏う⽅法
Ø 重みの更新に⽤いるサンプルは毎回取り替える
+ミニバッチ
Ø 計算規模の⼤きいニューラルネットワークの学習では計算機が持つ並列計算資源の利⽤が不可⽋
Ø 重みの更新を少数のサンプルからなる集合(ミニバッチ)単位で⾏うと効率的
Ø 1つのミニバッチを𝐷%とすると,ミニバッチ単位の重み更新で⽤いる誤差関数は以下の通り
𝐸%(𝒘) ≡1𝑁%
; 𝐸7 𝒘7∈=>
𝐸7 : サンプルnについての誤差関数𝑁% : ミニバッチが含むサンプル数
Ø ミニバッチのサイズは10~100サンプル前後とすることが多い→ サイズを⼤きくし過ぎると計算速度が低下
Ø 多クラス分類の場合はミニバッチに各クラスから1つ以上のサンプルを⼊れるとbetter
+可視化して⽐較すると…
(http://sinhrks.hatenablog.com/entry/2014/11/24/205305)
ミニバッチ+SGDは勾配降下法と確率的勾配降下法のいいところを両取りしている
+汎化性能と過適合
Ø これまでは訓練データに対する誤差を最⼩化することを考えていた
Underfitting Overfitting
Ø 実際は「まだ⾒ぬ」サンプルに対して正しく推定を⾏いたい (汎化性能)
Ø 訓練データに対する誤差→訓練誤差,テストデータに対する誤差→テスト誤差
学習が進むと,訓練誤差は単調減少するがテスト誤差は訓練誤差と乖離 or 増加
過適合(overfitting)
学習の進⾏のイメージ→
過適合では外れ値に対して過剰に反応
+過適合の緩和
Ø 過適合 ↔学習時に誤差関数の浅い局所解にトラップされた状態
ネットワークの⾃由度(主に重みの数)が⼤きいほど過適合のリスク and ネットワークの表現能⼒が⾼くなる
学習時に重みの⾃由度を制約する正則化によって過適合の問題を解決
単純にネットワークの⾃由度を減らすことは過適合のリスクも下げるが,ネットワークの表現能⼒も下げるため望ましくない
+過適合の緩和法
◯重み減衰
𝒘(%'() = 𝒘(%) − 𝜖1𝑁%;𝛻𝐸7 + 𝜆𝒘(%)
𝐸%(𝒘) ≡1𝑁%
; 𝐸7 𝒘 +𝜆2 𝒘 6
7∈=>
𝜆 : 正則化パラメータ通常𝜆=0.01~0.00001
Ø 以下のように誤差関数に重みの⼆乗和を加算し,これの最⼩化を⾏う
Ø 最終項の追加により,学習時により⼩さい重みが選好される.勾配降下法の更新式は以下の通り
※重み減衰は通常ネットワークの重みだけに適⽤し,バイアスには適⽤しない
重みは⾃⾝の⼤きさに⽐例した速さで常に減衰
+過適合の緩和法
◯重み上限
;𝑤CD6 < 𝑐D
Ø 各ユニットの結合重みの⼆乗和に対し,上限を制約
Ø 上限を超える場合は重みに1以下の定数を掛け,制約を満たすようにする
Ø 重み減衰を上回る効果があり,特に後述のドロップアウトと共に⽤いると⾼い効果を発揮
正則化の種類 テストデータ分類誤差(%)
重み減衰 1.62
重み上限 1.35
ドロップアウト+重み減衰 1.25
ドロップアウト+重み上限 1.05
表:各正則化⼿法ごとの⼿書き数字認識MNISTの分類精度の⽐較
+過適合の緩和法
◯ドロップアウトØ 多層ネットワークのユニットを確率的に選別して学習する⽅法Ø 学習時,中間層と⼊⼒層のユニットを確率𝑝(通常𝑝=0.5程度)でランダムに選出し,それら以外を無効化する
𝑖
𝑝𝑤(D𝑧D𝑝𝑤6D𝑧D𝑝𝑤JD𝑧D𝑝𝑤KD𝑧D
Ø 学習終了後の推論時にはドロップアウトで無効化の対象とした層のユニットの全ての出⼒を𝑝倍する
左のネットワークの中間層,⼊⼒層のユニットを確率𝑝でランダムに選出し,ネットワークの重みを更新
+学習のトリック
この世には学習時に実⾏することで汎化性能を向上 or 学習を早く進められる⽅法がいくつか存在する
以降のスライドでは本で紹介されている7つの⽅法を紹介しますより詳しくは → https://www.cs.toronto.edu/~hinton/absps/guideTR.pdf
その多くは厳密な理論を伴わないノウハウのようなものであるが,実際に効果が認められている
+データの正規化
𝑥7D ←𝑥7D − �̅�D𝜎D 𝜎D : 学習データの標準偏差
�̅�D : 全学習データの平均
Ø 訓練データの偏りをなくすような前処理Ø テストデータおよび推論時の各データにも同じ前処理を施す必要あり
Ø 以下の変換を⾏い,サンプルの各成分の平均を0,分散を1にする
(a)元のサンプル集合
(b)平均を0にする変換後(c) 成分ごとの分散を1にする変換後
これもデータの偏りをなくす前処理の⼀つ
(d)⽩⾊化:成分間の相関を0にする変換
𝜎Dが超⼩さい場合は代わりにmax(𝜎,𝜖) (𝜖は⼩さな値)で割ったりする
データの正規化
+データ拡張
Ø サンプルが画像データならば,平⾏移動・鏡像反転・回転変動・⾊の変動などの処理を施し,サンプルに追加
Ø 訓練サンプルに何らかの加⼯を施し,量を⽔増しする処理
元データ ⾊の変動 鏡像反転 回転+拡⼤
Ø 訓練サンプルの量が⾜りないことは過適合の最⼤の原因
Ø しかし,⼤量のサンプルを集めることはコスト⼤ or 不可能
データの⽔増しをしよう!
◯データ拡張とは?
+複数ネットの使⽤
Ø ドロップアウトは単⼀ネットワーク内で実質的にモデル平均を実⾏している
Ø 「モデル平均」と呼ばれ,機械学習全般で有効な⽅法
Ø 精度は向上するが,学習およびテスト時の計算量が増加してしまうという⽋点がある
Ø 複数の異なるニューラルネットを組み合わせる(=複数のネットワークから得られる出⼒の平均を答えとする)と⼀般に推定精度が向上
n 具体的には構造の異なるネットワークや構造は同じだが学習開始時の初期値が異なるネットワークなど
+学習係数の決め⽅
Ø 学習係数を決める際,定番といえる考え⽅は以下の2つ
n 学習の進捗とともに学習係数を⼩さくするn 層ごとに異なる値を⽤いる
Ø 学習係数を⾃動的に定める(変化させる)⽅法はいくつか存在する
n 本書では最もよく使われる⽅法としてAdaGradを紹介その他の⽅法は → http://sebastianruder.com/optimizing-gradient-descent/
Ø 勾配法ではパラメータの更新量の⼤きさは学習係数により変化
n 誤差関数の勾配を𝒈% ≡ 𝛻𝐸%と書き,このベクトルの成分を𝑔%,Dと書くと,重みの更新量の𝑖成分は以下の通り
−𝜖𝑔%,D勾配降下法: −𝜖
∑ 𝑔%T,D6%
%TU(
𝑔%,DAdaGrad:
勾配の累積が⼤きいほど学習率を⼩さくする
+モメンタム
Ø 重みの修正量に,前回の重みの修正量のいくばくかを加算する⽅法Ø ミニバッチt-1に対する重みの修正量を∆𝒘(%5() ≡ 𝒘 %5( − 𝒘(%56)とすると,ミニバッチtは以下のように重みを更新
ミニバッチ利⽤時の更新式 モメンタム
𝒘(%'() = 𝒘(%) − 𝜖𝛻𝐸% + 𝜇∆𝒘(%5() 𝜇 : モメンタム係数通常0.5~0.9程度
Ø 誤差関数が深い⾕状であり,かつ⾕底が平らな時に特に有効
Ø 勾配降下法の収束性能を向上させる⽅法の⼀つ
←⾕状誤差関数の重み探索の様⼦左:モメンタム項なし右:モメンタム項あり(𝜇=0.5)
モメンタム項なしではジグザグと探索が進み効率が悪いが,モメンタム項ありでは⾕と直⾏⽅向の動きが平均化され,なくなる
+重みの初期化
Ø ガウス分布から⽣成したランダム値を初期値とする⽅法が⼀般的
Ø ガウス分布の標準偏差𝜎は以下のようにするのがbetter
𝜎 =𝜎X
𝑀(6
𝜎X : ユニットの総⼊⼒の標準偏差𝑀 : ユニットの⼊⼒側結合数
𝜎Xは定数ではなくパラメータです
𝑀は定数です
Ø ガウス分布のパラメータ𝜎をどう選ぶかは学習の結果に影響を及ぼすn 例えば活性化関数がロジスティック関数の場合,
𝜎が⼩さすぎる → 等しく0を初期値とするのと同様𝜎が⼤きすぎる → ユニットの出⼒が値域の上下限いずれかの
値に偏る
+サンプルの順序
Ø 確率的勾配降下法やミニバッチを⽤いる場合,提⽰するサンプル(集合)の順序には任意性がある↔ 設計者が⾃由に決められる
Ø ⼀般に,まだよく学習されていないサンプルから順に提⽰すると効果的
Ø ただし,ディープネットでは処理の効率性に重点が置かれるためあまり⽤いられない
Ø 特にクラスごとのサンプル数に偏りがあるクラス分類問題で有効