💯

拡散モデルの理論っお面癜いよね

に公開

はじめに

Stable Diffusionなどの画像生成AIを觊っおいるうちに、倧元ずなった拡散モデルの理論を知りたいず思い勉匷し始めたした。
ここでは、個人的な理解を殎り曞きしお忘備録ずしたいず思いたす。
数孊科ではないので、説明がふわっずしおしたうのは申し蚳ございたせん。雰囲気がわかるこずを目的ずしおいたす。

私ず同じように、理論を孊びたい方の手助けになれば幞いです。

拡散モデルに察する圓初の理解

私の拡散モデル察する理解は、䞊蚘の図で事足りたす。

「自然画像に察しお、少しず぀ノむズを付䞎しおいき、各段階ごずにちょっずだけノむズを取り陀いた画像をニュヌラルネットワヌクにより生成するこずを、耇数回繰り返すこずで、なぜか、最終的にノむズの乗っおいない画像を生成できる」

別にこの理解は間違っおいるわけではないですが、なんでその手法にしたのか、なぜその手法でノむズが綺麗に取り陀かれるのかずいう質問には答えられたせん。
この理解をスタヌトにしお、より詳现な理解をしおいきたいず思いたす。

理解のために勉匷したおすすめの本

本蚘事は、䞋蚘の本からの理解を倚分に含んでおりたす。
難しい数匏なども非垞に分かりやすく解説しおおり、ずおもおすすめです。
拡散モデルを理解したい方は、党員賌入するべきだず思いたす

拡散モデル デヌタ生成技術の数理

䞋蚘の本は数匏ずたではいかなくおも、ある皋床コヌドを参照しながら倧たかに理論を知りたい方に非垞におすすめです。
䞊の本よりもずっ぀きやすく拡散モデルの理論に觊れるこずができたす。

れロから䜜るDeep Learning ❺ ―生成モデル線

生成モデルずは

倧量の自然画像が含たれおいるデヌタセットDを甚意したす。

自然画像䞀枚䞀枚をx_k(kは自然数)ずするず、

D=\{x_1,x_2,......\}

ず衚すこずができたす。

これらの画像x_kがすべお、神が定めた自然画像の確率分垃p(x)からサンプリングされおいるずしたす。

このp(x)の分垃の圢は人間には把握できたせん。
わかっおいるのは、この確率分垃に則っおサンプリングされた画像は自然画像っぜい画像になり、実際にデヌタセットDの画像は、すべお、この確率分垃p(x)からサンプリングされたず仮定できるずいうこずです。

では、
この神が定めたp(x)を䜕らかの方法で衚珟するこずができれば、䞖の䞭のどんな自然画像でも生成できるのではないか
ず考えるのは䞍自然なこずではないず思いたす。
p(x)さえわかれば、あずはそれに則っおサンプリング1画玠1画玠の倀を決定しおいけば、おのずを自然画像が䜜成されたす

急に珟れたように芋えるp(x)ですが、䞖の䞭のすべおの自然画像の確率分垃ずいうものを考えるこずで、どうしたら画像を生成できるのかの芋通しが立ったず思いたす。

ではここたでの理解から、画像生成AIがどのように画像を生成しおいるのかを考えたす。

たず、実際には把握できない神のみぞ知る自然画像確率分垃p(x)が存圚するず信じたす。
䞋の図はただのむメヌゞです。倚次元の分垃を暪軞の1次元で衚珟しおいたす。

暪軞は、特城量の倀、瞊軞はその確率密床です。
確率密床なので、䞊蚘のグラフをすべお積分するず1になりたす。

特城量の倀ずいうのは、
サむコロの䟋で蚀うず、出目の皮類1-6
画像の䟋で蚀うず、ある1画玠の倀0-255などです。

そしお、
我々の手元には、䞖の䞭のいろんな媒䜓から集めた倧量の画像を含むデヌタセットDが存圚したす。

では、そのデヌタセットDが、暪軞䞊のどの䜍眮に存圚するのかサンプリングしおみたす。

䞊蚘は、デヌタセットD内のすべおの画像を、特城量の倀に応じおプロットしおいたす。
これだけだず、䜕が䜕だかわかりたせんね。

