生成モデル | 深層学習の応用
生成モデル(Generative Model)は、訓練データが従うと考えられる確率分布 $p_{\text{data}}(x)$ を学習し、そこから新しいデータをサンプリングできるようにするモデルの総称です。分類モデルが $p(y\vert x)$(ラベルの条件付き分布)を学習するのに対し、生成モデルはデータ $x$ そのものの分布を学習・近似します。
0. 生成モデル全体の位置づけ
| 種類 | 代表モデル | 学習の考え方 |
|---|---|---|
| 潜在変数モデル | AutoEncoder, VAE | 入力を低次元の潜在変数に圧縮(エンコード)し、そこから復元(デコード)する |
| 敵対的生成モデル | GAN | 生成器と識別器を互いに競わせる(敵対的学習)ことでデータ分布を学習する |
| 拡散モデル | DDPM 等 | データに徐々にノイズを加える過程を定義し、その逆過程(ノイズ除去)を学習する |
| 自己回帰生成モデル | PixelRNN, PixelCNN | 既に生成済みの要素を条件として次の要素を逐次予測する(LLMの自己回帰生成と同じ発想の画像版) |
1. AutoEncoder と VAE
AutoEncoder(オートエンコーダ)
- Encoder:入力 $x$ を、より低次元の潜在変数(潜在表現)$z$ に圧縮する
- Decoder:潜在変数 $z$ から、元の入力を復元した $\hat{x}$ を出力する
- 損失関数は再構成誤差(例:平均二乗誤差 $|x - \hat{x}|^2$)で、入力をできるだけ忠実に復元できるように学習する
AutoEncoder は次元圧縮やノイズ除去には有効ですが、そのままでは「生成モデル」として使いにくいという弱点があります。通常の AutoEncoder は、潜在空間上のどの点が意味のあるデータに対応するかについて何の制約もありません。学習データの潜在変数がまばらに、しかも不連続に配置されてしまうため、ランダムに選んだ $z$ を Decoder に入力しても、自然なデータが生成される保証がないのです。
VAE(変分オートエンコーダ, Variational AutoEncoder)
VAE はこの弱点を解決するため、潜在変数 $z$ を「1つの点」としてではなく「確率分布」として扱います。
- Encoder は入力 $x$ から、潜在変数の事後分布 $q(z\vert x)$ のパラメータ(平均 $\mu$、分散 $\sigma^2$)を出力する
- $q(z\vert x)$ は通常、多変量正規分布 と仮定される(計算が容易であり、かつ事前分布 $p(z)=\mathcal{N}(0,I)$ との相性が良いため)
- Decoder はこの分布からサンプリングした $z$ を入力として $x$ を復元する
再パラメータ化トリック(Reparameterization Trick)
VAE の学習では「$q(z\vert x)$ からサンプリングした $z$」を使って誤差逆伝播を行う必要がありますが、サンプリングという操作自体は確率的で微分不可能なため、そのままでは勾配を Encoder のパラメータ($\mu, \sigma$)まで流すことができません。
これを解決するのが再パラメータ化トリックです。サンプリング $z \sim \mathcal{N}(\mu, \sigma^2)$ を、確率的な部分を外部のノイズ $\epsilon$ に切り離した決定的な変換として書き直します。
\[z = \mu + \sigma \odot \epsilon, \qquad \epsilon \sim \mathcal{N}(0, I)\]こうすると、$\mu$ と $\sigma$ は通常の(微分可能な)ネットワークの出力として扱え、ランダム性はあらかじめサンプリングしておいた $\epsilon$ の中にすべて押し込められます。結果として、誤差逆伝播を $\mu, \sigma$ まで普通に流すことができるようになります。
VAE の損失関数
VAE の損失関数は2項の和で構成されます(正確には対数尤度の下限、ELBO:Evidence Lower Bound の最大化として導かれますが、直感的には以下の2つのバランスを取る形になります)。
\[\mathcal{L} = \underbrace{\|x - \hat{x}\|^2}_{\text{再構成誤差}} + \underbrace{D_{\text{KL}}\bigl(q(z\vert x) \parallel p(z)\bigr)}_{\text{正則化項}}\]- 再構成誤差:通常の AutoEncoder と同様、入力をどれだけ忠実に復元できたかを表す項
- KLダイバージェンス項:Encoder が出力する事後分布 $q(z\vert x)$ を、あらかじめ定めた事前分布 $p(z)=\mathcal{N}(0,I)$ に近づけるための正則化項。KLダイバージェンス の定義通り、2つの分布のずれを測る量である
この KL項があることで、潜在空間全体がなめらかな正規分布に近い形にまとまり、学習データにない $z$ をサンプリングしても Decoder が自然なデータを生成できるようになります。これが通常の AutoEncoder との決定的な違いです。
2. GAN(Generative Adversarial Network, 敵対的生成ネットワーク)
基本構造
GAN は2つのネットワークを競わせることでデータ分布を学習します。
| プレイヤー | 役割 |
|---|---|
| Generator(生成器)$G$ | ランダムノイズ $z$ から偽のデータ $G(z)$ を生成し、Discriminator を騙そうとする |
| Discriminator(識別器)$D$ | 入力されたデータが本物(訓練データ)か偽物(Generator が生成したもの)かを見分けようとする |
この2者は互いに反対の目的を持ちながら同時に学習されます。この関係は、しばしば「偽札を作る偽造者(Generator)」と「偽札を見破ろうとする警察(Discriminator)」の対立に例えられます。
目的関数(minimax ゲーム)
\[\min_G \max_D \; \mathbb{E}_{x\sim p_{\text{data}}}[\log D(x)] + \mathbb{E}_{z\sim p_z}[\log(1 - D(G(z)))]\]- $D$ の立場:本物データ $x$ に対しては $D(x)$ を1に近づけ、偽物 $G(z)$ に対しては $D(G(z))$ を0に近づけたい(=右辺全体を最大化したい)
- $G$ の立場:Discriminator に見破られないよう、$D(G(z))$ を1に近づけたい(=右辺全体を最小化したい、特に第2項を小さくしたい)
学習が理想的に収束すると、Generator が生成するデータの分布は訓練データの真の分布 $p_{\text{data}}$ に一致し、Discriminator はもはや本物と偽物を見分けられなくなります($D(x) = 0.5$ に収束)。
学習の不安定性
GAN は2つのネットワークの動的な競争によって学習が進むため、通常の教師あり学習に比べて不安定になりやすいという課題があります。
- モード崩壊(Mode Collapse):Generator が、訓練データの多様なパターンのうち一部(またはごく限られたパターン)だけを生成するようになり、多様性を失ってしまう現象。Discriminator を一時的に騙せるパターンを見つけると、そこに固執してしまうことが原因とされる
- 勾配消失:Discriminator が Generator よりも早く強くなりすぎると、$D(G(z))$ が常にほぼ0(偽物と完全に見破られる状態)に張り付いてしまい、Generator 側の勾配 $\log(1-D(G(z)))$ がほぼ0になって学習が進まなくなる
派生モデル
- DCGAN(Deep Convolutional GAN):Generator・Discriminator の両方に畳み込み層を導入し、画像生成タスクでの性能と学習の安定性を高めたモデル
- Conditional GAN(cGAN):ノイズ $z$ に加えて条件ラベル $y$(例:生成したい数字のクラス)を Generator・Discriminator の両方に入力することで、生成するデータの種類を制御できるようにしたモデル
3. 拡散モデル(Diffusion Model)
近年、画像生成において GAN に匹敵、あるいはそれを上回る性能を示すようになった手法です。
2つのプロセス
| プロセス | 内容 |
|---|---|
| Forward Process(拡散過程) | 元データに、あらかじめ定めたスケジュールに従って少しずつガウスノイズを加えていき、最終的にはほぼ純粋なノイズにしてしまう。学習パラメータを持たない、固定された処理 |
| Reverse Process(逆拡散過程) | ノイズだけの状態から、ノイズを段階的に取り除いて元のデータに近いものを復元していく過程。この「ノイズ除去」をニューラルネットワークに学習させる |
Forward Process の定式化
各ステップ $t$ で、直前のデータ $x_{t-1}$ に少量のノイズを加えます。
\[x_t = \sqrt{1-\beta_t}\, x_{t-1} + \sqrt{\beta_t}\, \epsilon_t, \qquad \epsilon_t \sim \mathcal{N}(0, I)\]$\beta_t$ はステップ $t$ でどれだけノイズを加えるかを制御する(あらかじめ決めておく)スケジュールパラメータです。この過程を十分な回数(例えば1000ステップ)繰り返すと、$x_T$ はほぼ標準正規分布に従うノイズになります。
Reverse Process と学習対象
モデルが学習するのは「ある時刻 $t$ のノイズ付きデータ $x_t$ から、そこに加えられたノイズ $\epsilon$ そのものを予測する」というタスクです(DDPM: Denoising Diffusion Probabilistic Models の定式化)。ノイズ $\epsilon_\theta(x_t, t)$ を予測できれば、そこから $x_{t-1}$ を計算で復元できます。学習の損失関数は、真のノイズと予測ノイズの誤差(多くの場合、単純な平均二乗誤差)です。
生成時(推論時)には、標準正規分布からサンプリングしたノイズ $x_T$ から出発し、学習済みモデルで少しずつノイズを取り除く($x_T \to x_{T-1} \to \cdots \to x_0$)ことで、新しいデータを生成します。
GAN・VAEとの比較
| VAE | GAN | 拡散モデル | |
|---|---|---|---|
| 学習の安定性 | 比較的安定 | 不安定になりやすい(モード崩壊等) | 比較的安定 |
| 生成品質 | やや不鮮明になりやすい | 高品質だが多様性に課題が出ることも | 高品質かつ多様性も確保しやすい |
| サンプリング速度 | 速い(1回のDecoderで生成) | 速い(1回のGeneratorで生成) | 遅い(多数のステップを逐次実行する必要がある) |
拡散モデルは高品質な生成が可能な一方、生成のたびに多数のノイズ除去ステップを繰り返す必要があるため、サンプリング速度の遅さが実用上の課題となります(高速化のための研究が多く行われている領域です)。
4. 自己回帰系生成モデル(画像)
PixelRNN / PixelCNN
画像を1枚の同時分布 $p(x)$ とみなし、これを画素の連鎖律で分解して逐次的にモデル化するアプローチです。
\[p(x) = \prod_{i=1}^{n} p(x_i \mid x_1, \ldots, x_{i-1})\]画素をあらかじめ定めた順序(例えば左上から右下へのラスタスキャン順)に並べ、それまでに生成済みの画素を条件として、次の画素の値(の確率分布)を予測します。PixelRNN は RNN(LSTM)を、PixelCNN はマスク付き畳み込み(未来の画素を参照しないように制約した畳み込み)を用いてこれを実現します。
LLM の自己回帰生成との類似点・相違点:
- 類似点:どちらも同時分布を連鎖律で条件付き分布の積に分解し、「既知の部分から次の要素を予測する」という自己回帰的な枠組みで学習する点は共通している(LLMの条件付き確率分布と尤度 の連鎖律の議論がそのまま当てはまる)
- 相違点:LLM のトークン列は本質的に1次元の系列だが、画像は2次元の構造を持つため、画素をどの順序で並べて1次元の系列とみなすか(ラスタスキャン順など)という設計上の工夫が必要になる。また、画素値は連続的な階調(あるいは256階調のカテゴリ)を持つため、語彙上のカテゴリカル分布とは異なる出力表現の工夫が必要になる場合もある
5. まとめ
| モデル | 潜在変数の扱い | 学習の安定性 | サンプリング速度 |
|---|---|---|---|
| VAE | 明示的な確率分布として学習(KL項で正則化) | 安定 | 速い |
| GAN | 明示的な潜在変数分布は仮定せず、敵対的学習で分布を学習 | 不安定になりやすい | 速い |
| 拡散モデル | 多段階のノイズ除去過程として暗に学習 | 安定 | 遅い(多ステップ) |
- VAE は「事後分布と事前分布を近づける」という明示的な確率的枠組み(KLダイバージェンス)を持ち、理論的に扱いやすい一方、生成画像がやや不鮮明になりやすい
- GAN は敵対的学習によって高品質な生成が可能だが、学習の不安定性(モード崩壊、勾配消失)が実用上の課題になる
- 拡散モデルはノイズ除去という単純なタスクの繰り返しに学習を落とし込むことで安定した高品質生成を実現するが、生成に時間がかかる
- 画像の自己回帰モデル(PixelRNN/PixelCNN)は、LLM と同じ「連鎖律による同時分布の分解」という数学的基盤を共有している