自己教師あり学習・生成モデルの基礎¶
キーワード:自己教師あり学習、オートエンコーダ、変分オートエンコーダ(VAE)、ELBO、再パラメータ化トリック、VQ-VAE、対照学習、生成モデル、敵対的生成ネットワーク(GAN)、隠れマルコフモデル(HMM)
要点
- 自己教師あり学習は、データ自身から作った課題(復元・マスク予測・同じ画像の別の見え方を近づける)で表現を学ぶ。ラベルは要らない。
- VAE は潜在変数 \(\mathbf{z}\) を確率変数として扱い、対数尤度の下界 ELBO(再構成項 \(-\) KL 項)を最大化する。サンプリングは再パラメータ化トリックで微分可能にする。
- GAN は、生成器と識別器が min-max ゲームをして、生成分布を本物のデータ分布に近づける。尤度を直接は使わない。
自己教師あり学習とは¶
データの一部から別の一部を当てる疑似課題(プレテキストタスク)を自分で作り、解く過程で有用な特徴表現を得る。得た表現は、少量のラベルによる微調整(ファインチューニング)や、表現を固定した線形分類(リニアプロービング)で下流のタスクに使う。
| 方式 | 課題 | 例 |
|---|---|---|
| 復元 | 入力そのものを再構成する | オートエンコーダ、ノイズ除去 AE |
| 欠損の予測 | 隠した部分を当てる | BERT(マスクされた語)、MAE(隠した画像パッチ) |
| 次の予測 | 過去から次の要素を当てる | GPT(次の単語)、CPC |
| 対照学習 | 同じ元データ由来の2つのビューを近づけ、他を遠ざける | SimCLR、MoCo |
| 自己蒸留 | 同じ入力の2つのビューで、一方のネットワークの出力を他方に合わせる | BYOL、DINO |
- 利点:ラベル付けが不要で、大量の未ラベルデータを使える。データ拡張(データ拡張)が「何を同じとみなすか」を決める。
オートエンコーダ(AE)¶
入力をボトルネック(低次元の潜在表現)に通して、入力自身を復元するよう学習する。
- \(\mathbf{z}\) は潜在変数(このページでは \(\mathbf{z}\) を潜在変数に使う。層の出力ではない)。\(\mathbf{z}\) の次元が入力より小さい(不完全)ことで、恒等写像を覚えるのを防ぎ、重要な特徴だけを残させる。
- 活性化が線形で損失が二乗誤差のとき、AE は PCA と同じ部分空間を学ぶ。非線形にすると PCA より曲がった構造を扱える。
- ノイズ除去 AE(DAE):入力にノイズを加えた \(\tilde{\mathbf{x}}\sim q(\tilde{\mathbf{x}}\mid\mathbf{x})\) を入力し、元の \(\mathbf{x}\) を復元させる。\(L=\frac1N\sum\|\mathbf{x}^{(i)}-g_\theta(f_\phi(\tilde{\mathbf{x}}^{(i)}))\|^2\)。少ないデータでもよい特徴が得られ、恒等写像を学べなくなる。
- スパース AE:潜在表現に L1 などの罰則を課し、少数のユニットだけが活性化するようにする。縮小 AE(CAE):エンコーダのヤコビ行列のノルム \(\|\partial\mathbf{z}/\partial\mathbf{x}\|_F^2\) を罰則にして、入力の小さな変化に鈍感な表現にする。
- 通常の AE は潜在空間の構造が不明で、ランダムな \(\mathbf{z}\) からうまく生成できるとは限らない。そこで潜在変数に確率分布を与えたのが VAE。
変分オートエンコーダ(VAE)¶
潜在変数付きの生成モデル。事前分布 \(p(\mathbf{z})=\mathcal{N}(\mathbf{0},\mathbf{I})\) から \(\mathbf{z}\) をとり、デコーダ \(p_\theta(\mathbf{x}\mid\mathbf{z})\) で \(\mathbf{x}\) を生成する。目標は周辺尤度 \(p_\theta(\mathbf{x})=\int p_\theta(\mathbf{x}\mid\mathbf{z})p(\mathbf{z})\,d\mathbf{z}\) の最大化だが、積分が解けず事後分布 \(p_\theta(\mathbf{z}\mid\mathbf{x})\) も求まらない。そこで事後分布をエンコーダ \(q_\phi(\mathbf{z}\mid\mathbf{x})\) で近似する(変分推論)。
導出:ELBO
\(\log p_\theta(\mathbf{x})=\mathbb{E}_{q}[\log p_\theta(\mathbf{x})]\) に \(p_\theta(\mathbf{x})=p_\theta(\mathbf{x},\mathbf{z})/p_\theta(\mathbf{z}\mid\mathbf{x})\) を代入し、\(q_\phi(\mathbf{z}\mid\mathbf{x})\) を分子分母に掛けると \(\log p_\theta(\mathbf{x})=\mathbb{E}_q\bigl[\log\frac{p_\theta(\mathbf{x},\mathbf{z})}{q_\phi(\mathbf{z}\mid\mathbf{x})}\bigr]+D_{\mathrm{KL}}(q_\phi\|p_\theta(\mathbf{z}\mid\mathbf{x}))\)。 第1項が ELBO。さらに \(p_\theta(\mathbf{x},\mathbf{z})=p_\theta(\mathbf{x}\mid\mathbf{z})p(\mathbf{z})\) を使うと「再構成項 \(-\) KL」の形になる。KL は 0 以上なので ELBO は \(\log p_\theta(\mathbf{x})\) の下界で、\(q\) が真の事後分布に一致したとき等号となる。
- 再構成項:サンプル \(\mathbf{z}\sim q_\phi\) をデコーダに通し、\(\mathbf{x}\) の対数尤度を評価する。\(\mathbf{x}\) が 0/1 ならベルヌーイで二値交差エントロピー \(-\sum_d\bigl[x_d\log\hat{x}_d+(1-x_d)\log(1-\hat{x}_d)\bigr]\)、実数なら分散固定の正規分布で二乗誤差(定数倍)になる。
- KL 項:近似事後分布を事前分布 \(\mathcal{N}(\mathbf{0},\mathbf{I})\) に近づける正則化。検算:\(\boldsymbol\mu=\mathbf{0},\ \boldsymbol\sigma=\mathbf{1}\) なら各項 \(1+0-0-1=0\) で KL \(=0\)。
- 再パラメータ化トリック:\(\mathbf{z}\) を直接サンプリングすると確率的な操作を通して勾配が流れない。乱数 \(\boldsymbol\varepsilon\) を外に出し、\(\mathbf{z}\) を \(\boldsymbol\mu,\boldsymbol\sigma\) の決定的な関数にすれば、誤差逆伝播法で学習できる。
- 生成時はエンコーダを捨て、\(\mathbf{z}\sim\mathcal{N}(\mathbf{0},\mathbf{I})\) をデコーダに通す。KL 項が潜在空間を事前分布の周りに整えているので、サンプルが意味のあるデータになる。
課題
- 生成画像がぼやける(二乗誤差・単峰の正規分布が平均的な像を好むため)→ GAN が改善する。
- 事後崩壊(posterior collapse):デコーダが強いと、潜在変数を無視して \(q_\phi(\mathbf{z}\mid\mathbf{x})\approx p(\mathbf{z})\) となり、KL 項が 0 に張り付く。学習初期は KL の重みを小さくして徐々に増やす(KL アニーリング)、潜在変数を離散化する(VQ-VAE)などで対処する。
- \(\beta\)-VAE:KL 項に係数 \(\beta>1\) を掛けて、潜在変数の各次元が独立な要因を表すよう促す(もつれの解消)。
VQ-VAE¶
潜在変数を離散にする。エンコーダ出力 \(\mathbf{z}_e\) を、学習するコードブック \(\{\mathbf{e}_1,\dots,\mathbf{e}_K\}\) の最も近いベクトルに置き換える(ベクトル量子化)。高品質な画像・音声の生成や、離散トークン化に使われる。
- \(\hat{\mathbf{x}}=g_\theta(\mathbf{z}_q)\)。\(\mathrm{sg}[\cdot]\) はストップグラジェント:順伝播では恒等写像、逆伝播では勾配を 0 にする。
- 事後分布が one-hot(決定的)で事前分布が一様 \(1/K\) なら、KL 項は \(\log K\) の定数になり、損失に入れなくてよい。
- 最近傍の選択(\(\arg\min\))は微分できないので、逆伝播では量子化を飛ばして \(\mathbf{z}_q\) の勾配をそのまま \(\mathbf{z}_e\) に渡す(ストレートスルー推定)。
- コードブック損失はコードを \(\mathbf{z}_e\) に近づけ(更新されるのはコードのみ)、コミットメント損失はエンコーダの出力がコードから離れすぎないようにする(\(\beta\) はその強さ)。
対照学習¶
同じデータから作った2つのビュー(例:同じ画像の別々の切り抜き)の表現を近づけ、他のデータの表現を遠ざける。バッチ内の他サンプルを負例として使う。
- \((i,j)\) が正例のペア、\(k\) は \(i\) 以外のすべて。InfoNCE(NT-Xent)損失と呼ばれ、形はソフトマックス交差エントロピーで、「\(N\) 個の候補から正例を当てる」分類問題。
- 温度 \(\tau\) が小さいほど、難しい負例を重く扱う。負例が多いほど学習が安定するので、大きなバッチやメモリバンク(MoCo)を使う。
- 自己蒸留(BYOL、DINO)は負例を使わず、教師役のネットワークを指数移動平均で更新するなどして、全表現が同じ値に潰れる(崩壊)のを防ぐ。
生成モデルの分類¶
データ分布 \(p(\mathbf{x})\) を学習し、新しいサンプルを作るモデル。
| 分類 | 密度の扱い | 代表例 |
|---|---|---|
| 明示的・厳密 | 尤度を厳密に計算できる | 自己回帰モデル、正規化フロー |
| 明示的・近似 | 尤度の下界などを使う | VAE、拡散モデル |
| 暗黙的 | 尤度を持たず、サンプリングだけできる | GAN |
- 分類・回帰のように \(P(y\mid\mathbf{x})\) だけを学ぶ識別モデルに対し、\(P(\mathbf{x},y)\) や \(P(\mathbf{x})\) を学ぶのが生成モデル(ナイーブベイズ、GMM、HMM も生成モデル)。
- 拡散モデルなどの応用は生成モデルで扱う。
GAN(敵対的生成ネットワーク)¶
生成器 \(G_\theta\)(ノイズ \(\mathbf{z}\sim p(\mathbf{z})\) から偽データ \(G_\theta(\mathbf{z})\) を作る)と、識別器 \(D_\phi\)(入力が本物である確率 \(D_\phi(\mathbf{x})\in[0,1]\) を出す)を競わせる。
- 学習の手順:①識別器を更新(\(G\) を固定。本物をラベル 1、偽物をラベル 0 にした二値交差エントロピー)、②生成器を更新(\(D\) を固定。偽物を「本物」と判定させる)、を交互に繰り返す。
- \(L_G=-\log D(G(\mathbf{z}))\) は非飽和の損失。もとの \(\log(1-D(G(\mathbf{z})))\) を最小化すると、学習初期に \(D\) が偽物を簡単に見破るとき(\(D\approx0\))勾配がほぼ 0 になって学べないので、こちらを使う。
最適な識別器と JS ダイバージェンス
\(G\) を固定すると \(V=\int\bigl[p_{\mathrm{data}}\log D+p_g\log(1-D)\bigr]d\mathbf{x}\)(\(p_g\) は生成分布)。点ごとに微分して 0 とおくと \(D^*(\mathbf{x})=\dfrac{p_{\mathrm{data}}(\mathbf{x})}{p_{\mathrm{data}}(\mathbf{x})+p_g(\mathbf{x})}\)。 これを戻すと \(V=-\log4+2\,D_{\mathrm{JS}}(p_{\mathrm{data}}\|p_g)\)。JS ダイバージェンスは 0 以上で、\(p_g=p_{\mathrm{data}}\) のとき 0 なので、大域的な最適解は \(p_g=p_{\mathrm{data}}\)(このとき \(D^*=1/2\) で、識別器は本物と偽物を見分けられない。ナッシュ均衡)。
課題
- モード崩壊:生成器が一部のパターンしか作らなくなる。
- 勾配消失:識別器が強すぎると、生成器に有益な勾配が伝わらない。モード崩壊と勾配消失の間で、識別器の学習の度合いにジレンマがある。
- 収束しない:非凸の 2 人ゼロサムゲームなので、勾配法が均衡(鞍点)に収束する保証がない。損失の値からは学習をいつ止めるべきか、画質がどうかも判断しにくい。
- 高解像度では識別が簡単になり、メモリの都合でバッチも小さくなって不安定になる。
| 派生 | 内容 |
|---|---|
| DCGAN | 畳み込みで構成。生成器は転置畳み込みでアップサンプリング、識別器はストライド付き畳み込み。プーリングと全結合を使わない。バッチ正規化(生成器の出力層と識別器の入力層は除く)、生成器の出力は tanh、識別器は Leaky ReLU |
| 条件付き GAN(CGAN) | 条件 \(\mathbf{c}\)(クラスラベルなど)を \(G\) と \(D\) に与える。\(D(\mathbf{x}\mid\mathbf{c})\)、\(G(\mathbf{z}\mid\mathbf{c})\) |
| pix2pix | 画像から画像への変換。条件画像 \(\mathbf{x}\) と本物 \(\mathbf{y}\) のペアを使う。\(G^*=\arg\min_G\max_D L_{\mathrm{cGAN}}(G,D)+\lambda\,\mathbb{E}\Vert \mathbf{y}-G(\mathbf{x},\mathbf{z})\Vert _1\) |
| WGAN | JS の代わりにワッサースタイン距離を使う。識別器(批評家)に 1-リプシッツ制約を課し、モード崩壊と勾配消失を緩和 |
| PGGAN など | 低解像度から段階的に大きくして、高解像度を安定して学習 |
- pix2pix のU-Net 生成器は、エンコーダの浅い層の情報をスキップ接続でデコーダへ渡し、輪郭などの細部を保つ。PatchGAN 識別器は画像を小領域(パッチ)に分け、それぞれが本物か判定して平均する(パラメータが少なく、局所的な質感を見る)。L1 損失は全体の構造を合わせ、L2 よりぼやけにくい。ノイズ \(\mathbf{z}\) はドロップアウトで代用する。
隠れマルコフモデル(HMM)¶
観測できない状態の系列 \(q_1,\dots,q_T\) がマルコフ連鎖をなし、各時刻の状態から観測 \(o_t\) が出力されるとする生成モデル。パラメータは \(\lambda=(\mathbf{A},\mathbf{B},\boldsymbol\pi)\):遷移確率 \(a_{ij}=P(q_{t+1}=j\mid q_t=i)\)、出力確率 \(b_i(o)=P(o_t=o\mid q_t=i)\)、初期確率 \(\pi_i=P(q_1=i)\)。
| 問題 | アルゴリズム | 内容 |
|---|---|---|
| 評価:\(P(o_{1:T}\mid\lambda)\) | 前向きアルゴリズム | \(\alpha_t(i)=P(o_{1:t},q_t=i\mid\lambda)\)。\(\alpha_1(i)=\pi_ib_i(o_1)\)、\(\alpha_{t+1}(j)=\bigl[\sum_i\alpha_t(i)a_{ij}\bigr]b_j(o_{t+1})\)、\(P=\sum_i\alpha_T(i)\) |
| 復号:最尤状態系列 | ビタビアルゴリズム | \(\delta_t(j)=\max_i\delta_{t-1}(i)\,a_{ij}\,b_j(o_t)\) と argmax を記録し、最後から逆にたどる |
| 学習:\(\lambda\) の推定 | Baum-Welch(EM) | E ステップで \(\gamma,\xi\) を求め、M ステップで \(\lambda\) を更新 |
- \(\beta_t(i)=P(o_{t+1:T}\mid q_t=i,\lambda)\) は後ろ向き確率(\(\beta_T(i)=1\)、\(\beta_t(i)=\sum_ja_{ij}b_j(o_{t+1})\beta_{t+1}(j)\))。\(\gamma_t(i)\) は時刻 \(t\) に状態 \(i\) にいる確率、\(\xi_t(i,j)\) は \(t\) に \(i\)、\(t+1\) に \(j\) にいる確率。
- 出力確率は、離散なら \(\hat{b}_j(v)=\sum_{t:o_t=v}\gamma_t(j)\big/\sum_t\gamma_t(j)\)。連続なら各状態をガウス(混合)にする。
- 素朴に全状態系列を足すと \(O(S^T)\) だが、前向き・ビタビは動的計画法で \(O(TS^2)\)(\(S\) は状態数)。
- Baum-Welch は GMM の EM と同じ構造で、各反復で尤度は減らず、局所解に収束する。
- 音声認識や品詞タグ付けに使われた。同じ系列ラベリングを条件付き確率で扱う識別モデルが CRF。
試験の着眼点¶
- AE の損失は再構成誤差。ボトルネックで恒等写像を防ぐ。DAE はノイズを加えた入力から元の入力を復元する。
- VAE の損失 \(=\) 再構成誤差 \(+\) KL(\(=-\mathrm{ELBO}\))。KL は閉じた式 \(-\frac12\sum(1+\log\sigma^2-\mu^2-\sigma^2)\)。再パラメータ化トリックは \(\mathbf{z}=\boldsymbol\mu+\boldsymbol\sigma\odot\boldsymbol\varepsilon\) で、逆伝播を可能にするため。
- VAE の課題:生成のぼやけ、事後崩壊。VQ-VAE は離散潜在変数で、ストレートスルーとストップグラジェントを使い、KL 項は定数になる。
- GAN は min-max。最適識別器は \(p_{\mathrm{data}}/(p_{\mathrm{data}}+p_g)\) で、最適解では \(D=1/2\)。目的関数は JS ダイバージェンス。課題はモード崩壊・勾配消失・収束性。
- DCGAN、CGAN、pix2pix(U-Net、PatchGAN、L1)の特徴を区別する。
- HMM は生成モデル(遷移・出力・初期確率)。前向きアルゴリズムで尤度、ビタビで最尤系列、Baum-Welch(EM)で学習。
参考¶
- Auto-Encoding Variational Bayes(Kingma, Welling, 2013)
- Stochastic Backpropagation and Approximate Inference in Deep Generative Models(Rezende ら, 2014)
- Neural Discrete Representation Learning(van den Oord ら, 2017)
- Generative Adversarial Networks(Goodfellow ら, 2014)
- Conditional Generative Adversarial Nets(Mirza, Osindero, 2014)
- Unsupervised Representation Learning with Deep Convolutional GANs(Radford ら, 2015)
- Image-to-Image Translation with Conditional Adversarial Networks(Isola ら, 2016)
- Wasserstein GAN(Arjovsky ら, 2017)
- A Simple Framework for Contrastive Learning of Visual Representations(Chen ら, 2020)
- BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(Devlin ら, 2018)
- A tutorial on hidden Markov models and selected applications in speech recognition(Rabiner, 1989, Proceedings of the IEEE)