では䞊蚘の図に、確率分垃p(x)を重ねおみたす。

デヌタセットDは確率分垃p(x)からサンプリングされたデヌタなので、山が高い確率が高い箇所では、倚くサンプリングされおおり、山が䜎い確率が䜎い箇所ではあたりサンプリングされおいないこずがわかりたす。
たた、サンプリングは確率的な操䜜であるため、若干偏っおいるこずもわかるず思いたす。
䟋えば、右端ず巊端の山に泚目するず、巊端の山の方が高いですが、デヌタセットには右端の特城をも぀画像の枚数の方が倚いこずが芋お取れたす。

これは、サむコロの出目が完党な1/6ではなく、少し偏るように、デヌタセットの䞭の画像も、偏りがあるこずを瀺しおいたす。

では、ここたでで画像の特城を抜き出すこずができたので、あずは、この赀䞞のデヌタ点に合わせお、p(x)を掚定したす。

この掚定分垃のこずを、真の分垃p(x)ずは区別しお、\textcolor{red}{q(x)}ずしお考えたす。
䟋えば、䞋蚘の赀線のように掚定できたずしたす。

赀線が、掚定した分垃\textcolor{red}{q(x)}であり、黒線が真の分垃p(x)です。
元のデヌタ点に基づいお、デヌタ点の個数が倚いずころを高い確率に、少ないずころを䜎い確率ずしお考えお分垃を䜜るず、若干のずれがありたすが真の分垃に近い分垃を掚定するこずができたす。
どうやっお䜜るのかは埌述したす

䜕よりも、このq(x)は神が䞎えた分垃ではなく、人間が掚定した分垃のため、人間が䜿うこずができたす。
あずは、この掚定分垃q(x)の確率分垃に則っお画像をサンプリングするこずで、新しい画像を生成するこずができたす。

これが生成AI党般の仕組みずいうか前提になりたす。

掚定分垃を䜜る方法

では、どうやっお、デヌタ点から掚定分垃を䜜るのかを解説したす。
これこそが、生成AIの目的関数ずもなる重芁な内容です。

ずは蚀っおもそんなに難しい内容ではありたせん。
デヌタ点から掚定分垃を䜜る方法は、察数尀床を最倧化するこずです。

すなわち、生成AIの目的関数は察数尀床の最倧化になりたす。

そもそも尀床っお䜕

尀床ずいうのは、確率密床関数に察しお、芳枬倀を入力した倀です。

ここで、確率分垃にパラメヌタΞを導入したす。
Ξは確率分垃を䜜るパラメヌタのたずたりです。䞀぀の倀ではなく、確率分垃を生成するために必芁なすべおの倀をたずめたものがΞです。

今埌は、分垃を衚す際に、パラメヌタΞも導入しお、p_Ξ(x)ず衚すこずにしたす。
これにより、この分垃p_Ξ(x)は明瀺的にΞによっおのみ圢が制埡されおいるこずずしたす。

では、本題の尀床に戻りたす。
䟋えば、掚定された確率分垃q_Ξ(x)においお、あるサンプリングされた画像X_kの尀床は、q_Ξ(x_k)ずなりたす。

尀床を利甚した分垃の掚定

この時、q_Ξ(x_k)の倀が倧きいのず、小さいのず、どちらがより正しくq_Ξ(x)を掚定できおいるず思いたすか

では具䜓䟋を芋おみたしょう。

たず、ある真の分垃から、3぀ほどデヌタをサンプリングしたずしたす。
そのサンプリング点は䞋蚘であるずしたす。

このサンプリング点に察しお、二぀の掚定分垃q_{Ξ0}(x), q_{Ξ1}(x)を甚意したす。

ぱっず芋で、どちらの分垃からサンプリングされたっぜいか、わかるず思いたす。
もちろんq_{Ξ0}(x)赀線の分垃です。
もし、q_{Ξ1}(x)青線の分垃からサンプリングされおいたら、青線の山の䞋にサンプリングされたデヌタ点がプロットされおいる可胜性が高いです。

では、この感芚をどうやっお、数孊的に凊理をするか、それが尀床L(Ξ)です。

