連載「生成モデルを一から実装する」
公開順に読み進められる連載です。
- 完全なノイズから、三日月形が本当に浮かび上がってくるのか。拡散モデル(DDPM)を自分で実装して確かめてみた
画像生成AIの中核技術である拡散モデル(Denoising Diffusion Probabilistic Models)を、2次元のtwo moonsデータに対してnumpyだけで一から実装。データにノイズを加える前向き過程と、ノイズ予測ネットワークを使ってノイズから形を復元する逆向き過程を実際に学習・実行し、ノイズの粒がどう形になっていくかをアニメーションで確かめた
- 生成器と識別器を騙し合わせてみたら、損失は教科書通りの値に収束したのに、形はきれいに揃わなかった。GAN(敵対的生成ネットワーク)を一から実装した
画像生成AIのもう一つの源流であるGAN(Generative Adversarial Networks)を、前回の拡散モデルと同じtwo moonsデータに対してnumpyだけで一から実装。生成器と識別器を交互に学習させる「騙し合い」を実際に動かし、損失が理論上のナッシュ均衡値に収束する一方で、生成される形がなぜ拡散モデルほど綺麗に揃わなかったのかを確かめた
- 生成モデル三国志、最後の流派。Normalizing Flowをnumpyで一から実装したら、一番静かに学習が終わった
拡散モデル・GANに続く生成モデル第3の流派、Normalizing Flow(RealNVP型)をnumpyだけで実装した。可逆な変換を6層重ねてガウス雲をtwo moonsに変形する仕組みで、逆変換の再構成誤差は2.07e-14(機械精度)、そしてFlowだけの特権「任意の点の確率密度を厳密に計算」も実際に地図にした。同じデータ・同規模ネットでの3流派そろい踏み比較では、GANがもがいた同じ課題をFlowは敵対も反復もなしに静かにこなした——3つの哲学の違いが結果に出た実験記録