9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに:また新しい生成モデルが出てきたぞ!

生成AIの世界って、次から次へと新しい手法が出てきますよね。GANが出たと思ったら「いやいや拡散モデルでしょ」みたいな感じで、正直追いかけるのが大変です…

そんな中、2025年開催のICLRに採択された2024年発表の論文に、また新しい生成モデルが登場しました。その名も「Discrete Distribution Networks (DDN)」。

奇をてらったタイトルも多い中、シンプルでいいですね。そしてその内容もシンプルながら、洗練されたものを感じました。

DDNの一番面白い特徴を先に言ってしまうと、勾配計算なしでゼロショット条件付き生成(ZSCG)ができるんです。つまり、「このテキストから画像作って」みたいなお願いを、追加の学習なし・勾配計算なしでやってのけるんですよ。CLIPとか既存のモデルをブラックボックスとしてポイっと渡すだけ。

「は?どういうこと?」って思いますよね。私も思いました。というわけで、この記事ではDDNの仕組みを、できるだけ分かりやすく解説していきます。

想定読者:

  • GANとかVAEとか聞いたことある人
  • 生成モデルに興味あるけど数式見ると気絶しそうになる人(安心してください、今回は最小限です)
  • 「また新しいの出たのかよ...」と思いながらも好奇心が抑えられない人

この記事を読むと分かること:

  • DDNがどうやって画像を生成するのか
  • Split-and-Pruneというアルゴリズムの正体
  • なぜ勾配なしでゼロショット生成ができるのか
  • DDNのちょっと変わった潜在表現の話

論文情報

タイトル: Discrete Distribution Networks
著者: Lei Yang
発表: ICLR 2025
論文: https://arxiv.org/abs/2401.00036v3
コード: https://discrete-distribution-networks.github.io/ (公開してくれててありがたい)


論文の図の転載について

ライセンスの関係上、論文中の図は掲載していません。 図を見たほうが絶対に理解が早い ので、興味がある方はDDNの内容理解のためにも元論文を参照していただけると幸いです。

DDNの「なるほどわからん」から「あ、なるほど」への道

そもそも従来の生成モデルって何してたの?

DDNの話をする前に、ちょっとだけ従来の手法を振り返りましょう(知ってる人は読み飛ばしてOK)。

  • GAN: 「偽物作る人」と「見破る人」を戦わせて、偽物のクオリティを上げていく。当時はこの天才的な発想に感動したものです。ただし学習が安定しづらい。
  • VAE: データを一旦「潜在空間」っていう抽象的な世界に押し込んで、そこから復元する。
  • 拡散モデル: ノイズをひたすら除去していく。時間かかるけど画質はピカイチ。Stable DiffusionとかDALL-Eとかこれ。
  • 自己回帰モデル: ピクセルを一個ずつ予測していく。GPTの画像版みたいな感じ。遅いけど確実。

どれも素晴らしいんですが、それぞれ一長一短ありますね。

で、DDNは何が違うの?

DDNの発想は超シンプルです:

「いっぱい作って、その中から選ぼうぜ!」

これだけです。

もうちょっと真面目に言うと:

  1. ネットワークが一度にK個の画像を出力する(例:K=512なら512枚)
  2. この512枚を「離散分布」として扱う(それぞれ確率1/512みたいな感じ)
  3. 学習時は、この512枚の中から正解に一番近いやつを選んで学習
  4. これを何層も重ねる(L層)

すると何が起こるか?各層で512個の選択肢があって、それが128層あったら...

$$512^{128}$$

という、宇宙の原子の数より多い表現空間ができるわけです。とんでもない数ですね。

※ちなみに、宇宙の原子は約 $10^{80}$ 個と言われているらしいです。

階層的に画像を作っていく流れ

もうちょっと具体的に見てみましょう。例えば猫の画像を作るとします:

※元論文の図1(a)を参考にしつつ、イメージを掴んでください。

【第1層】
ネットワーク「とりあえず512枚の超ぼやけた画像作ったわ」
  → その中に「なんか茶色っぽくて丸いやつ」がある
  → 「これ猫っぽくね?」って選ぶ

【第2層】
ネットワーク「さっきの茶色い丸から512枚の少しマシな画像作ったわ」
  → その中に「耳っぽい突起があるやつ」がある
  → 「これだ!」って選ぶ

【第3層】
ネットワーク「今度は512枚の結構猫っぽい画像作ったわ」
  → その中に「ひげがちゃんとあるやつ」がある
  → 「完璧!」って選ぶ

...(これを128層繰り返す)

各層で選んだ画像の番号(例:「第1層で237番、第2層で89番、第3層で421番...」)が、その猫画像のIDカードみたいなものになります。