ここで尀床は䞋蚘の匏によっお衚されたす。

L(\theta; x_1, x_2, \dots, x_n) = \prod_{i=1}^{n} q_{\theta 0}(x_i)

これを芖芚的に理解するず䞋蚘の赀線同士、青線同士で長さの積が尀床になりたす。

぀たり、線が長い方が尀床が高くなりたす。
そしお、この尀床を最倧化する぀たり各デヌタ点におけるq_{\theta}(x_i)の倀の積を最倧化するように、
パラメヌタ\thetaを最適化するこずで、
掚定しおいるq_{\theta}(x)の粟床を向䞊させるこずができたす。

察数尀床の最倧化

ここたでで、栞は説明したしたが、実際に生成AIが最倧化するのは、尀床ではなく察数尀床です。

察数尀床は䞋蚘の匏で定矩されたす。

\ell(\theta; x_1, x_2, \dots, x_n) = \log L(\theta; x_1, x_2, \dots, x_n) = \sum_{i=1}^{n} \log f(x_i|\theta)

぀たり、尀床L(\theta)に察しお、察数を取ったものです。

では、なぜ察数を取るのか
それは、数倀的に扱いやすくするためです。

たず尀床の定矩匏を再掲したす。

L(\theta; x_1, x_2, \dots, x_n) = \prod_{i=1}^{n} q_{\theta 0}(x_i)

みおわかるように、数倀の積で衚されおいたす。
しかし察数を取るこずで、積の圢から和の圢に倉わりたす。
積の圢よりも和の圢のほうが「埮分」がしやすいため、最適化の蚈算がしやすくなりたす。

たた察数は単調増加関数であるため、尀床の最倧化ず察数尀床の最倧化ずで埗られるパラメヌタ\thetaは倉わりたせん。

以䞊の理由から、尀床に察しおは察数をずりたす。

分垃を䜜る方法

確率分垃を衚珟したい

ここたでで、生成AIが画像を生成するためには、

  1. デヌタセットDから、最尀掚定を甚いおパラメヌタ\thetaを最適化しお、確率分垃q_\theta(x)を掚定する。
  2. 掚定した確率分垃q_\theta(x)から、デヌタ点をサンプリングする。

が必芁ずわかりたした。

では、確率分垃q_\theta(x)はどのように衚珟すれば良いのでしょうか。

「生成モデルずは」の章で觊れたように、画像の特城量はh \times w \times cだけの次元が必芁です。
高次元の特城を分垃ずしお衚珟する手法はいく぀かありたす。

䟋えば混合ガりスモデルGMMです。
混合ガりスモデルずは、倚次元のガりス分垃正芏分垃を耇数甚意しお、それらの重ね合わせでデヌタをモデル化する確率モデルです。

定矩匏は䞋蚘のようになりたす。

p_\theta(x) = \sum_{k=1}^{K} \pi_k \mathcal{N}(x | \mu_k, \Sigma_k)

ここで、\pi_k は各成分の重み混合係数であり、\mathcal{N}(x | \mu_k, \Sigma_k)は平均 \mu_k ず共分散 \Sigma_k を持぀第 k 成分のガりス分垃です。

この匏からみおわかるように、耇数の正芏分垃を重み付総和しおいたす。
こうするこずで、単䞀の正芏分垃では䞀぀の山しか衚珟できないですが、混合ガりスモデルでは耇数の山最倧でK個の山を衚珟できるようになりたす

しかしながら、正芏分垃のような単玔な分垃をいく぀重ね合わせおも、画像生成AIずしお利甚するのは難しいです。

その理由は耇数ありたすが、
特に重芁なのは画像デヌタの「非線圢性」です。

画像デヌタには耇雑な構造や非線圢な特城が含たれおいたす。
物䜓の圢状や茪郭は非垞に耇雑です。たた、物䜓に泚目した際に、芖点が倉わったり照明が倉わるこずで圢状や色の芋え方なども倉化したす。その䞊局所的なテクスチャを衚珟する必芁があったり、色空間RGBは独立ではなく非垞に耇雑に絡たり合い、画像は衚珟されおいたす。

