ディープラーニングと物理学(読書メモ)

ニューラルネットワークの動作機構を物理学の用語で説明しているところが魅力的で前から気になっていた本。前半は物理学の記法で書かれたニューラルネットワークの解説、後半はDLと物理学の概念を往復して互いの領域への示唆が書かれていて面白かった。

前半部分の忘れたくない部分を以下にメモした。

はじめに:機械学習と物理学

情報理論

事象Aの情報量 = -log P(事象A)

さまざまな事象A1, A2, .., Awが確率p1, p2, pwで起こる時、各事象の情報量は -log pi になるが、その期待値を平均情報量、または情報エントロピーと呼び

S = - Σ pi log pi

と呼ぶ。「情報」が少ない⇄予測が困難⇄情報エントロピーが大きい


A1が#1回、A2が#2回、...、Awが#w回、合計で#回発生した (1.3.1)

qi を真の確率だと仮定した時、(1.3.1)が得られる確率 (1.3.2)

p(Aiが#i回起こる確率)=qi^#i

順番は問わないため、多項係数 = #!/(#1!#2!...#w!) を掛けて

(1.3.2) = q1^#1・q2^#2...・qw^#w ・#!/(#1!#2!...#w!) (1.3.5)

機械学習ではうまくqi を調整し(1.3.5)をなるべく大きくする

(1.3.5) は大数の法則での置き換えとスターリングの公式での置き換えを実施すると、

(1.3.5) = exp [ - # Σ ( pi log pi/qi )]

となり、この確率を1に近づけるには相対エントロピー sigma ( pi log pi/qi ) を0 に近づけるということ。

相対エントロピーはカルバックライブラー情報量と呼ばれる

日本語解説資料

http://www.math.tohoku.ac.jp/~kuroki/LaTeX/20160616KullbackLeibler.pdf

人工知能が描いた絵のエントロピー減少はどこから来た?マクスウェルの魔



機械学習の一般論

真のデータ生成確率 P(x, d)があった時、パラメータを調整してモデル Q_j(x, d)をなるべく P(x, d) に近づけようとしたい。

相対エントロピー

D_KL(P||Q_j) = Σ [ P(x, d) log { P(x, d) / Q_j(x, d)} ] (2.2.10)

これは汎化誤差と言われる。

一方で、真のデータ生成確率ではなく、観測されたデータからもたらされる近似的な確率を経験確率 P'(x, d) とした時

D_KL(P’||Q_j) は経験誤差と言われる。

経験誤差を0に近づけて汎化誤差が大きくなってしまう現象の事を過学習という。

汎化誤差と経験誤差の定義をうまく変形すると以下の不等式にまとめることが出来る

(汎化誤差) <= (経験誤差) + ο( sqrt[log(#/d_vc)/(#/d_vc)] )

d_vc は VC 次元であり、モデル Q_j のパラメータの J の数に対応する。

モデルの表現力を上げて J を大きくすると sqrt[log(#/d_vc)/(#/d_vc)] は無限大に近づいてしまうので、いくら経験誤差を小さくしても汎化誤差を小さく出来ない、という事になる。

(…この極限はマイナス無限大になる気がするが…気にしないで先に進む)


学習を実装するに当たって、もっとも手軽な方法は誤差のパラメーターJ に関する勾配(divergence)を使って更新していくこと

J_t+1 = J_t - εdivergence_j D_kl(P||Q_J)          (2.3.1)

しかし、真のP を知らないのでこの計算はできない。真のPを知らないので測定されたデータをPからのサンプルと見立ててサンプル近似を用いて勾配降下法を使うことを確率的勾配降下法(SGD)という。

g = Σ [divergence{log P(x, d)/Q_j(x, d)} / #]       (2.3.5)


1. J_t=0 を適当に初期化

2. 以下を繰り返す。

 データを # 個サンプリング。

 gを計算 

   J_t+1 = J_t - εg

注意するのは、サンプリングして大数の法則が適用できるようにしているということは、サンプリングが全て独立に取られるということを仮定していることになる。


データが限られている場合は、独立にサンプリングできる回数に限りがあるので、なるべくバイアスが乗らない確率的勾配降下法を行うために、ミニバッチ学習という方法をとる。 

1. J_t=0 を適当に初期化

2. 以下を繰り返す。

 データを ランダムに M 個の部分データに分割する。

 以下を m = 1 から m = M まで繰り返す

  m番目の部分データで g を計算

    J ← J - ε・g


もちろん、データをランダムに分割しているだけなので各 g は独立ではない、よって汎化誤差の勾配の近似精度が上がるわけではない。

深層学習の場合、ニューラルネットワークを用いる場合は誤差逆伝播法という微分の計算をアルゴリズム化することができる。

ニューラルネットワークの基礎

例えば x = (x, y) の x の値が 0.5 を越えるかこえないかで、 d = 0 か d = 1 が決定されている場合、 x と d が相関しているように見える。(図 3.1 )

このような相関を物理系を用いて表現するにはハミルトニアンとして表現する。ハミルトニアンは力学的自由度の関数。

例えば独立した質点二つのハミルトニアンは

H = 1/2 p_1(t)^2 + 1/2 p_2(t)^2 + 1/2 x_1(t)^2 + 1/2 x_2(t)^2

もし質点1と質点2の間に距離に比例した力が働くときは

ΔH = c ( x_1(t) - x_2(t) )^2

という項がハミルトニアンに加わる。cは結合定数

物理系が与えられたとき、その統計力学的な振る舞いはどのように書けるか

物理系が温度T の熱浴に接しているとき、ボルツマン分布というエネルギー分布を持つ。エネルギーE をもった状態が実現される確率は

P = (1/Z) exp (- E / k_B ・T)

ここで k_B はボルツマン定数、 Z は分配関数 (P を確率として、全確率が1 になるように規格化するもの)

図 3.1 の系のハミルトニアンを書くとき 物理系として x を外場、 dを力学的自由度とする統計力学を考えてみる(電場の中の粒子の軌道のようなイメージ?) 簡単のために d について一次の項だけを入れると、最も単純なハミルトニアンは

H_j,x(d) = - (x J_x + y J_y + J ) d       (3.1.6)

この「物理系」を用いて Q_j(x, d)を作ってみる。まず (3.1.6)からd についてのボルツマン分布を作ると

Q_j(d | x) = exp (- H_j,x(d)) / Z

               = exp (- (x J_x + y J_y + J ) d ) / {1 + exp (x^μ J_μ + J )}.  (3.1.7)

これはシグモイド関数σ(X) = 1/[exp(-X) + 1] を使って簡単に書くと d = 0 と d = 1 の時で分けて

Q_j(d=1| x) = σ(x J_x + y J_y + J )    (3.1.9)

Q_j(d=0| x) = 1- σ(x J_x + y J_y + J )        (3.1.10)

と書ける。

これと x の生成確率 P(x) を使って、

Q_J(x, d) = Q_J(d | x)P(x

とモデルを定義してみる。これでモデルができたとして、結合定数 J_x , J_y , J を学習して真の分布 P(x, d)をまねる。

相対エントロピーは
D_KL(P||Q_j) = Σ [ P(x, d) log { P(x, d) / Q_j(x, d)} ] (2.2.10)

       = - Σ [ P(x, d) log  Q_j(d|x) ] + (Jに依存しない部分)  (3.1.13)

となって勾配法を使うときは第一項だけ注目し

      =   - (1/#) Σ - d[i]・ log σ(x[i] J_x + y[i] J_y + J ) + (1 - d[i])・ log {1 - σ(x[i] J_x + y[i] J_y + J ) }      (3.1.14)

となるので、これを学習によってJを調整して減らしていく。

ところで、d の期待値は、(d=1の場合のたしあわせなので)

<d>_J,x[i]  = Σd ・ Q_j(d|x[i]) =  Q_j(d = 1|x[i]) = σ(x[i] J_x + y[i] J_y + J )  (3.1.15)

また、交差エントロピーと言われる以下の関数を使うと

L(X, d) = -[ d log X + (1-d) log (1- X) ]    (3.1.16)

を用いると、結局 (3.1.14) を最小化するということは、入力データx[i]としたときの機械の出力値 <d>_J,x[i] と教師信号 d[i] の誤差関数を L(<d>_J,x[i], d[i]) を小さくするという意味になる。


多値分類

ここまでは d=0, 1 の二クラス分類だったが、多クラスの場合も同様にハミルトニアンが書ける。 d = (d_1, d_2, d_3, d_4) の多クラスだった場合、ハミルトニアンは

H_j,x(d) = - Σ(x J_x_I + y J_y_I + J_I ) d_I       (3.1.18)

行列による表記 J = (J_x_I, J_y_I) とJ = (J_1, J_2, J_3, J_4) を使って

H_j,x(d) = - d・(Jx + J)       (3.1.19)

と書いて、ボルツマン重みは

Q_j(d | x) = exp (- H_j,x(d)) / Z

               = exp (d・(JJ)) / {exp(JJ)_1 + exp(JJ)_2 + exp(JJ)_3 + exp(JJ)_4}                   (3.1.20)

ここでシグモイド関数の拡張である softmax 関数 σ_I (X) = exp(X_I) / Σexp(X_I) を導入してモデルは

Q_j(d_I =1| x) = σ_I (JJ )    (3.1.22)

となるので、相対エントロピーの最小化を同様に求めていけば良い。(略)

http://www-adsys.sys.i.kyoto-u.ac.jp/mohzeki/summer2016.pdf

回帰

実数自由度 d ∈ [-∞ , ∞] の場合は

ハミルトニアンは

H_J,x (d) = 1/2 ・(d - (JJ ))^ 2

であり、ボルツマン分布は

 Q_j(d | x) =  1/√2 ・exp [ -1/2 ・(d - (JJ ))^ 2]

というガウス分布になる。 d の期待値はガウス分布の平均値なので 

<d>_J,x[i]  = JJ

また、誤差関数は単純にこの対数をとる形になるため

L(<d>_J,x[i], d[i]) = 1/2 ・(d[i] - <d>_J,x[i] )^2

単純に二乗誤差になりこれは「線形回帰」をすることになる。

深層ニューラルネットワーク

図3.5のように入力と出力の間に複数の中間層を持つニューラルネットワークはN個のハミルトニアンを用意して

 H1_J1,x(h1)

 H2_J2,x(h2)

 …

 HN_JN,x(hN)

それぞれの層における期待値 <h1>, <h2> などを使って最終層の出力を

<hN> = σ_N(J_N・σ_N-1(...J_2・σ_1( J_1・x)...))

と書ける。この値と d の差を減らすように学習する。

ブラケット記法による誤差逆伝播法の導出

ベクトル空間の元を ケット|・>、その双対をブラ <・|で表す記法で導出。

ソフトマックス交差エントロピーの場合

E = <d|h_N>

二乗誤差を考える場合

E = 1/2・(|d> - |h_N>)^2 = 1/2・<h_N - d | h_N - d>

いずれの場合も最終層の出力に関する変分は

δE/δ|h_N> = <d| または <h_N - d|

というブラベクトルになる。 

変分のブラベクトルは漸化式

<δ_l| = <δ_l-1|J_N-l+2G_N-l+1

と書けるので(中略)、

誤差逆伝播法は以下のように書ける。

1.初期値 |h_0> = |x[i]> として右方向に繰り返し計算し |h_l>を計算する

2.初期値 <δ_0| = <d[i]| として左方向に繰り返し計算し <δ_l|を計算する 

3.Eの微分値として divergence E = | δ_N-l+1> <h_l|

ニューラルネットワークの万能近似定理

(計算は省略)

・3層で中間層のユニットの数を増やす ← 表現力が冪で増える

・深層にする ← 表現力が指数関数的に増える


発展的なニューラルネットワーク

畳み込みニューラルネットワーク、LSTMなどをここまで使ってきた記法で表現する。

(省略)

DCGANによる画像生成で学習が進むまでチェッカーボード模様が見えることの解説。


サンプリングの必要性と原理

・大数の法則が使えること

・中心極限定理により、サンプル数が増えた時にサンプル平均が目的の期待値にどのように近づくのかわかる

・一様乱数からある確率分布を持つ変数をサンプリングする方法としては逆関数法がある。例えば二次元ガウス分布からのサンプリングとしてボックス・ミュラー法など

・逆関数がわからないときは逆関数法が使えない→棄却サンプリング法を使う

・棄却サンプリングが効率よくできない場合(次元の呪いなど)マルコフ連鎖を使う


遷移行列:「次の日の天気の確率分布」を「前日の確率分布」から与えられる場合の

T_G = 0.75 0.25

          0.25 0.75

としたとき(前日と同じ天気になる確率が75%)に例えば初期値

P_0 = 1

          0

という雨から始めたとして、

P_1 = 0.75

          0.25


P_2 = 0.625

          0.375

n→∞では

P_∞ = 1/2

          1/2

となる。ところでT_Gの行列の最大固有値は 1 だが、その固有値に対応する固有ベクトルは

v_G = 1/2

          1/2

となる。P_∞とv_Gが一致するのは、ペロン・フロべニウスの定理の特別な一例。
(各要素が実数で規約、固有値が非負であるとき、またA^nの各成分が0より大きい行列 Aに成り立つ定理。確率遷移行列には大体当てはまりそう)

遷移確率ベクトルが収束していること = 定常状態の各状態間の出入りが釣り合っていること = マスター方程式。その解の一つ: P(s_i|s_j)P_eq(s_j) = P(s_j|s_i)P_eq(s_i) を詳細釣り合いの原理という。

詳細釣り合いを満たすサンプリング法

メトロポリス法


平衡分布としてs_iはある状態で、 H[s_i] は系のハミルトニアンとして

 P_eq(s_i) = 1/Z_β・exp (- β・H[s_i]) 

を考えて、H[s_i] < H[s_j] とする。s_i は低エネルギーなのでs_j より高確率で実現するとする。

P(s_i|s_j) = 1

そうすると詳細釣り合いの原理から、反対方向の遷移確率P(s_j|s_i)が決まる。

1/Z_β・exp (- β・H[s_j]) = P(s_j|s_i)1/Z_β・exp (- β・H[s_i])

P(s_j|s_i) = exp ( - β{ H[s_j] - H[s_i] })

ここで、遷移確率がエネルギー変化のみに依存しているので、遷移行列全体を知らなくてもその場でエネルギーを計算できれば、遷移確率がわかることになっているのがポイント。

この方法をメトロポリス法という。

1. まず適当な状態 s_0 を用意

2.s_i の時のハミルトニアン H[s_i]を計算

3.何らかの手法で s_i を s_候補 に変更

4.変更した後の s_候補 のハミルトニアンH[s_候補]を計算

5.もしH[s_候補]がH[s_i]より小さければ、s_i+1 = s_候補 とする。またそうでない場合、

 exp ( - β{ H[s_j] - H[s_i] }) が一様乱数 r (0 < r < 1)より小さければ s_候補 をアクセプトする。もしアクセプトされない場合はリジェクトとなり s_i+1 = s_i とする。