住所で例えると分かりやすいです:

  • 「東京都→渋谷区→道玄坂→1丁目→2番3号」と段階的に場所を特定するように
  • DDNも「第1層で237番→第2層で89番→第3層で421番→...」と段階的に画像を特定

最初の方の番号(都道府県)は大まかな特徴(猫か犬か、色は何色か)を決めて、後半の番号(番地)は細かい特徴(ひげの向き、毛並みの質感)を決めるイメージです。

あるいは 「Akinator(アキネーター)」 を想像してください!

  • 「動物ですか?」「はい」→ 選択肢を絞り込む(第1層)
  • 「哺乳類ですか?」「はい」→ さらに絞り込む(第2層)
  • 「ペットですか?」「はい」→ もっと絞り込む(第3層)
  • ...質問を重ねるごとに答えが絞られていく

DDNも同じように、各層での選択を重ねることで、最終的な画像に辿り着きます。この選択の履歴 [237, 89, 421, ...] が、その画像の潜在表現(論文では「階層的離散表現」と呼ばれます)です。


Split-and-Prune:進化論を生成モデルに応用

問題発生:「死んだノード」の悲劇

ここで問題が発生します。

512個の出力ノードがあって、毎回「正解に近いやつだけ」を学習していると、一度も選ばれないノードが出てきます。

想像してみてください。512人のクラスで、先生が毎回「テストの点数が高い上位10人だけ褒める」みたいなことをしてたら、下位の子たちはどうなるでしょうか。やる気なくしますよね。それと同じです(人間の場合は倫理的に問題ありますが、ニューラルネットワークなので大丈夫です)。

この「やる気なくしたノード」のことを、論文では 死んだノード(dead nodes) と呼んでます。かわいそう。

Split-and-Prune:生き残りをかけた戦い

この問題を解決するために、著者は進化論遺伝的アルゴリズムからアイデアを拝借してきました。

Split(分裂)操作

人気者のノード(いつも選ばれるノード)に対して:

「お前できる子だから、二人に増殖してもっと活躍してくれ」

みたいなことをします。最初は双子みたいに同じなんですが、学習が進むと徐々に個性が出てきて、違う種類の画像を担当するようになります。

細胞分裂みたいなイメージですね。一つのノードで広い範囲をカバーしてたのを、二つのノードで細かくカバーするようになります。

Prune(剪定)操作

不人気なノード(全然選ばれないノード)に対して:

「お前、クビ」

です。容赦ない。

でも、ただクビにするだけじゃなくて、そのポジションにはSplitで生まれた新しいノードが入ります。つまり、常に512個のノードは維持されるわけです。

なぜこれが効くのか?

この操作を繰り返すと、出力ノードの分布が、実際のデータの分布に近づいていくんです。

例えば、猫の画像が1000枚、犬の画像が100枚あるデータセットだったら:

  • 最初は全ノードが均等に配置されてる
  • Split-and-Pruneを繰り返すと...
  • 猫担当のノードが増えて、犬担当のノードが減る
  • でも犬も100枚あるから、完全にはゼロにならない

つまり、データの分布を自然に学習するわけです。賢い!

論文の図20を見ると、1次元のガウス分布をフィッティングする実験で、この効果が視覚的に示されてます。最初はバラバラだったノードが、徐々にガウス分布の形に沿って並んでいく様子が見られて、わかりやすいですね。


ゼロショット条件付き生成:これが本当にすごい

ここからが本題です。DDNの真の力を見せてもらいましょう。

従来の条件付き生成の面倒くささ

普通、条件付き生成(「このテキストから画像作って」とか「この低解像度画像を高解像度にして」とか)をやろうとすると:

  1. その条件用にモデルを別途トレーニングする
  2. 大量のペアデータが必要
  3. 新しい条件が来たらまた最初から

これ、めちゃくちゃ面倒じゃないですか?「そんなの聞いてないよ〜」って言いたくなりますよね。

DDNのゼロショット生成:ブラックボックスでOK

DDNでは、Guided Sampler(画像を選ぶ部分)を変えるだけで、いろんな条件に対応できます。

例1:テキストから画像を生成(CLIP使用)

# 普段のトレーニング
選ばれし画像 = 一番正解に近いやつ

# テキスト条件での生成
選ばれし画像 = CLIP先生にこのテキストに合ってる?」って聞いて
              一番高得点だったやつ

これだけです。CLIPモデルをそのまま使えるんです。ファインチューニングなし。勾配計算なし。

例2:超低解像度からの超解像

# 4x4の超ボケボケ画像から復元する場合
選ばれし画像 = 生成した画像を4x4にダウンサンプルして
              条件のボケボケ画像と一番近いやつ