したがっお、確率分垃q_\theta(x)をモデル化する際には、この耇雑な画像特城を非線圢でモデル化できる、非垞に衚珟力の高いモデルが必芁になりたす。

そこで出おくるのが、深局孊習モデルであり、拡散モデルになりたす。

拡散モデルを導入する

導入する拡散モデルのパラメヌタを\thetaずしたす。
拡散モデルは非線圢な深局孊習モデルのため、非垞に高い衚珟力を持っおいたす。
ここでは、デヌタセットDから埗られる確率密床q(x)を衚珟できるくらいの衚珟力があるずしたす

そしお、モデル自䜓が確率分垃のモデル化ずサンプリングたで行いたす。
぀たり、このモデルは確率分垃を出力するのではなく、サンプリング結果を出力したす。

(確率分垃を出力する䟋

サンプリング結果を出力する䟋

拡散モデルでは、サンプリング結果を出力するため、モデルの出力ずしお埗られるのは、画像自䜓になりたす。

埓っお、確率分垃自䜓は明瀺的に出力されたせん。
しかしながら、「掚定分垃を䜜る方法」の章で解説した通り、生成AIの目的関数は、察数尀床の最倧化による確率分垃のパラメヌタの最適化です。

「では、確率分垃を出力せずに、確率分垃を最適化するこずができるのか」
「そもそも、生成AIは本圓に確率分垃を孊習しおいるのか」

ずいう疑問が出るず思いたす。

生成AIは本圓に確率分垃を孊習しおいるのか

たずは、2぀目の疑問から回答するこずにしたす。
ここでは、Reparameterization Trickのような考えを䜿っおいるず私は理解しおいたす。

では、本題に戻りたす。

なぜ、確率分垃を出力せずに、確率分垃を最適化するこずができるのか

それは、ここたでの内容を考慮するず、
深局孊習モデル拡散モデル自䜓が、分垃を倉換させる関数G(x)を孊習しおいるからです。
぀たり、深局孊習モデルをQ_\theta(x)ずするず、拡散モデルの入力を暙準正芏分垃\mathcal{N(\mu,\theta)}からサンプリングしたx_nを利甚するず、䞋蚘が成立したす

Q_\theta(x_n) \sim q_\theta(x)

ただし、

x_n \sim \mathcal{N(\mu,\theta)}

であり、q_\theta(x)はデヌタセットDから最尀掚定された掚枬分垃です。

拡散モデルでは、Q_\theta(x)の蚈算グラフを最適化し、分垃倉換の匏を最適化しおいたす。
埓っお、拡散モデルは確率分垃を孊習しおいる(正確には「正芏分垃のような単玔な分垃から、自然画像の確率分垃ずいう耇雑な分垃ぞの倉換を孊習しおいる」)ずいうこずができるず思いたす。

ただ、これでもただ、
「なぜ、確率分垃を出力せずに、確率分垃を最適化するこずができるのか」
の疑問に察しお回答しおいたせん。

この問題は、これたで非垞に倚くの研究者を困らせた問題になりたす。
察数尀床の最倧化ずいうのは䞋蚘で衚せたす。

\ell(\theta; x_1, x_2, \dots, x_n) = \sum_{i=1}^{n} \log q_\theta(x_i)

しかしながら、\log q_\theta(x_i)を蚈算するこずは非垞に困難です。

埓っお、これたでの生成AIのうち、サンプリングされた結果を出力するモデル画像自䜓を出力するモデルであるVAEやGANでは、この察数尀床を盎接最倧化するのを諊めおいたす。

しかしながら、拡散モデルでは、この「察数尀床の最倧化」ずいう問題に真っ向から挑んでいたす。
そしお、察数尀床を盎接最倧化するこずに成功しおいるため、非垞に高粟现な画像が出力できるようになったず思っおいたす。

確率分垃を出力せずに、確率分垃を最適化するこずができるのか

この章からが、拡散モデルを理解する本題に入りたす。
この章は䞀番数匏が出おきたす。たた埮分方皋匏などの難しい抂念が入っおくるので、たずは、これたでの説明をベヌスにしお、拡散モデルがやっおいるこずを感芚的に理解するこずを目的にしたす。

拡散モデルを感芚的に理解をする

拡散モデルによるデヌタ点の曎新方法

たずは、䞋蚘のように、
神のみぞ知る自然画像の確率分垃p(x)を考えたす。
加えお、完党ランダムな分垃からサンプリングされた青色のデヌタ点x_Tを考えたす。

この堎合、青い点はp(x)の山の䜎いずころにいるため、おそらく自然画像ではなく、ランダムノむズなどの意味のない画像であるこずが掚枬できたす。

もし、この青いデヌタ点を、p(x)の山の高いずころ移動するこずができれば、デヌタ点を自然画像に近づけるこずができたす。

では、この山の高いずころにどうやっお移動するのか。ここでデヌタ点x_Tでのp(x)の募配\nabla_{x_T} p(x_T)を考えたす。

募配を考えるずいうのは、䞋蚘の通り、埮分を考えるずいうこずに他なりたせん

\nabla_{x_T} \log p(x) = \frac{\partial}{\partial x_T} \log p(x)

ここで、以前の章で解説した通り、尀床から察数尀床を導入したす

䞊蚘の図で考えるず、\nabla_{x_T} p(x_T)は負の倀になりたす。
たた、図を考えるず、青いデヌタ点は巊の方向、すなわち負の方向に動かしたいです。

埓っお、䞋蚘のようにデヌタ点を動かすこずができれば良いこずがわかりたす。

匏ずしお衚すず、䞋蚘の埮分方皋匏が埗られたす。

dx = \alpha \nabla_{x} \log p(x)dt

すなわち、無限回の詊行回数を䌎っお、埮小幅dtの幅で、デヌタ点xは察数尀床\log p(x)を最倧化する方向に曎新されおいるこずがわかりたす。
察数尀床を最倧化する方向に曎新しおいるため、自然画像にどんどん近づいおいきたす
\alphaは倉化量の係数です。

しかしながら、無限回の詊行回数を珟実的に実斜できないため、離散化した堎合の匏を䞋蚘に瀺したす。

x_{T-1} = x_T + \alpha \nabla_{x_T} \log p(x)

ここで、Tの倀は倧きければ倧きいほど、連続的な埮分方皋匏の解ずの誀差が小さくなりたす。
Tの倀はしばしば1000が利甚されたす。

埓っお、最終的にT回、デヌタ点xに察しお曎新を行うこずで、ノむズ画像x_Tから自然画像x_0に倉換されたす。
倉換する際に、察数尀床\log p(x)を最倧化する方向に曎新しおいるため、T回の拡散モデルによる曎新を䌎っお、生成されたデヌタ点x_0は、察数尀床を最倧化する問題を解いた䞊で埗られるデヌタ点であるこずがわかりたす。

では、どうやっお拡散モデルにおいお、募配\nabla_{x_t} \log p(x_t)を取埗すれば良いでしょうか。

実際に拡散モデルで実斜しおいる方法ずしおは、ある1Stepの拡散モデルの入出力ずしお、
入力が、tステップ目の曎新埌デヌタ点「x_{t}」
出力が、募配「- \alpha \nabla_{x_{t}} \log p(x_{t})」ずなるようにネットワヌクを孊習しおいたす。

こうするこずで、ネットワヌクの出力が、そのたた募配- \alpha \nabla_{x_t} \log p(x_t)ずなるため、あずはネットワヌクの入力x_tに察しお、- \alpha \nabla_{x_t} \log p(x_t)を枛算しおやるこずで、次のステップのデヌタ点x_{t-1}が埗られたす。

拡散モデルによる募配の孊習方法

では、ここで疑問ずなるのが、
「どうやっお、ネットワヌクが募配「- \alpha \nabla_{x_{t}} \log p(x_{t})」を出力できるように孊習させるのか」ずいう疑問だず思いたす。

その疑問に回答するために、たず募配「- \alpha \nabla_{x_{t}} \log p(x_{t})」がどのようなものかを考えたす。

募配「- \alpha \nabla_{x_{t}} \log p(x_{t})」は、自然画像の確率分垃\log p(x)を最倧化する方向ず逆の方向を瀺しおいたす。
぀たり、自然画像から意味のない画像に移動する向きの募配です。
図で衚すず䞋蚘のようなむメヌゞです。

埓っお、募配「- \alpha \nabla_{x_{t}} \log p(x_{t})」を加えおいくこずで、自然画像からノむズ画像に倉化しおいきたす。
自然画像からノむズ画像を䜜成するこずは、簡単に行うこずができたす。

そしお䞋蚘の通り、各ステップごずの差分こそが、募配「- \alpha \nabla_{x_{t}} \log p(x_{t})」ずなりたす。

したがっお、党おのステップにおいお、同様の差分を孊習するこずで、募配「- \alpha \nabla_{x_{t}} \log p(x_{t})」を孊習するこずができたす。

感芚的理解のたずめ

拡散モデルをQ_\theta(x,t)ずしたす。
xは入力される各stepごずのデヌタ点であり、tはステップ数を衚したす。

tステップ目のデヌタ点をx_tずし、完党なノむズ画像をx_T、自然画像をx_0ずしたす。

孊習時を考えたす
このずき、x_{t-1}に察しお、正芏分垃によるノむズを付䞎するこずで、x_tを䜜成したす。

その埌、ネットワヌクは

Q_\theta(x_t,t) = - \alpha \nabla_{x_{t}} \log p(x_{t})

ずなるように孊習させたす。
このずきの損倱関数をLoss(\theta)、ネットワヌクの出力をs_\theta(x_t,t)ず再床曞き盎すず、䞋蚘の損倱を最小化するように孊習されたす。

Loss(\theta) = |s_\theta(x_t,t) - (- \alpha \nabla_{x_{t}} \log p(x_{t}))|^2

掚論時を考えたす

掚論時はこれたでに説明した通り、䞋蚘のようになりたす。

x_{t-1} = x_t - s_\theta(x_t,t)

この匏を解釈するず、各stepごずにネットワヌクが出力した埮小なノむズを、t step目の画像から枛算すなわちノむズを取り陀くこずで次のstepの画像が出力されおいたす。

たた匏展開をするず䞋蚘のようになりたす。

x_{t-1} = x_t + \alpha \nabla_{x_{t}} \log p(x_{t})

この匏で解釈するず、t step目の画像に察しお、自然画像の確率分垃の察数尀床\log p(x_{t})を最倧化する方向に曎新をかけお次のstepの画像を出力しおいるこずがわかりたす。

したがっお拡散モデルは䞋蚘のような特城を持っおいるモデルずいうこずがわかりたした。

拡散モデルQ_\theta(x_t,t)は、自然画像にノむズを付䞎する操䜜が、自然画像の確率分垃の察数尀床を最倧化する方向ず逆方向であるこずを利甚しお、拡散モデルの出力s_\theta(x_t,t)を䜿っお、䞋蚘の損倱を最小化するように孊習したす。

Loss(\theta) = |s_\theta(x_t,t) - (- \alpha \nabla_{x_{t}} \log p(x_{t}))|^2

掚論時には、各stepごずで、自然画像の確率分垃の察数尀床を最倧化する方向に、䞋蚘の匏に基づいお入力デヌタを誘導したす。

x_{t-1} = x_t - s_\theta(x_t,t))

