深層学習

GANの学習安定化

GANで起きるモード崩壊や勾配消失を、分布間距離と識別器のリプシッツ制約の観点から切り分け、WGAN・勾配ペナルティ・スペクトル正規化の役割を整理します。

  • B|標準
  • 深層学習

数式の記号で止まったら 記号の読み方 (∂・⊙・転置・上付き添字を、読み方から)

ひとことで言うと

GANの学習安定化は、生成器の更新に使う信号を途切れさせず、生成分布の一部だけに偏らせないための設計です。典型的な失敗は、生成器が似たサンプルばかり出すモード崩壊と、識別器が強くなりすぎて生成器へ有効な勾配が戻らないことです。

審査員と練習者の対戦で、審査員が毎回「不合格」と言うだけでは練習者は改善点を得られません。採点の尺度を滑らかにし、どの方向へ直せば合格に近づくかが返る状態を作るのが安定化です。

なぜ必要か

通常のGANでは、初期の生成サンプルと実データがほとんど重ならないことがあります。このとき識別器は容易に見分けられ、生成器の損失は飽和しやすくなります。さらに生成器が識別器をだませる少数のパターンへ集中すると、見かけの判定結果は改善してもデータ分布の別のモードを捨てます。したがって、損失の値だけでなく、サンプルの多様性と識別器からの勾配を同時に確認します。

Salimansらの論文は、特徴量マッチングやミニバッチに関する方法を含む複数の構造・学習手順をGANへ適用し、安定化を単一の技巧に限定していません。ここでは、分布間距離を置き換える方法と、識別器の関数を制約する方法を分けて覚えると実装時の切り分けが容易です。

観測する症状まず疑うこと対処の方向
似た出力ばかりになる生成器が一部のモードに集中多様性を評価し、特徴量や分布の差を使う
識別器の確信度だけが高い生成器へ戻る勾配が飽和criticの尺度や関数の滑らかさを見直す
損失曲線と品質が対応しない確率損失が分布差をよく表していないWasserstein距離に基づく評価を検討する

仕組み

WGANは、識別器を確率分類器ではなくcritic(評価関数)として扱い、生成分布 PgP_g と実データ分布 PrP_r のWasserstein距離を、1-Lipschitz関数の期待値差で評価します。ff はcritic、E\mathbb{E} は分布上の平均です。

W(Pr,Pg)=sup⁡∥f∥L≤1(Ex∼Pr[f(x)]−Ex~∼Pg[f(x~)])W(P_r,P_g)=\sup_{\lVert f\rVert_L\leq 1}\left(\mathbb{E}_{\mathbf{x}\sim P_r}[f(\mathbf{x})]-\mathbb{E}_{\tilde{\mathbf{x}}\sim P_g}[f(\tilde{\mathbf{x}})]\right)

確率の対数を直接押し上げる構造と違い、criticは本物らしさの連続的な尺度を返します。これにより、WGAN論文は学習の安定化、モード崩壊の軽減、デバッグに使える学習曲線を主張しました。ただし1-Lipschitz制約が必要です。元論文の実装は重みを区間へクリップしますが、論文自身もこの方法の問題を認めています。

勾配ペナルティは、補間点 x^\hat{\mathbf{x}} における入力勾配のノルムを1へ近づける正則化です。λ\lambda はペナルティの強さ、ff はcriticです。

LGP=λ Ex^(∥∇x^f(x^)∥2−1)2\mathcal{L}_{\mathrm{GP}}=\lambda\,\mathbb{E}_{\hat{\mathbf{x}}}\left(\lVert\nabla_{\hat{\mathbf{x}}}f(\hat{\mathbf{x}})\rVert_2-1\right)^2

これはWasserstein距離そのものの置き換えではなく、criticが急峻になりすぎないよう制約を目的関数へ加える方法です。スペクトル正規化は各重み行列 WW を最大特異値 σ(W)\sigma(W) で割り、層の作用を制御します。

Wˉ=Wσ(W)\bar{W}=\frac{W}{\sigma(W)}

勾配ペナルティがサンプル依存の入力勾配を計算するのに対し、スペクトル正規化は重みの作用素空間を直接正規化します。そのため、前者は追加の勾配計算、後者は各層の正規化という違いになります。

試験でどう問われるか

問われ方正解に寄る条件引っかけ
モード崩壊の説明少数のパターンへ生成が偏り、多様なモードを表せない画素値がすべて同じになる現象だけと限定する
識別器が強すぎる場合生成器への勾配が弱くなり、更新方向が得にくい識別精度が高いほど必ず学習が良いとする
WGANのcritic1-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関数のクラスに制限します。元論文の実装では重みクリッピングを使います。

勾配ペナルティとスペクトル正規化の違いは何か

勾配ペナルティは補間点の入力勾配を正則化し、スペクトル正規化は重みの最大特異値を正規化します。

出典