← 記事一覧に戻る

連載「生成モデルを一から実装する」

公開順に読み進められる連載です。

  1. 完全なノイズから、三日月形が本当に浮かび上がってくるのか。拡散モデル(DDPM)を自分で実装して確かめてみた

    拡散モデル(DDPM)の仕組みを、numpyだけで一から実装して確かめた実験記録。ノイズを加える前向き過程とノイズ予測ネットワークによる逆向き過程を手書きの逆伝播で実装し、完全なノイズからtwo moonsの形が復元される様子をアニメーションと3D軌跡で可視化した。PyTorch不使用、コードと実測値つき。

  2. GAN(敵対的生成ネットワーク)を一から実装したら、損失は理論値に収束したのに生成分布は最後まで揃わなかった

    GAN(敵対的生成ネットワーク)をnumpyで一から実装し、生成器と識別器の学習過程を追った実験記録。損失は理論値0.693に収束したのに生成分布は最後まで本物と揃わなかった。GANの学習が難しいと言われる理由を、自分のコードの挙動として確認した。

  3. 生成モデル三国志、最後の流派。Normalizing Flowをnumpyで一から実装したら、一番静かに学習が終わった

    Normalizing Flow(正規化流、RealNVP型)をnumpyだけで実装した記録。可逆なアフィンカップリング層を6枚重ねてガウス分布をtwo moonsに変形し、逆変換の再構成誤差2.07×10⁻¹⁴を確認。拡散モデル・GANとの3流派同条件比較つき。

  4. VAEをtwo moonsでnumpyから実装したら、再構成で2つの三日月が1本のなめらかな曲線に融合した

    拡散モデル・GAN・Normalizing Flowに続く生成モデル第4の流派、VAE(Variational Autoencoder)をnumpyだけで一から実装。エンコーダ→平均/分散→reparameterization trick→デコーダという構造を同じtwo moonsデータで学習させたところ、再構成誤差はFlowの2.07e-14とは桁違いのMSE 0.40。しかも単にぼやけるだけでなく、本物では離れている2つの三日月が再構成後は1本の連続したなめらかな曲線に融合するという、VAE特有の失敗が実際に観測できた。潜在空間の線形分離度90.7%、KL項の次元間非対称性(部分的なposterior collapse)など、実測値だけで四国志を締めくくる