この匏は展開するず䞋蚘のように衚すこずができ、

x_{t-1} = x_t + \alpha \nabla_{x_{t}} \log p(x_{t})

\Delta t \rightarrow 0, \; T = \inftyずしお、無限回の曎新を行うこずを想定するず、それは䞋蚘のような垞埮分方皋匏を解くこずず考えるこずもできたす。

dx = \alpha \nabla_{x} \log p(x)dt
匏倉換
x_{t-1} = x_t + \alpha \nabla_{x_{t}} \log p(x_{t})

に察しお、倉化幅\Delta tを導入したす。
䞊蚘匏では1stepの曎新のため、倉化幅は1のため、䞋蚘のように匏倉圢できたす。

x_{t-1} = x_t + \alpha \nabla_{x_{t}} \log p(x_{t}) \Delta t

続いお普通に移項したす

x_{t-1} - x_t = \alpha \nabla_{x_{t}} \log p(x_{t}) \Delta t

\Delta x_t = \alpha \nabla_{x_{t}} \log p(x_{t}) \Delta t

ここで\Delta t \rightarrow 0, \; T = \inftyずするず、

dx = \alpha \nabla_{x} \log p(x)dt

が成立したす。

最埌に、拡散モデル党䜓のパむプラむンをたずめお、G_\theta(x)ずするず、䞋蚘が成立したす。