4x4ですよ?16ピクセルですよ?もはや画像と呼べるのか怪しいレベルです。

論文でもこの極端な例が成功していることが実証されています。そこまで情報が失われていても、DDNのサンプリングプロセスを通じて、ちゃんとした画像に復元できるんです。

なぜこれで動くのか?

秘密はサンプリングのプロセスにあります。

DDNは各層で512個の画像を作ってるので、その中には「条件にちょっと合ってるやつ」がきっと含まれてるはずなんです。それを選んで、次の層でさらに512個作って、その中から「もっと条件に合ってるやつ」を選んで...

これを128回繰り返すと、最終的には「めちゃくちゃ条件に合ってる画像」が出来上がる、というわけです。

複数条件の組み合わせもできる

さらに面白いのが、複数の条件を同時に使えることです。

例えば:

  • 「この部分はこの画像で埋めて(インペインティング)」× 重み0.5
  • 「全体的に"幸せそうな人"っぽくして(CLIPテキスト)」× 重み0.5

みたいなことができます。重み付けで調整できるんです。これ、すごく柔軟じゃないですか?


DDNの面白い特性:潜在表現が1次元ってどういうこと?

整数の列で画像を表現する

DDNの潜在表現は、例えば:

[237, 89, 421, 103, 492, 56, ..., 301]

みたいな、長さLの整数列です。各数字は「その層で何番目の画像を選んだか」を表してます。

K=512、L=128の場合:

  • 情報量:128 × log₂(512) = 128 × 9 = 1,152ビット
  • 1枚の画像を1KB程度で表現できる計算

めちゃくちゃコンパクトじゃないですか?64x64のRGB画像だと普通12,288バイトなので、1/10以下に圧縮されてることになります。

Taiji-DDN:太極とニューラルネットワークの融合(?)

K=2の場合、潜在表現はバイナリ文字列になります:

[0, 1, 1, 0, 1, 0, 0, 1, ...]

これをTaiji-DDNと呼んでるんですが、名前の由来が面白くて。

論文によると、古代中国の哲学書「易経」(紀元前9世紀!)に書かれてる太極の概念と、DDNの木構造が似てるんだそうです。

太極(あの勾玉が2つ重なったようなやつ)って「陰と陽」の二元論ですよね。K=2のDDNも「左か右か」の二分木構造。これが偶然にも一致してると。

これを思いついたとき著者はウキウキで名前を付けたに違いありませんね。

木構造の表現空間

潜在空間は木構造になってます:

       根(何もない)
      /              \
    [0]               [1]
    / \               / \
[0,0] [0,1]       [1,0] [1,1]
  /\    /\          /\    /\
...  (続く)

各葉っぱが一枚の画像に対応してて、根から葉までのパスが潜在変数になります。

面白いのは、前半の値ほど重要ってことです。

  • 最初の方の選択:「猫か犬か」みたいな大まかな特徴
  • 後半の選択:「ひげの向きとか毛の質感」みたいな細かい特徴

決定木っぽいですよね。

実際、MNISTの実験では、DDNの潜在表現を決定木として使って分類したら、結構いい精度が出たそうです:

K L サンプル128個での精度 サンプル50,000個での精度
2 10 65.9% 86.9%
8 5 67.5% 90.5%

潜在表現が意味のある情報を含んでるってことですね。


実験結果:で、実際どうなんだい?

生成品質

正直に言うと、まだ最強ではないです。

CIFAR-10での結果

モデル タイプ FID(低いほど良い)
DCGAN GAN 37.1
IGEBM EBM 38.0
GLOW Flow 46.0
DDN DDN 52.0
Gated PixelCNN AR 65.9
VAE VAE 106.7
VQ-VAE VAE 117.4

GAN(DCGAN)やエネルギーベースモデル(IGEBM)には届いてませんが、自己回帰モデル(Gated PixelCNN)やVAE系よりは良い結果です。新しい手法としては健闘してると思います。著者も論文で「CIFARは難しい」って正直に言ってます。

FFHQ-64x64(顔画像)での結果

  • FID: 43.1
  • こっちは結構良い感じ

顔画像の方が得意っぽいです。データの構造がある程度決まってるからかもしれません。

ゼロショット条件付き生成の実験

こっちが本領発揮です。論文の図2を見ると、以下のタスクが成功してます:

  1. 超解像:ぼやけた画像からクッキリ画像へ
  2. 色付け:モノクロからカラーへ
  3. スタイル転送:別の画像の絵柄を適用
  4. テキストから画像:「サングラスをかけた人」みたいなテキストから生成
  5. 複数条件の組み合わせ:上記を同時に

