ひとことで言うと
GANの学習安定化は、生成器の更新に使う信号を途切れさせず、生成分布の一部だけに偏らせないための設計です。典型的な失敗は、生成器が似たサンプルばかり出すモード崩壊と、識別器が強くなりすぎて生成器へ有効な勾配が戻らないことです。
審査員と練習者の対戦で、審査員が毎回「不合格」と言うだけでは練習者は改善点を得られません。採点の尺度を滑らかにし、どの方向へ直せば合格に近づくかが返る状態を作るのが安定化です。
なぜ必要か
通常のGANでは、初期の生成サンプルと実データがほとんど重ならないことがあります。このとき識別器は容易に見分けられ、生成器の損失は飽和しやすくなります。さらに生成器が識別器をだませる少数のパターンへ集中すると、見かけの判定結果は改善してもデータ分布の別のモードを捨てます。したがって、損失の値だけでなく、サンプルの多様性と識別器からの勾配を同時に確認します。
Salimansらの論文は、特徴量マッチングやミニバッチに関する方法を含む複数の構造・学習手順をGANへ適用し、安定化を単一の技巧に限定していません。ここでは、分布間距離を置き換える方法と、識別器の関数を制約する方法を分けて覚えると実装時の切り分けが容易です。
| 観測する症状 | まず疑うこと | 対処の方向 |
|---|---|---|
| 似た出力ばかりになる | 生成器が一部のモードに集中 | 多様性を評価し、特徴量や分布の差を使う |
| 識別器の確信度だけが高い | 生成器へ戻る勾配が飽和 | criticの尺度や関数の滑らかさを見直す |
| 損失曲線と品質が対応しない | 確率損失が分布差をよく表していない | Wasserstein距離に基づく評価を検討する |
仕組み
WGANは、識別器を確率分類器ではなくcritic(評価関数)として扱い、生成分布 と実データ分布 のWasserstein距離を、1-Lipschitz関数の期待値差で評価します。 はcritic、 は分布上の平均です。
確率の対数を直接押し上げる構造と違い、criticは本物らしさの連続的な尺度を返します。これにより、WGAN論文は学習の安定化、モード崩壊の軽減、デバッグに使える学習曲線を主張しました。ただし1-Lipschitz制約が必要です。元論文の実装は重みを区間へクリップしますが、論文自身もこの方法の問題を認めています。
勾配ペナルティは、補間点 における入力勾配のノルムを1へ近づける正則化です。 はペナルティの強さ、 はcriticです。
これはWasserstein距離そのものの置き換えではなく、criticが急峻になりすぎないよう制約を目的関数へ加える方法です。スペクトル正規化は各重み行列 を最大特異値 で割り、層の作用を制御します。
勾配ペナルティがサンプル依存の入力勾配を計算するのに対し、スペクトル正規化は重みの作用素空間を直接正規化します。そのため、前者は追加の勾配計算、後者は各層の正規化という違いになります。
試験でどう問われるか
| 問われ方 | 正解に寄る条件 | 引っかけ |
|---|---|---|
| モード崩壊の説明 | 少数のパターンへ生成が偏り、多様なモードを表せない | 画素値がすべて同じになる現象だけと限定する |
| 識別器が強すぎる場合 | 生成器への勾配が弱くなり、更新方向が得にくい | 識別精度が高いほど必ず学習が良いとする |
| WGANのcritic | 1-Lipschitz関数を用い、Wasserstein距離を評価する | sigmoid確率を返す通常の識別器と同一視する |
| 勾配ペナルティ | 補間点で入力勾配のノルムを1へ近づける | 重みそのものを一律にクリップする方法と混同する |
| スペクトル正規化 | 最大特異値で重みを正規化し、識別器を制御する | 全特異値を1にする正規直交化と混同する |
実装で確かめる
スペクトル正規化の核心は、行列全体の大きさではなく最大特異値で割ることです。次のコードは、正規化前後の最大特異値を確認します。
import numpy as np
W = np.array([[3.0, 0.0], [0.0, 1.0]])
sigma = np.linalg.svd(W, compute_uv=False)[0]
W_sn = W / sigma
print("before:", sigma)
print("after:", np.linalg.svd(W_sn, compute_uv=False)[0])
出力は before: 3.0 と after: 1.0 です。実際のGANではこの正規化を識別器の各重みへ組み込みます。WGANを試す場合は、criticの出力を確率と解釈せず、制約の実装方法と更新回数も一組で確認します。
取り違えやすいもの
| 手法 | 何を安定化するか | 実装上の見分け方 |
|---|---|---|
| WGAN | 分布間の評価尺度とcriticの学習信号 | sigmoid確率ではなくcriticの実数出力を使う |
| 重みクリッピング | criticの重みの値域 | 更新後に各重みを区間へ切る |
| 勾配ペナルティ | 補間点でのcriticの入力勾配 | 勾配ノルムと1との差を損失へ加える |
| スペクトル正規化 | 各線形層の最大伸長率 | 重みを最大特異値で割る |
| 特徴量マッチング | 生成器が識別器の特徴統計を合わせるようにする | 識別器の中間特徴の期待値を比較する |
想起チェック
モード崩壊とは何か
生成器がデータ分布の複数のモードを表さず、少数の似たパターンへ出力を集中させることです。
WGANでcriticに課す制約は何か
criticを1-Lipschitz関数のクラスに制限します。元論文の実装では重みクリッピングを使います。
勾配ペナルティとスペクトル正規化の違いは何か
勾配ペナルティは補間点の入力勾配を正則化し、スペクトル正規化は重みの最大特異値を正規化します。