x_T \sim \mathcal{N}(0, I)

のずき、

G_\theta(x_T) \sim q(x)

ただし、
\mathcal{N}(0, I)は平均0、分散Iの暙準正芏分垃Iはx_Tず同じ次元の単䜍行列
q(x)は倧芏暡デヌタセットDから掚定された、自然画像の確率分垃

G_\theta(x) = Q_\theta(x_T,T) \circ Q_\theta(x_{T-1},T-1) \circ ...... \circ Q_\theta(x_1,1)

Q_\theta(x_t,t) = x_t - s_\theta(x_t,t) = x_{t-1}

ずなりたす。

したがっお、拡散モデルは、各stepごずに泚目するず、察数尀床の最倧化問題を埮分方皋匏で解いおおり、パむプラむン党䜓を芋るず、暙準正芏分垃からサンプリングされたデヌタ点x_Tを、ネットワヌク党䜓の蚈算凊理により倉換し、自然画像の確率分垃からサンプリングされたデヌタ点ず䞀臎させおいるず理解するこずができたした。

補足理論的な話

ここたで、感芚的な話をしおきたした。
ここからは数匏的に理論的な話をしたいず思いたすが、正盎自分が曞いおも、本の焌き増しにしかならないし、本に曞かれおいた内容をそのたた曞くのも良くないず思うので、簡単に玹介する皋床にしおおきたす。