これ、全部追加学習なしです。やばいです。


DDNの弱点:完璧じゃないって話

良いところばかり言ってもアレなので、論文で認めてる課題も紹介します。

1. 表現空間が足りないかも

$K^L$ という巨大な空間でも、複雑な分布を表現するには足りない場合があるそうです。

解決策として考えてるのは:

  • 画像をパッチに分割
  • 各パッチで独立に選択
  • これで $K^{N \times L}$ に拡大(Nはパッチ数)

うん、確かに大きくなりますね。でも計算量も増えそう...

2. せっかく学習したパラメータを捨ててる

Split-and-Pruneで「お前クビ」ってやると、そのノードで学習したパラメータが無駄になるんです。

「もったいなくない?」って思いますよね。著者も思ってます。

解決策:MoE(Mixture of Experts)モデルで使われてる「Loss-Free Balancing」って手法を検討中だそうです。

3. 画像がちょっとぼやける

L2損失(ピクセル値の差の二乗)を使ってるので、高周波成分(細かいディテール)が失われがちです。

解決策:VQ-GANみたいに敵対的損失(GAN的なやつ)を入れるか検討中。

4. ZSCGの計算コストが高い

L層 × K個の選択 = 128層 × 512個 = 65,536回の識別モデル実行

「多くない?」って正直めちゃくちゃ多いです。

論文でも正直に課題として認めてます(付録E.4):

ZSCGは、ガイドモデルを通じて L×K の forward pass を必要とし、ガイドモデル自体が計算的に高価な場合、これは大幅な計算オーバーヘッドと長い生成時間をもたらす。

ただし救いもあります:

  • 並列化が可能: K個の評価はバッチ処理で同時実行できる
  • 全層でガイドしなくてもOK: 重要な層だけガイドすれば計算量削減
    • 例:最初の層はランダム、中間は数層おき、最後だけ毎層ガイド

つまり、ZSCGは「できる」けど「計算コストは安くない」 というのが正直なところです。

論文の実験では、テキスト条件にはCLIPを使いつつ、カテゴリー条件(「猫の画像を生成」など)には事前学習済みのResNet18分類器を使っていたりします。ガイドモデルが重いほど計算コストが跳ね上がるため、タスクに応じて適切なモデルを選ぶことが重要のようです。


まとめ:DDNは面白いけど、まだ発展途上

というわけで、DDN(Discrete Distribution Networks)について解説してきました。

DDNのここが良い

アイデアがシンプル:一気に複数サンプル作るだけ
表現空間が広い:$K^L$ の指数関数的な広さ
ゼロショット生成が柔軟:識別モデルをブラックボックスで使える
潜在表現がコンパクト:整数列で表現できる
Split-and-Pruneが賢い:進化論的な最適化

まだ発展途上

❌ 生成品質は最高峰ではない(特にCIFAR)
❌ 計算コストの改善余地あり
❌ 高周波成分の損失問題

でも、新しいパラダイムを提示したという点では意義があると思います。

特に、ゼロショット条件付き生成の柔軟性は、実用面で可能性を感じます。「このモデルとこの条件を組み合わせて」みたいなのが、学習なしでサクッとできるのは強い。

あと、個人的にはSplit-and-Pruneのアイデアが好きです。進化論を機械学習に持ち込むって発想が面白いし、実際に効いてるのが素晴らしい。

これからどうなる?

論文はICLR 2025で採択されたばかりなので、これから改良版とか応用研究が出てくると思います。

  • 表現空間の拡張(パッチベースとか)
  • 他のドメインへの応用(音声とか動画とか)
  • より効率的な最適化手法

とか、いろいろ出てきそう。楽しみですね。

最後に

論文って、最初は「うわ、難しそう...」って思うんですが、読み解いていくと「あ、意外とシンプルなアイデアだったんだ」って気づくことが多いです。

DDNもまさにそうで、核心は「複数サンプル同時に作ろうぜ」っていう、言われてみれば当たり前のアイデアなんですよね。でも、それを実用レベルまで持っていくための工夫(Split-and-Pruneとか)が素晴らしい。

この記事では論文で紹介されているすべての工夫を取り上げられてはいないので、もし興味を持ったらぜひ論文のほうも読んでみると楽しいと思います。特にモデルのアーキテクチャについてはこの記事で全然触れてないですが、DDNはアーキテクチャも面白いです。

というわけで、長々と書きましたが、少しでもDDNの面白さが伝わったら嬉しいです。

注意事項

本ブログに掲載している内容は、私個人の見解であり、所属する組織の立場や戦略、意見を代表するものではありません。あくまでエンジニアとしての経験や考えを発信していますので、ご了承ください。

9
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?