オートエンコーダ
学習目標: オートエンコーダの構造と潜在表現の概念を理解する
オートエンコーダとは
オートエンコーダ(AE)は、入力データを低次元の潜在表現に圧縮し、 その潜在表現から元のデータを再構成するニューラルネットワークです。
PyTorch実装
import torch
import torch.nn as nn
class Autoencoder(nn.Module):
def __init__(self, input_dim=784, latent_dim=32):
super().__init__()
# エンコーダ
self.encoder = nn.Sequential(
nn.Linear(input_dim, 256),
nn.ReLU(),
nn.Linear(256, 128),
nn.ReLU(),
nn.Linear(128, latent_dim)
)
# デコーダ
self.decoder = nn.Sequential(
nn.Linear(latent_dim, 128),
nn.ReLU(),
nn.Linear(128, 256),
nn.ReLU(),
nn.Linear(256, input_dim),
nn.Sigmoid() # 出力を0-1に
)
def forward(self, x):
z = self.encoder(x) # 潜在表現
x_recon = self.decoder(z) # 再構成
return x_recon, z
# 損失関数: 再構成誤差
criterion = nn.MSELoss() # または nn.BCELoss()
# 学習
model = Autoencoder()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
for data in train_loader:
x = data.view(-1, 784)
x_recon, z = model(x)
loss = criterion(x_recon, x)
optimizer.zero_grad()
loss.backward()
optimizer.step()
応用例
次元削減
高次元データを低次元に圧縮
ノイズ除去
ノイズ付きデータからクリーンなデータを復元
異常検知
再構成誤差が大きいデータを異常として検出
理解度チェック
Q. オートエンコーダの損失関数は何を最小化しますか?