HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

自然勾配法関連のメモ

 

 

follow us in feedly

f:id:s0sem0y:20170703040741p:plain

 

勾配法

損失関数

学習パラメータ\bf wを持つ関数f({\bf x,w})に関して、損失関数l({\bf x,w})を考え、関数\bf wの性能を損失の\bf xについての期待値

 

L({\bf w}) = E[l({\bf x,w})]

 

で測る。さしあたり、\bf xの確率分布q({\bf x})は不明なので、期待値を取る代わりに、観測されるデータ\bf \{x_1,x_2,...,x_N\}の個々の損失の平均値

 

\displaystyle L_{tr}({\bf w}) = \frac{1}{N}\sum_{i=1}^N l({\bf x_i,w})

 

で代用します。これは真の分布\bf q({\bf x})の代わりに経験分布によって代用しているということになります。

 

L_{tr}を訓練誤差と呼び、これを最小化する\bf wを獲得することを学習と呼びます。

 

本来は真の損失関数E[l({\bf x,w})]を最小化したいのに、代わりに訓練誤差を使う(すなわち真の分布の代わりに経験分布を使う)ため、通常は過学習に陥ります。逆に経験分布が十分に真の分布を表していれば過学習の可能性をぐっと減らせるわけです(これは事実上、対象とするあらゆるデータを十分に数多く所持し、全て網羅しているということ)。

 

勾配学習

 

\displaystyle {\bf w_{t+1}} = {\bf w_t} - ε\frac{\partial L_{tr}(\partial {\bf w_t})}{\partial {\bf w_t}}

 

w_{t+1}を更新していくのが勾配学習です。この時、経験損失L_{tr}を算出する際に、手持ちの全てのデータを用いるのがバッチ学習、ランダムに幾つかのデータを用いて算出するのが確率勾配学習になります。ランダムに幾つかのデータを算出すれば、それは本来の損失Lから経験損失L_{tr}が離れてしまいがちです。

 

従って時として、真の損失Lを上昇させる方向に学習が進む可能性もありますが、手元のデータが十分にあれば平均的には減少させる方向に進むことが期待できます。

 

このランダムな振る舞いのお陰で、勾配が小さくなるような場所や、あるいは局所解を脱出してくれることも期待できます。

 

 

自然勾配法

最急降下法

関数L({\bf w})を考えた時、その微分\frac{\partial L({\bf w})}{\partial {\bf w}}は値を上昇させる方向を向いています。テイラー展開から

 

\displaystyle L({\bf w} + d{\bf w})=L({\bf w}) + \frac{\partial L({\bf w})}{\partial{\bf w}}\cdot d{\bf w}

 

であり、d{\bf w}\frac{\partial L({\bf w})}{\partial {\bf w}}方向に取れば

 

L({\bf w} + d{\bf w}) \geq L({\bf w})

 

で明らかです。しかし、増加させる方向であるのは良いとして、最も増加させる方向であるかどうかが問題になります。これが\bf wをユークリッド空間であると考えた場合には、確かに微分した方向が直接、最も増加させる方向になり、

 

この負の方向へ更新することにより、最急降下法

 

\displaystyle {\bf w_{t+1}} = {\bf w_t} - ε\frac{\partial L_{tr}(\partial {\bf w_t})}{\partial {\bf w_t}}

 

が獲得できます。

 

リーマン空間

ユークリッド空間では{\bf a}=(a_1,a_2,...){\bf b} = (b_1,b_2,...)の内積は

 

\displaystyle \sum_ia_ib_i

 

となっていますが、

 

ベクトルの長さは自分自身との内積を取ることで獲得でき、距離なる概念は、空間に対して内積を定義することで得られるとも考えることができます。

 

そこで、

 

\displaystyle \sum_i\sum_j g_{ij}a_ib_i

 

という内積を考えます。ここでg_{ij} を単位行列としたケースに相当するのがユークリッド空間です。g_{ij}として単位行列でないものを考えることにすれば、ユークリッド空間ではない空間(リーマン空間)を考えることができます。(g_{ij}は正定対称行列)

 

勾配法を再び

\bf wは通常ユークリッド空間ではないため、微分を求めた方向は必ずしも最急上昇方向(あるいは微分の負が最急降下方向)とはなっていません。ここで、空間を決定づけるg_{ij}を残した状態で、最急上昇方向を探ってみます。

 

\bf wをある方向\bf aを用いて\bf w + ε\bf aに変更してみます(ここでεは非常に小さな数)。

 

