変分オートエンコーダー(VAE)
ELBO損失、再パラメータ化トリック、潜在空間の探索、VAEによる画像生成について学習します。
「変分オートエンコーダー(VAE)」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
オートエンコーダーからVAEへ
通常のオートエンコーダーはばらばらの点を学習するため、新しい点をサンプリングすると意味のないデータが生成されます。変分オートエンコーダー(VAE)は、サンプリング可能な滑らかで連続した潜在空間を学習し、本格的な生成モデルに変えます。
分布へのエンコード
VAEのエンコーダーは、1つの点ではなく、入力ごとに分布を出力します。具体的には平均muと対数分散log_varです。各入力は潜在空間内の1つの点ではなく、小さく曖昧な領域に写像されます。
class Encoder(nn.Module):
def __init__(self):
super().__init__()
self.fc = nn.Linear(784, 256)
self.fc_mu = nn.Linear(256, 64)
self.fc_logvar = nn.Linear(256, 64)なぜmuとlog_varなのか
分散を直接予測する代わりにlog_varを予測するのは、任意の実数を取ることができ、正値制約がなく、数値的にも安定するためです。必要なときは指数関数を適用して分散を復元します。
def forward(self, x):
h = torch.relu(self.fc(x))
return self.fc_mu(h), self.fc_logvar(h)潜在変数zのサンプリング
デコードするには、予測された分布からzをサンプリングする必要があります。素朴にランダムサンプリングすると微分できないため、その処理を通して逆伝播できません。これを解決するのが再パラメータ化トリックです。
再パラメータ化トリック
サンプルをz = mu + eps * exp(0.5 * log_var)と書き換えます。ここでepsはランダムノイズです。これでランダム性はepsに含まれるため勾配は必要なくなり、muとlog_varを通して勾配を流せます。
def reparameterize(mu, log_var):
std = torch.exp(0.5 * log_var)
eps = torch.randn_like(std)
return mu + eps * stdデコーダー
デコーダーはサンプリングしたzを受け取り、通常のオートエンコーダーと同じように画像を再構成します。Sigmoid出力を使い、64次元を784個のピクセルに戻します。
decoder = nn.Sequential(
nn.Linear(64, 256),
nn.ReLU(),
nn.Linear(256, 784),
nn.Sigmoid()
)再構成損失項
VAEの損失の前半は再構成です。これは、デコードした画像が入力とどれだけ一致しているかを表します。ピクセルごとにバイナリクロスエントロピー(またはMSE)を使います。
recon_loss = nn.functional.binary_cross_entropy(
recon, x, reduction="sum"
)KLダイバージェンス項
後半はKLダイバージェンスです。各エンコード分布を標準正規分布へ近づけます。これにより潜在空間が滑らかで連続になるよう正則化され、生成が可能になります。
kl = -0.5 * torch.sum(1 + log_var - mu.pow(2) - log_var.exp())ELBO目的関数
VAEはELBO(証拠下限)を最大化します。これはreconstruction + KLを最小化することと同じです。再構成項は出力の忠実度を高め、KL項は潜在空間の形状を整えます。この2つのバランスを取ることが要点です。
loss = recon_loss + kl
loss.backward()新しい画像の生成
潜在空間が標準正規分布に一致しているため、N(0,1)からzをサンプリングしてデコードすれば、入力画像なしで新しい画像を生成できます。
with torch.no_grad():
z = torch.randn(16, 64)
new_images = decoder(z) # 16 generated samplesVAEが重要な理由
VAEは、補間やサンプリングが可能な、原理に基づいた滑らかな潜在空間を提供します。多くの生成手法の基盤となっており、単なる点ではなく分布を学習するという中心的な考え方を教えてくれます。
理解度チェック
VAEについての理解度を確認しましょう。
まとめ:変分オートエンコーダー
VAEについて学びました。エンコーダーはmuとlog_varを出力し、再パラメータ化トリックのz = mu + eps * exp(0.5 * log_var)によってサンプリングを微分可能に保ちます。損失はELBO = reconstruction + KLです。N(0,1)からzをサンプリングしてデコードすると、新しい画像を生成できます。
よくある質問
「変分オートエンコーダー(VAE)」レッスンは無料ですか?
はい。「変分オートエンコーダー(VAE)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「変分オートエンコーダー(VAE)」で何を学びますか?
ELBO損失、再パラメータ化トリック、潜在空間の探索、VAEによる画像生成について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「変分オートエンコーダー(VAE)」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 表現学習のためのオートエンコーダー
- 変分オートエンコーダー(VAE)
- GAN:生成器と識別器
- 条件付きGANとスタイル変換