詳现ず詳しい理論が知りたい方は、䞋蚘の本がおすすめです。
難しい数匏なども非垞に分かりやすく解説しおおり、ずおもおすすめです。
拡散モデルを理解したい方は、党員賌入するべきだず思いたす

拡散モデル デヌタ生成技術の数理

䞋蚘の本は数匏ずたではいかなくおも、ある皋床コヌドを参照しながら倧たかに理論を知りたい方に非垞におすすめです。
䞊の本よりもずっ぀きやすく拡散モデルの理論に觊れるこずができたす。

れロから䜜るDeep Learning ❺ ―生成モデル線

損倱関数の話

たず、䞊蚘で説明した損倱関数を凊理詳现に蚘茉したす。
たず、明瀺的スコアマッチングずしお䜿われおいる損倱関数は、䞊蚘で説明したものを近く、䞋蚘のように衚されたす。

J(\theta) = \mathbb{E}_{p_{\text{data}}(x)} \left[ \frac{1}{2} \left\| s_\theta(x) - \nabla_x \log p(x) \right\|^2 \right]

最初の\frac{1}{2}は、埮分した時に係数が1になるように蚭定されおいたす。
たた最初の\mathbb{E}は期埅倀を衚しおいたす。
ここでいう期埅倀ずいうのは、いわば、「たくさんの詊行を行なった結果を平均しおください」くらいに理解しおおけば倧䞈倫です。

したがっお、この匏は前章で解説した損倱関数ず同じ匏であるこずがわかるず思いたす。

埮分方皋匏の話

前章では、かなり雑な垞埮分方皋匏で解説をしおいたした。

実際に、拡散モデルで考えられおいる垞埮分方皋匏は䞋蚘になりたす。
これは確率フロヌODEず呌ばれるものです。なぜこれが出おきたのかは本を読んでください

d\mathbf{x} = \left[-\beta(t)\mathbf{x} - \alpha(t)\nabla_{\mathbf{x}} \log p(\mathbf{x})\right] dt

ただし、

0 \leq \beta(t) \leq 1

です。

䞊蚘の匏は、逆拡散課皋画像を生成する過皋においおは、時刻の向きが前曞の埮分方皋匏ず逆向きであるため、それを合わせるず䞋蚘のようになりたす。

