表現学習のためのオートエンコーダー
エンコーダー・デコーダー構造、ボトルネック、再構成損失、異常検知への応用について学習します。
「表現学習のためのオートエンコーダー」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
オートエンコーダーとは
オートエンコーダーは、データを小さなコードに圧縮し、それを元の形に再構成するよう学習します。二つの部分で構成されます。圧縮するエンコーダーと、再構成するデコーダーです。中央で情報を絞り込むことで、重要な情報を学習するよう促します。
import torch
import torch.nn as nnボトルネックの考え方
中央の狭い層はボトルネックまたは潜在コードと呼ばれます。すべての情報を少数の数値に通すことで、ネットワークはノイズを捨て、データの本質的な構造を保持する必要があります。
エンコーダーの構築
28x28画像(784画素)の場合、エンコーダーは入力を784から256、さらに64次元の潜在コードへと段階的に縮小します。各Linear層の後にはReLU非線形関数を配置します。
encoder = nn.Sequential(
nn.Linear(784, 256),
nn.ReLU(),
nn.Linear(256, 64)
)デコーダーの構築
デコーダーはエンコーダーと対称な構造を持ち、64次元のコードを784個のピクセルに展開します。最後のSigmoidで出力を[0,1]に押し込み、正規化されたピクセル値に合わせます。
decoder = nn.Sequential(
nn.Linear(64, 256),
nn.ReLU(),
nn.Linear(256, 784),
nn.Sigmoid()
)完全なオートエンコーダー
エンコーダーとデコーダーを1つのモジュールに組み込みます。forward passではエンコードしてからデコードし、入力と同じ形状の再構成結果を返します。
class AutoEncoder(nn.Module):
def __init__(self, enc, dec):
super().__init__()
self.enc, self.dec = enc, dec
def forward(self, x):
z = self.enc(x)
return self.dec(z)再構成損失(MSE)
学習の目標は入力そのものです。平均二乗誤差は、再構成結果が元の画像からピクセルごとにどれだけ離れているかを測定します。これを最小化することで、忠実な圧縮を学習します。
criterion = nn.MSELoss()
x_flat = x.view(x.size(0), -1)
recon = model(x_flat)
loss = criterion(recon, x_flat)オートエンコーダーの学習
学習は教師なしで行うため、ラベルはなく入力だけを使います。ループは標準的なzero_grad、forward、backward、stepですが、損失では出力と入力を比較します。
optimizer.zero_grad()
recon = model(x_flat)
loss = criterion(recon, x_flat)
loss.backward()
optimizer.step()潜在空間
学習後、エンコーダーは各入力を潜在空間内の1点に写像します。似た入力は互いに近い位置に配置されるため、この64次元コードはデータを学習して得られた、コンパクトな表現になります。
z = model.enc(x_flat)
print(z.shape) # [batch, 64]t-SNEによる可視化
64次元の潜在空間はそのままでは見にくいものです。t-SNEで2次元に射影してプロットします。プロット上のクラスタから、オートエンコーダーがラベルを一度も見ていないにもかかわらず、似た項目をまとめたことが分かります。
from sklearn.manifold import TSNE
codes = model.enc(all_data).detach().numpy()
proj = TSNE(n_components=2).fit_transform(codes)
# scatter plot proj colored by true label異常検知
正常データで学習したオートエンコーダーは正常データをうまく再構成しますが、見たことのない異常データではうまく再構成できません。高い再構成誤差が外れ値を示すため、強力な教師なし異常検知器になります。
errors = ((model(data) - data) ** 2).mean(dim=1)
anomalies = errors > thresholdなぜ表現学習なのか
本当の価値は潜在コードにあります。これはクラスタリング、可視化、異常検知、または別のモデルへの入力に利用できる、学習済みの特徴ベクトルです。しかも、いずれもラベルなしで学習できます。
理解度チェック
オートエンコーダーについての理解度を確認しましょう。
まとめ:オートエンコーダー
エンコーダー(784から256、さらに64)と、それを反映したデコーダーを構築し、ラベルなしでMSE再構成損失を使って学習しました。潜在コードを表現学習に利用し、t-SNEで可視化し、高い再構成誤差によって異常を検知しました。
よくある質問
「表現学習のためのオートエンコーダー」レッスンは無料ですか?
はい。「表現学習のためのオートエンコーダー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「表現学習のためのオートエンコーダー」で何を学びますか?
エンコーダー・デコーダー構造、ボトルネック、再構成損失、異常検知への応用について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「表現学習のためのオートエンコーダー」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 表現学習のためのオートエンコーダー
- 変分オートエンコーダー(VAE)
- GAN:生成器と識別器
- 条件付きGANとスタイル変換