はじめに
この記事は、Flow Matching および関連する生成モデルについて学ぶために、作成した個人的なノートの一部を整理したものです。
内容は論文や公開資料をもとに、Codexを活用しながらまとめていますが、内容や構成の確認、整理は著者自身が行っています。
現在、ネット上にある多くのFlow Matching解説が高度な数学が必要です。本記事は、入門のために理論に重きを置きません。
数学が全くいらないということではないですが、偏微分方程式とか、学習の理論について詳しくなることではなく、ざっくり理解して、コードを読める/書けるようにするという目的で作りました。
また、本資料の全文、コードはGitHubにあげています。Rectified Flowについては、本記事では扱っていませんが、全文には含まれています。
Githubに載せた全体の第0部と第1部を数回に分割して、記事にしていきます。前回の記事は以下になります。
誤りや改善点などがありましたら、コメントでご指摘いただけると幸いです。
想定読者
本資料は、Flow Matching および関連する生成モデルを学びたい方を対象としています。
特に、
- 深層学習の基礎を一通り学んだ方
- 論文を読む、PyTorchで実装を行うための足掛かりとなる解説を探している方
- 数式だけでなく、直感的な理解も得たい方
を主な対象としています。
厳密な理論よりも、「なぜその式になるのか」「どのような意味を持つのか」を重視して説明しています。
ただし、数学については以下を前提としています。
- 偏微分について、理解している
- 微分方程式が読める
- 統計記号が読める
第1部 Flow Matchingの基礎・理論・最小実装
1.2 学習と生成の全体像(再掲)
Flow Matchingの全体像を理解するために再掲した。これだけで、全体の役割分担がわかるので、まだ読んでいない人はぜひ読んでほしい。
Flow Matchingには、「矢印の地図を作る学習」と「その地図を使って新しいデータを作る生成」という二つの流れがある。この二つを分けて考えると、全体像をつかみやすい。
学習は、簡単な乱数の集まりである source分布 $p_0$ と、学びたいデータの集まりである target分布 $p_1$ から始まる。sourceからノイズ点 $x_0$、targetからデータ点 $x_1$ を取り出し、どの2点を一組にするかを coupling が決める。couplingは、出発点と目的地の組み合わせを作る「ペア係」だと考えればよい。
ペアが決まると、time sampler が練習する時刻 $t$ を選び、path(経路) がその時刻の途中地点 $x_t$ を置く。同じpathから、「その途中地点ではどちらへ進むべきか」という 教師速度 $u_t$ も得られる。pathは練習用の道を描く部品、教師速度はその道に沿った正解の矢印である。
時刻 $t$ と途中地点 $x_t$ を受け取り、矢印を予測するニューラルネットワークが velocity model(速度場モデル) $v_\theta(t,x_t)$ である。loss(損失関数) は予測矢印と教師速度のずれを採点し、optimizer はその点数が小さくなるようにモデルを調整する。この練習を繰り返して得た「矢印の地図」を、重みや設定とともに保存したものが checkpoint である。
学習:
source x0 + target x1
-> coupling: 出発点と目的地をペアにする
-> time sampler: 練習する時刻tを選ぶ
-> path: 途中地点x_tと教師速度u_tを作る
-> velocity model: v_theta(t, x_t)を予測する
-> loss: 予測と教師速度のずれを測る
-> optimizer: モデルを直す
-> checkpoint: 学習済みの矢印の地図を保存する
生成時には、学習に使ったtargetデータ、coupling、教師速度を使わない。source分布から新しいノイズ点を取り、checkpointから復元したvelocity modelへ「今の時刻と場所では、どちらへ進めばよいか」と問い合わせる。
連続した動きをコンピュータ上でたどるため、time grid が問い合わせる時刻を並べ、ODE solver がモデルの矢印を使って点を少しずつ更新する。Euler、Heun、RK4は、この「一歩の進み方」が異なるsolverである。初期ノイズの用意からsolverによる移動、生成結果の返却までをまとめた手続き全体を sampler と呼ぶ。
生成:
新しいsource noise x0
-> checkpointからvelocity modelを読み込む
-> time grid: 問い合わせる時刻を並べる
-> ODE solver: モデルに矢印を聞いて少し進む
-> sampler: この更新を繰り返して生成サンプルを返す
-> evaluation: target分布に近いかを評価する
モデルへ矢印を問い合わせた回数を NFE(Number of Function Evaluations) と呼ぶ。NFEが少なければ生成は速くなりやすいが、一歩が粗すぎると正しい道から外れる。evaluation(評価) では、生成結果がtarget分布へ近づいたかだけでなく、同じNFEでどのsolverがよかったかも調べる。
ここで最も大切な関係は、次の三つである。
- coupling、time sampler、path、教師速度、loss、optimizerは、矢印の地図を作る学習側の部品である。
- velocity modelは、学習時に矢印を練習し、生成時に矢印を答える共有部品である。
- time grid、ODE solver、sampler、NFEは、学習済みの地図をたどる生成側の部品である。
この先の章では、これらを一つずつ数式とコードへ落としていく。今は用語を暗記する必要はない。「ペアを作る → 練習経路と正解矢印を作る → 矢印の地図を学ぶ → 新しいノイズを地図に沿って歩かせる」という関係だけをつかめばよい。
4. Conditional Flow Matchingのloss導出
この章で扱う概念: Conditional Flow Matching(CFM)は、端点ペアなどの条件を固定すれば計算できる条件付き速度を教師信号として回帰し、生成時に使える周辺速度場を学ぶ方法である。モデルには条件そのものを渡さず $(t,x_t)$ だけを渡すため、多数の条件付き速度を適切に平均した速度場が学ばれる。
主な段階: 学習 — CFM lossで予測速度と教師速度を比較し、生成時に使うvelocity modelを作る。
4.1 直感の地図
本当は、時刻 $t$ の各場所 $x$ に対して「データ分布全体を正しく動かす平均的な速度」を知りたい。これを周辺速度場と呼ぶ。
しかし、データ分布全体の正しい速度場を直接計算するのは難しい。そこで、もっと簡単な問題に分解する。
- まず、source点 $x_0$ とtarget点 $x_1$ のペアを作る。
- そのペアだけを見れば、直線経路と速度はすぐにわかる。
- たくさんのペアでこれを繰り返す。
- ニューラルネットワークは、同じような場所・時刻に来る多くの教師速度を平均するように学ぶ。
これがConditional Flow Matchingの基本的な気持ちである。
4.2 条件付き経路
ここでいう「条件」は、クラスラベルやテキストを生成モデルへ入力する条件付き生成の条件ではない。学習用に選んだsource点とtarget点のペア
z=(x_0,x_1)
を指す。「$z$ がこのペアである」と固定したうえで考えるため、条件付き経路と呼ぶ。ペアを固定すれば、どこからどこへ進むかが決まり、途中地点と正解速度を簡単に計算できる。
たとえば、東京から大阪へ向かう経路と、札幌から福岡へ向かう経路は別物である。「出発地と目的地を固定した世界」が条件付きの世界に対応する。学習では多数の世界を作るが、ニューラルネットワークにはペア $z$ 自体を渡さない。
一般に、ペアを固定した条件付き経路を $\psi_t(x_0,x_1)$ と書くと、途中点と条件付き速度は
x_t = \psi_t(x_0,x_1)
u_t(x_t \mid z)
=
\frac{\partial}{\partial t}\psi_t(x_0,x_1)
である。第2式は、第1式で決めた途中点が時間 $t$ に対してどれだけ変化するか、つまり経路の接線方向を表す。path.sample が第1式、path.velocity が第2式を担当する。
Linear pathでは、経路関数を次のように選ぶ。
x_t = \psi_t(x_0, x_1) = (1 - t)x_0 + t x_1.
これを $t$ で微分すると、条件付き速度は
u_t(x_t \mid z) = x_1 - x_0
である。
条件付き経路は、ペアを固定すれば簡単だ。しかし、生成時にはペア $z$ は見えない。生成時に使えるのは、時刻 $t$ と現在位置 $x_t$ だけである。そこでニューラルネットワークは
v_\theta(t, x_t)
として、$z$ を直接受け取らない形で学習する。
多数の条件付き経路を混ぜ、ペア $z$ を平均して見えなくする操作を周辺化という。周辺化した後に残る時刻 $t$ の分布 $p_t$ が周辺分布であり、時刻ごとに並べた $p_t$ 全体が確率経路(probability path)である。
4.3 CFM loss
Conditional Flow Matchingの最小形は次である。
\mathcal{L}_{\mathrm{CFM}}(\theta)
=
\mathbb{E}_{t, x_0, x_1}
\left[
\left\|
v_\theta(t, x_t) - (x_1 - x_0)
\right\|^2
\right],
ただし
x_t = (1 - t)x_0 + t x_1.
この式は、速度の教師あり回帰である。入力は「今の時刻と途中地点」$(t,x_t)$、教師は「そのペアなら進むべき矢印」$x_1-x_0$ である。予測した矢印の向きや長さが教師から外れるほど損失が大きくなり、一致すれば0になる。
直感的には、1回の学習で次のことを行っている。
- source点とtarget点を1組選ぶ。
- その間の時刻を1つ選び、途中地点 $x_t$ を作る。
- そのペアを結ぶ正解の矢印 $u_t$ を作る。
- ニューラルネットワークに $(t,x_t)$ だけを見せて矢印を予測させる。
- 予測矢印と正解矢印のずれを二乗し、ミニバッチで平均する。
二乗するのは、正負の誤差が打ち消し合わないようにし、大きく外れた予測を強く罰するためである。ベクトルの各成分を二乗して足すため、損失は「予測矢印の先端と正解矢印の先端の距離の二乗」として読める。
記号 $\mathbb{E}$ は期待値、つまりすべての時刻とサンプルについての平均を表す。実装では無限個の組を平均できないので、各stepでランダムな $t,x_0,x_1$ をミニバッチとして取り、そのbatch平均で期待値を近似する。したがって、上の数式の期待値はコード中の .mean() に対応する。
この学習を多数のペアについて繰り返す。直感的には、CFMは「ペアごとの簡単な矢印」を大量に集め、同じ場所に来る矢印を平均して、分布全体を動かす矢印の地図を作っている。
実装では losses.py の conditional_flow_matching_loss がそのまま対応する。
batch = x0.shape[0]
t = time_sampler(batch, x0.device, x0.dtype)
x_t = path.sample(t, x0, x1)
u_t = path.velocity(t, x0, x1)
pred = model(t, x_t)
loss = ((pred - u_t) ** 2).flatten(1).sum(dim=1).mean()
| コード | 数式上の役割 |
|---|---|
x_t |
ニューラルネットワークへ入力する途中地点 |
u_t |
ペアから計算できる教師速度 |
pred |
$v_\theta(t,x_t)$、予測した速度 |
flatten(1).sum(dim=1) |
各サンプルについて全成分の二乗誤差を足す |
mean() |
ミニバッチ平均で期待値を近似する |
4.4 ペアの作り方も学習内容を変える
ここまではsourceから取った $x_0$ とtargetから取った $x_1$ を一組として扱った。しかし、どの $x_0$ とどの $x_1$ を結ぶかは一意ではない。このペアの同時分布を coupling と呼ぶ。
最小実装では、sourceとtargetから独立にサンプルする。
q(x_0,x_1)=p_0(x_0)p_1(x_1).
これは「特別な対応関係を決めず、偶然同じミニバッチに入った点を結ぶ」という基準である。実装ではtarget側をランダムに並べ替えても同じ役割になる。
x0, x1, perm = random_coupling(x0, x1)
couplingを変えても、4.3節のCFM lossは変わらない。変わるのはlossへ渡す端点ペアと、そこから作られる $x_t,u_t$ である。近い点同士を結びやすくするOptimal Transport CFM(OT-CFM)は、このペア作りを改善する方法であり、第5部では最適化問題とミニバッチ近似に絞って説明する。
5. samplerで生成する: solverはその中の歩き方
この章で扱う概念: samplerは初期ノイズの準備から生成結果の返却までを担う手続き全体であり、solverはその内部でODEの一歩を計算する数値積分法である。本章ではEuler solverを使うsamplerを最小例として生成を学ぶ。
主な段階: 生成 — checkpointから学習済みvelocity modelを読み込み、solverでsource noiseを生成サンプルへ運ぶ。
5.1 samplerは生成全体、solverは内部の一部
学習が終わると、$v_\theta(t, x)$ は「時刻 $t$ に場所 $x$ にいる点が次に進むべき方向」を返す。生成では、標準正規分布から点を取り、$t=0$ から $t=1$ まで少しずつ進める。
この生成全体を取り仕切るのが sampler である。samplerは、出発点を用意し、時刻を並べ、solverを呼び、最後の点を生成結果として返す。
sampler
├─ source分布から初期ノイズx_0を作る
├─ time gridを決める
├─ ODE solverを選ぶ
│ └─ velocity modelに速度を聞き、次の位置を計算する
└─ 最終位置を生成サンプルとして返す
一方、ODE solver が担当するのは、sampler内部の「現在位置から次の位置へどう進むか」だけである。Euler、Heun、RK4はsolverの種類であり、sampler全体の種類ではない。
ただし実際の論文やライブラリでは、「Euler solverを使うsampler」を短く Euler sampler と呼ぶことがある。この教材でも他資料との対応上この表現が現れるが、内部関係は常に次である。
Euler sampler = sampler全体 + 内部で使うEuler solver
見分け方は単純である。「初期ノイズから最終サンプルまでの生成全体」を尋ねているならsampler、「ODEの次の一歩をどう計算するか」を尋ねているならsolverである。
5.2 Euler solver
ODE
\frac{d x_t}{d t} = v_\theta(t, x_t)
を、$N$ ステップで近似する。$\Delta t=1/N$ とすると、
x_{k+1}
=
x_k + \Delta t\, v_\theta(t_k, x_k),
\quad
t_k = \frac{k}{N}.
対応する実装は solvers.py の euler_solve である。
euler_solve は初期点 x0 を外から受け取り、ODE更新だけを行うためsolverである。source分布から初期ノイズを作り、この関数を呼び、返り値を生成サンプルとして扱う外側の処理まで含めてsamplerになる。
5.3 Euler solverを使うsamplerの最小スクリプト
train_minimal_2d.py は、2D toy分布で次を行う。
- sourceとして標準正規分布から
x0をサンプルする。 - targetとして8成分のGaussian mixtureから
x1をサンプルする。これは円周上の8中心から1つを選び、その近くへ小さなnoiseを足した点である。 - Linear pathで $x_t$ と $u_t$ を作る。
-
MLPVelocityをCFM lossで学習する。 - 学習後、samplerが新しい標準正規ノイズを用意し、内部のEuler solverで動かす。
実行例を示す。
python .\src\train_minimal_2d.py `
--steps 2000 --batch 512 --device cpu
保存される minimal_2d.pt には、学習済み重み、モデル構成、path・coupling・time sampler・seed、確認用の生成サンプルが入る。
5.4 NFEを生成コストとして読む
この節で扱う概念: NFE(Number of Function Evaluations)は、1回の生成で速度場モデルを評価した回数であり、ニューラル生成の主要な計算コスト指標である。同じstep数でもsolverによってNFEが異なるため、品質と速度を公平に比べる共通予算として使う。
- NFEが低い: モデル呼び出しが少なく、通常は生成が速く計算量も小さい。ただし、時間積分が粗くなり、生成品質が落ちる可能性がある。
- NFEが高い: モデル呼び出しが多く、通常は生成が遅く計算量も大きい。ODEの離散化誤差は小さくなりやすいが、学習済み速度場そのものの誤差は直らない。
したがって目標は、単にNFEを最小にすることではない。「同じ品質をより低いNFEで達成する」または「同じNFEでより高い品質を得る」ことである。続く5.5節ではsolverごとのNFEを具体化し、5.6節ではNFEをsampler、solver、time gridの関係の中に位置づける。
5.5 ODE solverを選ぶと何が変わるか
ODE solver は、学習済みvelocity modelが返す連続時間の速度を使い、現在位置から次の位置を数値的に決める部品である。直感的には、velocity modelが「その場所の矢印を教える地図」、solverが「矢印を見ながら実際に歩く方法」に対応する。
Euler、Heun、RK4は、連続時間ODEの解を有限回の速度評価で近似する明示的数値積分法である。Eulerは1 stepの始点だけ、Heunは始点と仮の終点、RK4は区間内の4地点で速度を調べる。高次のsolverほど1 stepを丁寧に計算するが、モデルを呼ぶ回数も増える。そのため、solverはstep数だけでなく、モデル評価回数であるNFEと離散化誤差を合わせて比較する。
ここで、学習時の path と生成時の solver を区別する。
学習: pathで途中地点と教師速度を作る
-> velocity modelが速度場を学ぶ
生成: solverが学習済み速度場を有限回評価して軌道を進む
| 部品 | 使う段階 | 役割 |
|---|---|---|
| path | 学習 | 端点ペアから途中地点 $x_t$ と教師速度 $u_t$ を作る |
| solver | 生成 | 学習済みモデルの予測速度だけを使って次の位置を決める |
生成時にはtarget点 $x_1$ も教師速度 $u_t$ もないため、solverは model(t, x) を繰り返し呼びながら自力で軌道をたどる。同じcheckpointを使っても、solverやstep数を変えれば生成終点は変わり得る。
5.5.1 Euler法: 今の矢印だけを信じる
Euler法は、現在位置で速度を1回だけ評価し、その向きへ進む。
x_{k+1}=x_k+\Delta t\,v_\theta(t_k,x_k).
1 stepあたりのNFEは1で、単純かつ計算量が小さい。一方、軌道が大きく曲がる区間では、出発点の矢印だけを使うため曲がり角を通り越しやすい。
5.5.2 Heun法: 進んだ先でも矢印を確認する
Heun法は、まずEuler法で仮の次地点を作り、その地点でも速度を評価する。最後に、現在地点と仮地点の二つの速度を平均して更新する。
k_1=v_\theta(t_k,x_k),
\qquad
\hat{x}_{k+1}=x_k+\Delta t\,k_1,
k_2=v_\theta(t_{k+1},\hat{x}_{k+1}),
\qquad
x_{k+1}=x_k+\frac{\Delta t}{2}(k_1+k_2).
「今の矢印だけで決めず、少し先の矢印も見て進行方向を修正する」方法である。1 stepあたりのNFEは2になる。
5.5.3 RK4: 区間内を4回調べる
RK4は、区間の始点、中間付近、終点付近で合計4回速度を評価し、重み付き平均で進む。
\begin{aligned}
k_1 &= v_\theta(t_k,x_k),\\
k_2 &= v_\theta\left(t_k+\frac{\Delta t}{2},x_k+\frac{\Delta t}{2}k_1\right),\\
k_3 &= v_\theta\left(t_k+\frac{\Delta t}{2},x_k+\frac{\Delta t}{2}k_2\right),\\
k_4 &= v_\theta(t_k+\Delta t,x_k+\Delta t\,k_3),\\
x_{k+1} &= x_k+\frac{\Delta t}{6}(k_1+2k_2+2k_3+k_4).
\end{aligned}
一つの区間を詳しく調べるため、少ないstepでも積分誤差を抑えやすいが、1 stepあたりのNFEは4である。
教材コードでは、三つのsolverが同じ役割の関数として並んでいる。
velocity = lambda t, x: model(t, x)
samples_euler = euler_solve(velocity, x0, steps=32)
samples_heun = heun_solve(velocity, x0, steps=16)
samples_rk4 = rk4_solve(velocity, x0, steps=8)
このコード例では、Eulerは $32\times1$、Heunは $16\times2$、RK4は $8\times4$ なので、すべて総NFEが32である。公平な比較では、このようにモデルを呼ぶ総回数をそろえ、生成品質と実行時間を測る。
solverを高次にしても、学習した速度場そのものが間違っていれば直らない。solverが減らせるのは主に「有限stepでODEをたどる誤差」であり、モデルの速度予測誤差とは別である。最初はEulerで実装を確認し、その後、同じNFEでHeunやRK4に替えて改善するかを調べると原因を切り分けやすい。
5.6 samplerを構成するsolver、time grid、NFE
5.1節の包含関係を、生成時の役割として整理する。
| 用語 | 役割 | 例 |
|---|---|---|
| sampler | sourceの標本から生成物を得る手続き全体 | 初期乱数を作り、solverを呼び、終点を返す |
| ODE solver | 各区間でODEを近似する更新方法 | Euler、Heun、RK4 |
| time grid | 速度場を評価する時刻の並び | $0,1/N,2/N,\ldots,1$ |
| NFE | ニューラルネットワークによる速度場の評価回数 | Euler 32 stepsなら32 |
samplerは外側の箱であり、solverとtime gridは箱の中の設定である。NFEは、その設定で生成した結果として数える計算量である。solverだけでは初期ノイズを作らず、生成結果の評価も行わない。
Eulerは現在地点の速度を1回評価して進む。HeunはEulerで仮の次地点を作り、現在と仮地点の速度を平均する。RK4は1区間で4回速度を評価する。この違いにより、同じstep数でも計算量は同じにならない。
| solver | 1 stepあたりのNFE | 特徴 |
|---|---|---|
| Euler | 1 | 最小で分かりやすいが、曲がった軌道では誤差が出やすい |
| Heun | 2 | 進んだ先の速度も確認する2次法 |
| RK4 | 4 | 区間内を4回評価する4次法 |
したがってsolverの公平な比較では、step数ではなく総NFEをそろえる。たとえばEuler 32 steps、Heun 16 steps、RK4 8 stepsはいずれもNFE 32である。第9部では、この共通予算の下で更新式と生成品質を比較する。
5.7 この章で戻るべき対応
| 直感 | 数式 | コード |
|---|---|---|
| 点を途中地点へ置く | $x_t = (1-t)x_0 + tx_1$ | path.sample(t, x0, x1) |
| 直線方向を教師にする | $u_t = x_1 - x_0$ | path.velocity(t, x0, x1) |
| 速度場を学ぶ | $v_\theta(t, x_t)$ | model(t, x_t) |
| 速度の二乗誤差 | $\mathbb{E}[\lVert v_\theta-u_t\rVert^2]$ | conditional_flow_matching_loss |
| 生成時に少しずつ進む | $x_{k+1}=x_k+\Delta t v_\theta(t_k,x_k)$ | euler_solve |
ここまでで、Flow Matchingの1回の学習ステップと1回の生成ステップは、式とコードの両方で読めるようになる。
参考文献
以下には、本教材の内容、説明順序、実装対応、用語選択の検討に使用した論文、公式実装、技術文書、解説資料、動画、既存教材を掲載する。
- Yaron Lipman, Ricky T. Q. Chen, Heli Ben-Hamu, Maximilian Nickel, Matt Le, "Flow Matching for Generative Modeling", ICLR 2023. Flow Matchingの基本定式化、Gaussian path、CFMの基礎になる論文。
- Alexander Tong, Nikolay Malkin, Guillaume Huguet, Yanlei Zhang, Jarrid Rector-Brooks, Kilian Fatras, Guy Wolf, Yoshua Bengio, "Conditional Flow Matching: Simulation-Free Dynamic Optimal Transport", 2023. CFM、OT-CFM、simulation-freeなdynamic OT近似を扱う論文。
- Xingchao Liu, Chengyue Gong, Qiang Liu, "Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow", 2022. Rectified Flow、Reflow、少ステップ生成の実用的な入口になる論文。
- Qiang Liu, "Rectified Flow: A Marginal Preserving Approach to Optimal Transport", 2022. Rectified Flowのmarginal preserving propertyとOTとの関係を説明する理論寄りの論文。
- Sangyun Lee, Zinan Lin, Giulia Fanti, "Improving the Training of Rectified Flows", NeurIPS 2024. Reflowを繰り返す前に、pathの交差、時刻分布、loss設計を改善する考え方を扱う。
- Michael S. Albergo, Eric Vanden-Eijnden, "Building Normalizing Flows with Stochastic Interpolants", 2023. 補間過程を設計し、その確率流から速度場を学ぶStochastic Interpolantsの基礎論文。
- Michael S. Albergo, Nicholas M. Boffi, Eric Vanden-Eijnden, "Stochastic Interpolants: A Unifying Framework for Flows and Diffusions", 2023. FlowとDiffusionを補間・速度・scoreの枠組みで統一的に見る論文。
- Patrick Esser et al., "Scaling Rectified Flow Transformers for High-Resolution Image Synthesis", 2024. 高解像度画像生成でRectified Flow Transformerをスケールさせる実モデル系の論文。
- Yaron Lipman et al., "Flow Matching Guide and Code", 2024. Flow Matchingの用語、実装、公式コード対応をまとめた包括的ガイド。
- Peter Holderrieth, Ezra Erives, "An Introduction to Flow Matching and Diffusion Models", MIT 6.S184 lecture notes. DiffusionとFlow MatchingをODE/SDE、score、velocityの観点でつなぐ講義ノート。
- Will Grathwohl et al., "FFJORD: Free-form Continuous Dynamics for Scalable Reversible Generative Models", ICLR 2019. continuous normalizing flowのinstantaneous change-of-variables、発散推定、NLL計算の基礎資料。
- Cheng Lu et al., "DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps", NeurIPS 2022. NFEをそろえた高速sampling評価と、少stepでの品質比較を考えるための代表的なsolver研究。
- Tero Karras et al., "Elucidating the Design Space of Diffusion-Based Generative Models", NeurIPS 2022. sampler設定、NFE、FID、計算量を分けて評価する実験設計の参考資料。
- Jonathan Ho, Ajay Jain, Pieter Abbeel, "Denoising Diffusion Probabilistic Models", 2020. DDPMの基本となる前向きノイズ化、epsilon prediction、逆過程の論文。
- Martin Heusel et al., "GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium", NeurIPS 2017. Fréchet Inception Distance(FID)を導入した論文。
- Mikołaj Bińkowski et al., "Demystifying MMD GANs", ICLR 2018. Kernel Inception Distance(KID)とその不偏推定を導入した論文。
- Catherine F. Higham, Desmond J. Higham, Peter Grindrod, "Diffusion Models for Generative Artificial Intelligence: An Introduction for Applied Mathematicians", 2023. 応用数学寄りにDiffusionモデルを導入する入門論文。
- TorchCFM documentation, atong01/conditional-flow-matching. CFM variantsをFlowMatcherクラスとして読むための実装資料。
- Diff2Flow documentation, "Training Flow Matching Models via Diffusion Model Alignment". Diffusion実装をFlow Matchingへ変換・整合させる観点の実装資料。
- Black Forest Labs, FLUX official repository. FLUX.1の公式推論コード、モデル一覧、利用条件への入口。
- Black Forest Labs, FLUX.1-schnell model card. 公式checkpoint、pipeline構成、Apache-2.0表示の確認元。
- Black Forest Labs, FLUX.1-dev model card. gated checkpointと独自ライセンスへの入口。
- Black Forest Labs, FLUX.1 [dev] Non-Commercial License. weight、派生物、outputを区別して利用条件を確認する一次資料。
- Stability AI, Stable Diffusion 3.5 official repository. SD3.5モデル、推論例、モデルカードへの公式入口。
- Stability AI, Stable Diffusion 3.5 Medium and Large model cards. MMDiT構成、用途、Community Licenseの確認元。
- Stability AI, Community License. SD3.5を含む対象モデルの利用・再配布条件を確認する一次資料。
- Tencent, HunyuanVideo official repository. 公開video generation model、checkpoint、推論条件、ライセンスの一次資料。
- William Peebles et al., SiT: Exploring Flow and Diffusion-based Generative Models with Scalable Interpolant Transformers. Stochastic Interpolant Transformerの公式実装とImageNet checkpoint。
- Hugging Face Diffusers, DreamBooth training for FLUX. full/LoRA学習、対象module、text encoder学習、VRAM上の注意。
- Hugging Face Diffusers, DreamBooth training for Stable Diffusion 3. SD3系MMDiTのLoRA学習例。
- Hugging Face Diffusers, LoRA training and loading adapters. adapterの学習、読込、複数adapter、fuse/unfuseの公式文書。
- Hugging Face PEFT, LoRA developer guide. rank/alpha、対象module、merge/unmerge、発展的LoRA設定の公式文書。
- Hugging Face, safetensors documentation. tensorとmetadataを保存する形式の仕様・利用法。
- Edward J. Hu et al., LoRA: Low-Rank Adaptation of Large Language Models. 低ランク更新の原論文。
補足的に使用した研究論文・講義資料
- Michael S. Albergo et al., "Stochastic Interpolants with Data-Dependent Couplings", 2023. couplingを固定的な独立ペアリングに限定せず、データ依存に設計する観点の参考資料。
- Stanley H. Chan, "Tutorial on Diffusion Models for Imaging and Vision", 2024. 画像・視覚問題におけるDiffusionの前向き過程、逆過程、score、samplingの説明を確認するために使用した。
- Itai Gat et al., "Discrete Flow Matching", 2024. 連続空間のFlow Matchingを離散データへ拡張する研究資料。
- Aram-Alexandre Pooladian et al., "Multisample Flow Matching", ICML 2023. ミニバッチ内の複数標本とcouplingを使って輸送を改善する観点の参考資料。
- Nikita Kornilov et al., "Optimal Flow Matching: Learning Straight Trajectories in Just One Step", NeurIPS 2024. 直線的な軌道と少ステップ生成を比較するための発展資料。
- Xixi Hu et al., "Improving Rectified Flow with Boundary Conditions", ICCV 2025. Rectified Flowの境界付近の挙動と改善方法を扱う資料。
公式実装・実装補助資料
- Meta, facebookresearch/flow_matching. path、solver、continuous/discrete exampleの公式PyTorch実装。
- Meta, Flow Matching examples. 2D continuous exampleを含む、教材コードから公式実装へ移るための参照先。
- Xingchao Liu et al., gnobitab/RectifiedFlow. Rectified Flowのtrain、eval、reflowを確認するための公式実装。
- Sangyun Lee et al., sangyun884/rfpp. "Improving the Training of Rectified Flows" に対応する参考実装。
- Jonathan Ho et al., hojonathanho/diffusion. DDPMの公式実装。
- Hugging Face, Diffusers. scheduler、pipeline、Flow Matching系モデル、学習・推論コードの実装資料。
- Diffusion Meets Flow Matching. DiffusionとFlow Matchingの時間向き、予測対象、ODE/SDE対応を対話的に確認する資料。
- MIT 6.S184, Flow Matching and Diffusion Models course site. 講義ノートと関連教材の入口。
直感説明・可視化・動画の参考資料
- "Rectified Flow: Straight is Fast", Let Us Flow Together. Rectified Flow、直線軌道、Reflowの直感説明を検討するために使用した。
- "Curved × Curved = Straight: DDIM is Straight RF", Let Us Flow Together. DDIMとRectified Flowの軌道を比較する補助資料。
- "Interpolations: All Flows are One Flow", Let Us Flow Together. interpolationとpath設計の直感を確認する補助資料。
- "Flow to Diffusion: Langevin is a Guardrail", Let Us Flow Together. Flow、Diffusion、Langevin dynamicsの関係を確認する補助資料。
- "A Visual Dive into Conditional Flow Matching", ICLR Blogposts 2025. CFMの条件付き速度、平均速度場、直感図解に役立つ解説。
- Peter Holderrieth, "Flow Matching: A visual introduction". 粒子、分布、速度場、ODE生成を視覚的に説明する入門記事。
- "Flow Matching for Generative Modeling (Paper Explained)". Flow Matching論文の解説動画およびその字幕transcript。生成モデル未経験者向けの説明粒度を検討するために使用した。
- Zenn「Flow Matchingのエッセンス」. 日本語での速度場、輸送、学習と生成の説明を点検するために使用した。
- Zenn「Optimal Transport Conditional Flow Matching」. OT-CFMの日本語説明と用語選択を確認するために使用した。
- Qiita「Flow Models・Flow Matching・Diffusion Models 学習メモ」. 日本語でのFlow MatchingとDiffusionの対比を確認する補助資料。
- Docswell「Conditional Flow Matching輪読資料」. CFM、OT-CFM、条件付き経路の日本語説明を確認する補助資料。
- Zenn「Flowベース生成モデルの調査」. Flow Matchingを周辺のflow-based generative modelsと比較するために使用した日本語Web資料。