\bf aはどの方向を向いた時にも一定の大きさにして置かなければならないため制約条件として

 

\displaystyle ||{\bf a}||^2 = \sum_i\sum_ja_ia_jg_{ij}

 

を一定という条件の元、\bf w\bf a方向へ変化させた際の損失関数Lの変化量ΔLを測ります。

 

\displaystyle ΔL=ε\frac{\partial L}{\partial {\bf w}} \cdot {\bf a}

 

この変化量が最大となる\bf aが見つかれば、その負方向に進むことで最急降下法を構築することができます。

 

ラグランジュの未定乗数法によって

 

\displaystyle δ\left(\frac{\partial L}{\partial {\bf w}} \cdot {\bf a} - \sum_i\sum_j\frac{λ}{2}g_{ij}a_ia_j\right)=0

 

が求める方程式であり、g_{ij}を行列Gとして

 

\displaystyle \left( \frac{\partial L}{\partial {\bf w}}-λG{\bf a}\cdot {\bf a} \right) = 0

 

となり、この解は

 

\displaystyle {\bf a} ∝ G^{-1}\frac{\partial L}{\partial {\bf w}}

 

と求まります。

 

自然勾配法

従って、最急降下方向は\bf -aで取ればよく、最急降下法は

 

\displaystyle {\bf w_{t+1}} = {\bf w_t} - εG^{-1}({\bf w})\frac{\partial L}{\partial {\bf w}}

 

で導入されます。

 

これを自然勾配法と呼び、最急降下法の一般的な形式となります。

 

この時、Gが単位行列であれば、やはり、普通の更新式

 

\displaystyle {\bf w_{t+1}} = {\bf w_t} - εG^{-1}({\bf w_t})\frac{\partial L_{tr}( {\bf w_t})}{\partial {\bf w_t}}

 

が最急降下学習則を与えることになります(G自体も\bf wの関数。すなわち空間上の場所ごとに空間の曲がり具合が違うということ)。

 

自然勾配法とその亜種

G^{-1}の推定を行う適応的自然勾配法

自然勾配法は、曲がった空間\bf wを座標系に取ったスカラー関数Lに対する最急降下を与えるため、一般的に普通の勾配法に比べて性能が良いとされます。しかし、Gを求め、更にその逆行列を計算するのは、実用上中々手に負えないため、G^{-1}の方を直接求めることにします。その1つの解法が以下の適応的自然勾配法です。

 

\displaystyle {\bf w_{t+1}} = {\bf w_t} - εG^{-1}_t\frac{\partial L_{tr}({\bf w_t})}{\partial {\bf w_t}}

 

\displaystyle G^{-1}_{t+1} = (1+ε)G^{-1}_t - εG_t^{-1}\frac{\partial L_{tr}({\bf w_t})}{\partial {\bf w_t}}\left(\frac{\partial L_{tr}({\bf w_t})}{\partial {\bf w_t}}\right)^TG_t

 

ここではG^{-1}も未知数であるため、これも学習の中に組み込んで、適応的に最急降下方向を獲得するように学習します。

 

参照:Singularities Affect Dynamics of Learning in Neuromanifolods

https://bsi-ni.brain.riken.jp/modules/xoonips/download.php/280.pdf?file_id=274

 

 

Gを推定しない擬似的自然勾配法

自然勾配法の狙いは、曲がった空間での最急降下法を与えることでした。そのためには曲がった空間を規定するGが必要となりましたが、これは一般に求めることが難しいため、これを諦めるという方法があります。

 

そうではなく、逆に曲がったパラメータ空間の方が真っ直ぐに伸びてしまう(つまりGが単位行列になる)ような変換をニューラルネットワークに挿入することで、普通の勾配法が自然勾配法に近づくように仕立てあげる方法があります。

 

それはニューラルネットワークのとある層について

 

f({\bf x,w}) = Relu ({\bf Wx + b})

 

のようにアフィン変換→非線形変換という変換を行っている場合にバッチ正規化BNを非線形変換の前後に挟み込み

 

f({\bf x,w}) = BN(Relu (BN ({\bf Wx + b})))

 

とすると良いそうです。(ただし仮定をおいた理論上の話。詳しい議論は以下の参照を)

参照:自然勾配近似法を起点としたバッチ正規化の数理的理解

https://kaigi.org/jsai/webprogram/2017/pdf/1151.pdf

 

 

 

 

s0sem0y.hatenablog.com

s0sem0y.hatenablog.com