オートエンコーダ

学習目標: オートエンコーダの構造と潜在表現の概念を理解する

オートエンコーダとは

オートエンコーダ(AE)は、入力データを低次元の潜在表現に圧縮し、 その潜在表現から元のデータを再構成するニューラルネットワークです。

エンコーダ 潜在空間 デコーダ 入力 x 潜在表現 z 再構成 x'

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. オートエンコーダの損失関数は何を最小化しますか?