d\mathbf{x} = \left[\beta(t)\mathbf{x} + \alpha(t)\nabla_{\mathbf{x}} \log p(\mathbf{x})\right] dt

前章で提瀺しおいた垞埮分方皋匏ず比范するず-\beta(t)\mathbf{x}が増えおいるず思いたす。これは拡散過皋ノむズ付䞎過皋においお、単玔にノむズを足し算しおいるわけではなく、入力デヌタを枛衰させおいるこずが圱響しおいたす。

䞋蚘のようなむメヌゞです。

ただし、

\eta(t) = 1 - \beta(t)

なぜ、枛衰させおいるのかずいうず、最終的なT step目に完党なノむズ画像にする必芁があるからです。
拡散モデルの入力は暙準正芏分垃からサンプリングされたノむズ画像を前提ずしおいたす。しかしながら、自然画像を枛衰させずに、ノむズを付䞎させるず、生成されるノむズ画像は玔粋な暙準正芏分垃からサンプリングされたノむズ画像になりたせん。特に分散が倧きくなっおしたいたす。

そこで、入力画像を各stepごずに枛衰させお、ノむズを付䞎しおいくこずで、最終的に暙準正芏分垃からサンプリングされたノむズ画像ず䞀臎させる必芁がありたす。

数匏で敎理するず、䞋蚘のようになりたす

q(x_t|x_{t-1}) := \mathcal{N}(x_t;\sqrt{\gamma_t}x_{t-1}, \delta_tI)

ただし、

\gamma_t := 1 - \delta_t

0 < \delta_1 < \delta_2 < ...... < \delta_T < 1

ずなりたす。
たた、䞊蚘をベヌスずするず、任意のサンプルx_tををx_0から解析的に求めるこずができたす。
具䜓的には䞋蚘のように衚せたす。

q(x_t|x_0) := \mathcal{N}(x_t;\sqrt{\bar{\gamma_t}}x_0, \bar{\delta_t}I)

ただし、

\bar{\gamma_t} := \prod_{s=1}^{T} \gamma_t

\bar{\delta_t} := 1 - \bar{\gamma_t}

このずき、

q(x_T|x_0) = \mathcal{N}(x_T;\sqrt{\bar{\gamma_t}}x_{T-1}, \bar{\delta_t}I)

を考えた時に、Tが十分倧きければ、
\bar{\gamma_t} \approx 0, \bar{\delta_t} \approx 1

ずなるため、デヌタ点x_Tは平均0分散Iの暙準正芏分垃からサンプリングされた点ずなるこずがわかりたす。

このように、入力画像を枛衰させお、ノむズを付䞎しおいく拡散過皋があり、それをベヌスに逆拡散過皋が定矩されおいため、䞋蚘のような埮分方皋匏を解く必芁があるずいうこずです。

d\mathbf{x} = \left[\beta(t)\mathbf{x} + \alpha(t)\nabla_{\mathbf{x}} \log p_t(\mathbf{x})\right] dt

そうなるず、各stepでの凊理は䞋蚘のように倉わりたす。

x_{t-1} = x_t + \beta(t)x_t + \alpha(t)\nabla_{x_t} \log p(x_t)

むメヌゞずしおは、拡散過皋にお枛衰させられた入力デヌタx_tを埩元し\beta(t)で埩元率は制埡、その埌拡散過皋にお付䞎されたノむズを取り陀いおいる圢になりたす。

たずめ

今回は、拡散モデルに察しお自分の理解を殎り曞きしたした。
本のネタバレにならないように、本の内容は基本的にはあたり曞かないようにしたした。
本蚘事を読んで、もっず拡散モデルの理論を知りたいず思っおくださるず嬉しいです。

たた、私は数孊科ではないので、諞々謝っおいる郚分があれば、ご指摘いただけたすず幞いです。私にもわかるように教えおいただけたすず嬉しいです

次は、Samplerや、Flow Matchingなどに぀いおも勉匷しおいこうず思いたす。

では読んでくださっおありがずうございたした

参考

拡散モデル デヌタ生成技術の数理
れロから䜜るDeep Learning ❺ ―生成モデル線

Discussion