これまで、ベイズの定理、ベイズ推定、変分ベイズについて学んできました。
数式変形がちょっと面倒でしたが、理解としては事前分布、尤度関数、周辺分布から事後分布を計算しますが、周辺分布の計算が難しいためいろいろ工夫がされています。
今回はこの辺りを利用して実際に利用ができるVAEについてみてみたいと思います。
例によってChatGPTに聞いてみます。
もちろん、数式を適切に $ で囲むように変更します。
1. VAEの目的
VAEの目標は、観測データ \mathbf{x} に対して、その生成元である潜在変数 \mathbf{z} を見つけ、\mathbf{z} に基づいて新しいデータ \mathbf{x} を生成することです。
具体的には、生成確率モデル p(\mathbf{x}|\mathbf{z}) を学習し、未知のデータが与えられたときに、そのデータの分布をサンプリングできるようにすることが目標です。
2. VAEの確率モデル
VAEは、潜在変数モデルとして、次の確率モデルを仮定します。
- 生成過程:
- 潜在変数 \mathbf{z} は事前分布 p(\mathbf{z}) からサンプリングされます(通常は正規分布を仮定)。
- 観測データ \mathbf{x} は、潜在変数 \mathbf{z} に基づいて生成されます。すなわち、p(\mathbf{x}|\mathbf{z}) は観測データの生成確率です。
しかし、\mathbf{z} は観測されないため、データ \mathbf{x} に基づいて \mathbf{z} を推定する必要があります。
3. 変分推論とELBO
潜在変数 \mathbf{z} の事後分布 p(\mathbf{z}|\mathbf{x}) は直接計算することが難しいため、変分ベイズ法を用いて、簡単に計算可能な分布 q(\mathbf{z}|\mathbf{x}) で近似します。この際に最小化する目的関数が、Evidence Lower Bound(ELBO) です。
ELBOは、以下のように定義されます。
\log p(\mathbf{x}) \geq \mathbb{E}_{q(\mathbf{z}|\mathbf{x})} \left[\log p(\mathbf{x}|\mathbf{z})\right] - D_{\mathrm{KL}} \left(q(\mathbf{z}|\mathbf{x}) \| p(\mathbf{z})\right)
ここで、
- \log p(\mathbf{x}): 観測データ \mathbf{x} の対数尤度
- q(\mathbf{z}|\mathbf{x}): 近似事後分布
- p(\mathbf{x}|\mathbf{z}): 生成分布
- D_{\mathrm{KL}}: KLダイバージェンス
ELBOの2つの項を簡単に説明すると:
- 復元誤差: \mathbb{E}_{q(\mathbf{z}|\mathbf{x})} \left[\log p(\mathbf{x}|\mathbf{z})\right] は、観測データ \mathbf{x} を潜在変数 \mathbf{z} から再構築する誤差を表します。これを最大化することで、データの再構築精度が向上します。
- 正則化項: D_{\mathrm{KL}} \left(q(\mathbf{z}|\mathbf{x}) \| p(\mathbf{z})\right) は、近似事後分布 q(\mathbf{z}|\mathbf{x}) と事前分布 p(\mathbf{z}) の違いを測る項であり、この差を最小化することで、潜在変数 \mathbf{z} が事前分布に従うようにします。
4. VAEのエンコーダとデコーダ
VAEは、ニューラルネットワークを使って次の2つの役割を担います。
- エンコーダ: 入力データ \mathbf{x} から潜在変数 \mathbf{z} の分布 q(\mathbf{z}|\mathbf{x}) を近似するネットワーク。エンコーダは通常、\mathbf{x} から平均 \mu(\mathbf{x}) と分散 \sigma(\mathbf{x}) を出力し、潜在変数 \mathbf{z} を以下のようにサンプリングします。
\mathbf{z} = \mu(\mathbf{x}) + \sigma(\mathbf{x}) \odot \epsilon
ここで \epsilon \sim \mathcal{N}(0, I) は標準正規分布からのサンプルです。
- デコーダ: サンプリングされた潜在変数 \mathbf{z} からデータ \mathbf{x} を再構築するネットワーク。デコーダは、生成分布 p(\mathbf{x}|\mathbf{z}) に対応します。
5. VAEの損失関数
VAEの学習は、ELBOを最大化することに対応します。すなわち、以下の損失関数を最小化します。
\mathcal{L}_{\text{VAE}} = -\mathbb{E}_{q(\mathbf{z}|\mathbf{x})} \left[\log p(\mathbf{x}|\mathbf{z})\right] + D_{\mathrm{KL}} \left(q(\mathbf{z}|\mathbf{x}) \| p(\mathbf{z})\right)
この損失関数は、再構築誤差とKLダイバージェンスを組み合わせた形になっています。
このように、VAEは変分推論を利用してデータの生成モデルを学習し、データの再構築と生成の両方に優れた能力を持つモデルです。
VAEの利用用途に関して、「入力データと出力データが似ているだけなら、どのように応用されるのか?」という疑問は自然なものです。しかし、VAEの強みは単にデータを再構築するだけでなく、データの生成や特徴抽出、さらには新しいサンプルを作り出すことにあります。いくつか具体的な応用例を通じて、VAEの利点を説明します。
1. 新しいデータの生成
VAEの最大の強みは、新しいデータを生成できる点です。VAEは、入力データから学習した潜在空間を使って、新しいデータサンプルを生成することが可能です。例えば、手書き文字のデータセットで訓練されたVAEは、訓練データに存在しない新しい手書き文字のような画像を生成することができます。
- 応用例:
- 画像生成: 画像生成アプリケーションでは、VAEを使って既存の画像データから新しい画像を生成できます。
- 異常検知: 正常データを用いてVAEを学習させると、異常なデータ(再構築が難しいデータ)が発見できます。つまり、出力が入力と大きく異なる場合、異常なデータと見なされます。
2. 次元削減と特徴抽出
VAEは、データを潜在空間(低次元の圧縮された特徴空間)に変換することができます。この潜在空間は、入力データの背後にある重要な特徴を圧縮して保持しているため、次元削減やデータの特徴抽出に役立ちます。
- 応用例:
- データの可視化: 高次元データ(画像データなど)をVAEで低次元の潜在変数に変換することで、データの分布やクラスタリング構造を可視化できます。
- 特徴ベクトルの抽出: 潜在空間から得られる特徴ベクトルを使って、データのクラスタリングや分類など、機械学習の他のタスクに応用することができます。
3. データのノイズ除去
VAEは、入力データに含まれるノイズを除去し、クリーンなデータを再構築する能力もあります。これは、データの背後にある潜在的な構造を学習することで実現されます。例えば、ノイズのある画像を入力として与えた場合、VAEは元のきれいな画像を再構築できることがあります。
- 応用例:
- ノイズ除去: 写真や音声などのデータセットにノイズが含まれている場合、VAEを使用してノイズのない元のデータに近い形に再構築することが可能です。
4. 異常検知
VAEは、正常なデータからの再構築誤差が小さく、異常なデータでは再構築誤差が大きくなるため、異常検知に非常に有効です。訓練データとして正常データを使用することで、VAEは正常データの分布を学習し、異常なデータが入力された場合、それを適切に再構築できないため、異常として検知できます。
- 応用例:
- 産業機械の異常検知: 正常な動作データを基に機械学習を行い、異常な動作データが現れた際に異常を検出することができます。
5. データの生成的モデリング
VAEは生成モデルであり、新しいデータポイントを生成するために使用されます。潜在空間におけるサンプリングにより、従来のデータセットには含まれない、しかしその分布に従うような新しいデータを生成できます。
- 応用例:
- 医療データの拡張: 限られた患者データから新しい患者データを生成し、データ拡張を行うことで、機械学習モデルのトレーニングを改善することが可能です。
まとめ
VAEの利用用途は、単に入力データを再構築するだけではなく、新しいデータを生成したり、データの背後にある重要な特徴を抽出する点にあります。画像や音声などの高次元データに対する次元削減、ノイズ除去、異常検知、そして生成モデルとしての能力が、VAEを幅広い応用に適した強力なツールにしています。
VAEの潜在空間から条件付きサンプリングを行う場合、特定の条件に基づいて潜在変数 \mathbf{z} をサンプリングし、その条件に従った出力データを生成することが可能です。これは、条件付きVAE (Conditional VAE; CVAE) と呼ばれる手法で、通常のVAEに条件情報を追加する形で拡張されます。
1. 条件付きVAE (CVAE) の仕組み
通常のVAEでは、入力データ \mathbf{x} から潜在変数 \mathbf{z} をサンプリングし、それを使って出力 \mathbf{x'} を生成します。しかし、条件付きVAEでは、条件 \mathbf{c} を与えて、特定の条件に従ったデータを生成できるようにします。この条件は、ラベルやカテゴリなど、生成したいデータに関連する情報です。
2. 条件 \mathbf{c} の指定
CVAEでは、以下のように条件 \mathbf{c} を指定します。
-
エンコーダ: エンコーダに入力データ \mathbf{x} とともに、条件 \mathbf{c} を与えます。これにより、\mathbf{x} に基づく潜在変数 \mathbf{z} の分布が条件 \mathbf{c} に依存する形で得られます。
q(\mathbf{z}|\mathbf{x}, \mathbf{c})
-
デコーダ: デコーダには、サンプリングされた潜在変数 \mathbf{z} と条件 \mathbf{c} を与え、\mathbf{c} に基づいたデータ \mathbf{x'} を生成します。
p(\mathbf{x}|\mathbf{z}, \mathbf{c})
3. 条件付きVAEのモデル
条件 \mathbf{c} を用いるCVAEの学習プロセスは、VAEと似ていますが、条件 \mathbf{c} をエンコーダおよびデコーダに組み込む点が異なります。
-
エンコーダ: 条件 \mathbf{c} と入力データ \mathbf{x} に基づいて、潜在変数 \mathbf{z} の分布 q(\mathbf{z}|\mathbf{x}, \mathbf{c}) を学習します。これにより、\mathbf{c} に基づくサンプルが得られます。
-
デコーダ: 潜在変数 \mathbf{z} と条件 \mathbf{c} から、元のデータ \mathbf{x} に近いデータを生成します。つまり、生成されたデータは条件 \mathbf{c} に対応するデータになります。
4. 条件付きサンプリングの実際
例えば、手書き数字のデータセット (MNIST) で条件付きサンプリングを行う場合、条件 \mathbf{c} として数字のラベル(0から9のカテゴリ)を使用します。これにより、特定の数字(例えば「7」)に対応する画像のみを生成することができます。
- 手順:
- ラベル \mathbf{c} = 7 を指定して潜在空間からサンプリングを行う。
- \mathbf{c} = 7 に対応する潜在変数 \mathbf{z} から、デコーダが数字「7」に見える画像を生成します。
5. 損失関数の修正
条件付きVAEでも、通常のVAEと同様にELBO(証拠下界)を最大化しますが、条件 \mathbf{c} がエンコーダおよびデコーダの両方に追加されるため、損失関数も以下のように条件付きに修正されます。
\mathcal{L}_{\text{CVAE}} = -\mathbb{E}_{q(\mathbf{z}|\mathbf{x}, \mathbf{c})} \left[\log p(\mathbf{x}|\mathbf{z}, \mathbf{c})\right] + D_{\mathrm{KL}} \left(q(\mathbf{z}|\mathbf{x}, \mathbf{c}) \| p(\mathbf{z}|\mathbf{c})\right)
このように、条件 \mathbf{c} に基づいて潜在変数 \mathbf{z} をサンプリングし、その条件に従ったデータを生成することが可能になります。
6. 応用例
条件付きサンプリングは、以下のような用途で応用されます。
- 画像生成: 特定のカテゴリやラベルに基づいた画像生成(例えば、動物の種類、服のスタイルなど)。
- テキスト生成: 特定のトピックやスタイルに基づいたテキスト生成。
- 異常検知: 特定の条件(例えば、正常データの範囲)に基づいて異常を検知する。
まとめ
条件付きサンプリングを行う際には、VAEを条件付きVAEに拡張し、条件 \mathbf{c} をエンコーダとデコーダの両方に入力することで、特定の条件に従ったデータを生成できます。これにより、単なる無条件生成ではなく、より制御されたデータ生成が可能となります。
学んだ結果、潜在空間の理解は最初に行っておく必要がありますが、変分ベイズそのものの理解よりはわかりやすかった気がします。
そのまま拡散モデルに入りたいと思います。