Site cover image

Site icon imageSen(Qian)’s Memo

This website is Donglin Qian (Torin Sen)’s memo, especially about machine learning papers and competitive programming.

ELBOとEM Algorithmについて

何がわかっていて何がわからない

入力xxに潜んでいる、潜在変数zzがあるとする。xxからどのようにzzができるのかを知りたい。

  • p(x)p(x) 既知。これは入力データの分布で、入力データから得られる経験分布を使う。
    • ただし、詳細なモデルは当然知らない。
  • p(z)p(z) 既知。人間がzzがどうなっているかを仮定する
    • 一般的にはp(z)N(0,1)p(z) \sim \mathcal{N}(0,1)となる。
  • p(zx)p(z|x) 未知。一番知りたいもの
    • 直接知るのは難しいので、人間がモデルやそのパラメタを定めてq(zx)q(z|x)を計算する。
  • p(xz)p(x|z) 未知。知ってると何かと役に立つもの。
    • VAEなどの生成モデルでは、潜在変数から新たな例を生成するために必要。

変分推論とEMアルゴリズムの違い

EMアルゴリズムも、変分推論も結果的にELBOを最大化したい。

しかし、そのアプローチが異なる。

  • 変分推論では、事後分布p(zx)p(z|x)モデルすらわからないので、人間があるモデルの分布q(zx)q(z|x)を選んで、それで近似する。そのうえで、ELBOの最大化をする。
    • 例えばDNNのような理論上任意の関数に近似できる学習器を使っても、変分推論のアプローチである限り変分推論。EMアルゴリズムではない。
      • だがDNNで近似できると割り切れば別にEM Algorithmをやっても構わない。
    • p(zx)p(z|x)が厳密にわからない以上、我々はそれの近似分布のq(zx)q(z|x)を動かしてELBOの最大化をするしかない。
  • EM Algorithmでは、特にp(zx)p(z|x)モデルはわかる(パラメタはわからない)条件で行う。
    • 例えば、p(zx)p(z|x)は混合ガウス分布だとわかっているとか。
    • p(zx)p(z|x)のモデルがわかっている以上、そこからp(x,z)p(x, z)のモデルも逆算できて、q(z)q(z)のみならず、パラメタを動かしてp(x,z)p(x,z)を変更させての最小化もできる。
    • なので2つのステップで交互に最小化を行うし、変分推論よりも収束も早いし、安定もする

一般的なアプローチは変分推論だが、特別な条件下で解きやすいのがEM Algorithmである。

変分推論

目標はp(zx)p(z|x)をうまく推定すること。

変分推論とは、分布p(zx)p(z|x)を推定するときに、p(zx)p(z|x)の分布の形はわからないので、別の分布q(zx)q(z|x)を(分布の形やパラメタを仮定する形で)考えて、それと与えられたデータをもとに得る、p(zx)p(z|x)から得られたとのDivergenceを最小化したいものである。

qqには、どのような分散や平均などのパラメタ、分布の概形を与えるかについては一概に言えず、うまく選ぶのが変分推定の目標

例えば、VAEなどではガウス分布であると固定して、与えたデータから平均や分散を計算してパラメタとして入れている。

ELBO

以下の式が成り立つ。

p(zx)p(z|x)は計算しづらいということで、変分推論ではq(zx)q(z|x)に置き換えている。

これはEMアルゴリズムなら、p(zx)p(z|x)のままやっている。

logp(x)=ELBO+KL(pq)ELBO=Eq(zx)[logp(x,z)logq(zx)]\log p(x) = ELBO + KL(p||q) \\ ELBO = \mathbb{E}_{q(z|x)} [\log p(x,z) - \log q(z|x)]

式のかたちは、変分推論の分布q(zx)q(z|x)に従ってサンプリングされたzzについての期待値。その中身は変な形であるが、ここではELBOが大きければ、p,qp, qのKL-Divergenceが小さくなり分布として一般的に近くなるということになる

変分推論の目標は、ELBOを最大化したい。

ELBOの最大化の手順

ELBO=Eq(zx)[logp(x,z)logq(zx)]=Eq(zx)[logp(xz)]+Eq(zx)[logp(z)logq(zx)]ELBO = \mathbb{E}_{q(z|x)} [\log p(x,z) - \log q(z|x)] \\ = \mathbb{E}_{q(z|x)} [\log p(x|z)] + \mathbb{E}_{q(z|x)} [\log p(z) - \log q(z|x)]

この2つの項に分ける。前者は尤度p(xz)p(x|z)の期待値で、これはp(zx)p(z|x)の近似分布q(zx)q(z|x)から計算する。

前者の計算

前者について、p(zx)p(z|x)q(zx)q(z|x)で代替するとしても、p(xz)=p(zx)p(x)/p(z)p(x|z) = p(z|x) p(x) / p(z)のベイズの定理を用いる必要がある。

いつも通りだが、これの外に期待値をつけるので、その積分は解析的に解けない場合も多い。

Eq(zx)[logp(xz)]=q(zx)logp(xz)dz\mathbb{E}_{q(z|x)} [\log p(x|z)] = \int q(z|x) \log p(x|z) dz

解析的に解けない場合では、サンプリングによる推定をするしかない。

変分分布q(zx)q(z|x)からサンプルziz_iを生成し、それについて、logp(xz)\log p(x|z)を評価(p(xz)p(x|z)はモデルがなんなのかを定めている以上、知っている前提)。

なお、q(zx)logp(xz)dz\int q(z|x) \log p(x|z) dzと積分する以上、実はq(zx)q(z|x)p(xz)p(x|z)が共役である必要はない(logとったものとの積なので)

一般的には、ニューラルネットワークを用いたDecoderでzzからxxを復元し、その復元結果から解析的に計算できるならそれでよし、できないならモンテカルロ法やほかの数値近似方法で計算する。

しかし、q(zx)q(z|x)もガウス分布で、p(xz)p(x|z)もガウス分布の時、当然q(zx),logp(xz)q(z|x), \log p(x|z)は共役ではない。それでも、ガウス分布の時は復元した後の平均と分散がわかれば、計算できるということ。

これは解析的に解くことができ、以下のようになる。

  • μ(x)\mu(x)は中間表現の平均
  • Σ(x)2\Sigma(x)^2は中間表現の分散。
  • f(μ(x))f(\mu(x))はEncoder, Decoderを通して得たものの平均。
  • σx2\sigma_x^2はEncoder, Decoderを通して得たものの平均。
Image in a image block
後者の計算

実をいうとよくみると、後者はKL-Divergenceそのもの

Eq(zx)[logp(z)logq(zx)]=DKL(q(zx)p(z))\mathbb{E}_{q(z|x)} [\log p(z) - \log q(z|x)] = -D_{KL}(q(z|x)||p(z))

つまり、ELBOではp(zx),q(zx)p(z|x), q(z|x)というKL-Divergenceの計算は求まらないので計算しなくていい代わりに、p(z),q(zx)p(z), q(z|x)のKL-Divergenceを求める。そして、これを最小化していきたい。

どのように最大化するのか

計算の方法がわかったところで、最大化を行う。

一般的には、VAEではEncoderはq(xz)q(x|z)であり、Decoderはp(zx)p(z|x)である。これがガウス分布という概形で、平均分散どうのこうのは人間がそうやって仮置きして解釈しているだけである。

そして、Encoder-Decoderモデルの学習では、ELBOを目的関数にしている。

ここより下はまだわかっていない!

EM Algorithm

📄Arrow icon of a page linkEM Algorithmの解説 を参考。

変分EM Algorithm

変分推論やEMアルゴリズム似てるよな、こいつらのコンボあるで。