Boltzmann Generatorsの論文についての解説,というかざっくりしたメモ.機械学習とかニューラルネットワークとかは完全にエアプなんで間違ってたらゴメンね.RealNVPとかGANの話知ってると楽かも.
Boltzmann分布と正規分布を対応させる写像を,機械学習で作る.ただし,Boltzmann分布での低エネルギー状態が正規分布で原点にあるとする.
例えばタンパク質がopenとcloseの2形態を取ったとする.Boltzmann分布からサンプリングしようとすれば,普通はある安定な状態(今回はopenとする)から始める.openの状態から,タンパク質の側鎖の角度や長さなどに微妙な摂動を加えていって,エネルギーが低下するようなものをどんどん選んでいく.この時,openとcloseの間に準安定な領域が存在すれば,そこから抜け出せなくなって,サンプリングが詰む.
そこで,Boltzmann分布と結ばれた正規分布を考える.この正規分布では,低エネルギー状態は原点付近に存在する.正規分布の方でopenの点(原点付近)からスタートして,摂動を加えてサンプリング(原点付近)する.close(原点付近)が見つかるまでサンプリングできる.
Boltzmann Generatorとは
ある系のconfigrationが$\boldsymbol{x}$で,その時のエネルギーが$U(\boldsymbol{x})$で表されるとすると,系がconfigration $\boldsymbol{x}$を取る確率はBoltzmann分布に従い,
exp(−kT0U(x))=exp(−u(x))(1)
に比例する.ただ,全ての状態を数えるのは非現実的なので,平衡状態からニューラルネットワークを使って,one-shotでサンプリングすることを目標とする.latent spaceとしては,latent variable$\boldsymbol{z}$の正規分布$p_Z(\boldsymbol{z})$を使う.与えられたBoltzmann分布に近いconfigurationの確率分布$p_X(\boldsymbol{x})$と,$p_Z(\boldsymbol{z})$と$p_X(\boldsymbol{x})$の間の全単射$F_{zx}: \boldsymbol{z}\mapsto\boldsymbol{x}$を求めることが目標となる.
実際にBoltzmann分布でのサンプルを得るには,$p_X(\boldsymbol{x})$を重みづけすることが必要である.この場合,
w(x)=pX(x)e−u(x)(2)
で重みづけすればよい.
写像の構成
configration variable $\boldsymbol{x}$とlatent variable $z$の間には,次のような関係があるとする:
zx=Fxz(x;θ)=Fzx(z;θ).(3)
もちろん, $\boldsymbol{F} _ {xz}=\boldsymbol{F} _ {zx}{}^{-1}$ .これらの変換のJacobi行列を求めれば,
Jzx(z;θ)Jxz(x;θ)=∂z∂x=(∂z1∂Fzx,…,∂zn∂Fzx)(z;θ)=∂x∂z=(∂x1∂Fxz,…,∂xn∂Fxz)(x;θ)(4)
となり,さらにJacobianを
Rxz(x;θ)Rzx(x;θ)=∣detJxz(x;θ)∣=∣detJzx(z;θ)∣(5)
とする.
写像を$\boldsymbol{x}$から$\boldsymbol{z}$への体積非保存の「流れ」として考えれば,$p_X(\boldsymbol{x})\,dx=p_Z(\boldsymbol{z})\,dz$が成立するので,
pX(x;θ)pZ(z;θ)=pZ(z)∣∣∣∣∣∂x∂z∣∣∣∣∣=pZ(Fxz(x;θ))Rxz(x;θ)=pX(x)∣∣∣∣∣∂z∂x∣∣∣∣∣=pX(Fzx(z;θ))Rzx(z;θ)(6)
となる.右辺の確率分布は$\theta$に依存しない(系がはじめから有している確率分布)が,左辺の計算結果は$\theta$に依存する(Boltzmann Generatorによって得られた確率分布).
RealNVPによるニューラルネットワーク構成
$F_{zx}$を直接求めることは困難なので,アフィンカップリングレイヤ(入出力の一部が比較的簡単な関係にある全単射)を考える.具体的には,$\boldsymbol{x}$を$(\boldsymbol{x} _ 1,\boldsymbol{x} _ 2)$,$\boldsymbol{z}$を$(\boldsymbol{z} _ 1,\boldsymbol{z} _ 2)$に分ける.これらについて,非線形変換を次のように定義する:
fxz(x1,x2):{z1=x1z2=x2⊙exp(S(x1;θ))+T(x1;θ);logRxz=i∑Si(x1;θ).(7)
さらに,アフィンカップリングレイヤの逆写像は次の様になる:
fzx(z1,z2):{x1=z1x2=(z2−T(x1;θ))⊙exp(−S(z1;θ));logRzx=−i∑Si(z1;θ).(8)
このニューラルネットワークによって,合成写像$F_{zx}$が得られる.
機械学習のtraining
Boltzmann Generatorでは,主に2つの機械学習:training by energyとtraining by exampleを使う.
training by energyの場合
- latent spaceから正規分布$p_Z(\boldsymbol{z})$に従って適当に$\boldsymbol{z}$を選ぶ
- $\boldsymbol{F} _ {zx}:\boldsymbol{z}\mapsto\boldsymbol{x}$ を使って$p_X(x)$を計算する
- 生成された確率分布$p_X(x)$と目標のBoltzmann分布$e^{-u(\boldsymbol{x})}$との差を次のロスで評価する.
JKL=Ez[u(Fzx(z))−logRzx(z)](9)
$J_\text{KL}$を小さくすることが目標となる.
training by exampleの場合
- シミュレーションや観測結果から,実際に得られた$\boldsymbol{x}$を用意する.つまり,$e^{-u(\boldsymbol{x})}$が大きい.
- $F_{xz}:\boldsymbol{x}\mapsto\boldsymbol{z}$で,これを$\boldsymbol{z}$に変換する.この$\boldsymbol{z}$が正規分布$p_Z(\boldsymbol{z})$から選ばれやすければよい.それは,次のロス
JML=Ex[21∥Fxz(x)∥2−logRxz(x)](10)
を最小化することに等しい.$J_\text{ML}$の第1項は正規分布に対応する調和振動子のエネルギーを表す.
一般の場合
一般の場合にはBoltzmann Generatorでは合計のロス
J=wMLJML+wKLJKL+wMLJML(11)
を最小とすることが目標になる.
KLロス関数
以下では,真の確率分布と学習によって得られた確率分布を区別する.すなわち,$\boldsymbol{x}$の真の確率分布$\mu_X(\boldsymbol{x})$は分配関数を$Z_X$とするBoltzmann分布である:
μX(x)=ZX1e−u(x).(12)
また,$\boldsymbol{z}$の真の確率分布$\mu_Z(\boldsymbol{z})$は正規分布である:
μZ(z)=ZZ1exp(−2σ2z2).(13)
ただし,1つの温度しか考えない場合は$\sigma=1$とする.また,
uZ(z)=−logμZ(z)=2σ21z2+C.(14)
とする.学習による$\boldsymbol{x}$,$\boldsymbol{z}$の確率分布をそれぞれ$q_X(\boldsymbol{x})$,$q_Z(\boldsymbol{z})$とする.これらについては,(6)式から,
qZ(z;θ)qX(x;θ)=μX(Fzx(z;θ))Rzx(z)=μZ(Fxz(x;θ))Rxz(x)(15)
が成り立つ.
確率分布$p$,$q$に対して,Kullback-Leibler divergenceは次の式で定義される:
KL(q∥p)=∫q(x)[logq(x)−logp(x)]dx=−Hq(x)−∫q(x)logp(x)dx.(16)
よって,$\mu_Z$と$q_Z$のKullback-Leibler divergenceは
KLθ(μZ∥qZ)=−HZ−∫μZ(z)logq(z)dz=−HZ−∫μZ(z)[logμX(Fzx(z;θ)+logRzx(z;θ))]dz=−HZ−∫μZ(z)[logZXexp(−u(Fzx(z;θ)))+logRzx(z;θ))]dz=−HZ+logZX+Ez∼μZ(Z)[u(Fzx(z;θ))−logRzx(z;θ)](17)
この第3項が,(9)式の$J_\text{KL}$である.また,
HX=−∫qX(x;θ)logqX(x;θ)dx=−∫μZ(Fxz(x;θ))Rxz(x)×log(μZ(Fxz(x;θ))Rxz(x))dx=−∫μZ(Fxz(x;θ))∣∣∣∣∣∂x∂z∣∣∣∣∣×log(μZ(Fxz(x;θ))Rxz(x))dx=−∫μZ(z)log(μZ(z)Rzx−1(z))dz=−∫μZ(z)logμZ(z)dz+Ez∼μZ(z)(18)
なので,
KLθ(μZ∥qZ)=−HZ+logZX+Ez∼μZ(Z)[u(Fzx(z;θ))−logRzx(z;θ)]=−HX+logZX+Ez∼μZ(z)[u(Fzx(z;θ))]=−HX+logZX+Ex∼μX(x)[u(x)].(19)
同様に,
KLθ(qX∥μX)=−HX−∫qX(x;θ)logμX(x)dx=−HX−∫μZ(Fxz(x;θ))Rxz(x)logμX(x)dx=−HX+logZX+Ez∼μZ(z)[u(Fzx(z;θ))]=−HX+logZX+Ex∼μX(x)[u(x)].(20)
以上から,
KLθ(μZ∥qZ)=KLθ(qX∥μX).(21)
さらに,$U=E_{\boldsymbol{x}\sim\mu_X(\boldsymbol{x})}[u(\boldsymbol{x})]$として,
JKL=U−HX+HZ(22)
が得られる.この式を参考にすれば,(9)式で定義した$J_\text{KL}$の表式において,第1項は系の内部エネルギーを,第2項は自由エネルギーに対するエントロピーの寄与を表すことが分かる.
(2)式でも述べたように,重み付けは,
w(x)=qX(x)μX(x)=μZ(z)qZ(z)=μZ(z)Rxz(x)ZXexp(−u(x))∝exp(−u(Fzx(x;θ))+uZ(z)+logRzx(z))(23)
となる.これによって,平衡状態でのある量$A(\boldsymbol{x})$の期待値は
E(A)≈∑i=1Nw(w)∑i=1Nw(xA(x))(24)
で与えられる.さらに,
minKLθ(μZ∥qZ)=minEz∼μZ(Z)[u(Fzx(z;θ))−logRzx(z;θ)]=minEz∼μZ(Z)[u(Fzx(x;θ))−uZ(z)−logRzx(z)]=minEz∼μZ(Z)[logμZ(z)−logqZ(z;θ)]=maxEz∼μZ(Z)[logw(x)].(25)
MLロス関数
$\text{KL} _ \theta(\mu_Z | q_Z)=\text{KL} _ \theta(q_X| \mu_X)$であったが,次のKLロスを考える:
KLθ(μX∥qX)=−HX−∫μX(x)logqX(x;θ)dx=−HX−∫μX(x)[logμZ(Fxz(x;θ))+logRxz(x)]dx=−HX+logZZ+Ex∼μX(x)[2σ21∥Fxz(x;θ)∥2−logRxz(x)].(26)
training by exampleを実行する場合,そのexampleが$\mu_X(\boldsymbol{x})$に従ったものかは分からないので,このロスを評価することは困難である.
代わりに,サンプルの分布$\rho(\boldsymbol{x})$を使って,
JML=−Ex∼ρ[logqX(x;θ)]=Ex∼ρ(x)[2σ21∥Fxz(x;θ)∥2−logRxz(x)](27)
を考える.これを最小にすることは,サンプル$\rho(\boldsymbol{x})$が正規分布で選ばれる確率が最大になることに対応する.通常は$\sigma=1$なので,(10)式が得られる.
RCロス関数
configration spaceで定義されたreaction cordinate $r(\boldsymbol{x})$を使う場合は,次のRCロス関数を考える:
JRC=∫p(r(x))logp(r(x))dr(x)=Ex∼qX(x)logp(r(x)).(28)
$p(r(\boldsymbol{x}))$は,上限と下限でのカーネル密度推定として計算される.
複数の温度を扱う場合
基準の温度の$\tau_k$倍の温度について計算する場合,$u(\boldsymbol{x})$は$1/\tau_k$倍,$\sigma^2$は$\tau_k$倍とする.