オートエンコーダとは
Autoencoder / 自己符号化器
入力データを一度圧縮してから復元するよう学習させることで、データの特徴表現を教師なしで獲得するニューラルネットワーク
ひとことで言うと
データを一度圧縮してから元に戻す練習をすることで、データの特徴を学ぶAIモデル。
概要
オートエンコーダとは、入力データを低次元の内部表現(潜在表現)へ圧縮するEncoderと、その内部表現から元の入力をできるだけ忠実に復元するDecoderからなるニューラルネットワーク。 正解ラベルを必要とせず、入力データそのものを再構成できるよう学習するため、教師なし学習の代表的な手法の1つとして扱われる。 圧縮された内部表現は、データの本質的な特徴を捉えた次元削減や異常検知(正常データではうまく復元できるが、異常データでは復元誤差が大きくなる性質を利用)などに応用される。
背景
ラベル付きデータを大量に用意することが難しい場面でも、データそのものから有用な特徴表現を獲得したいという要求があった。 オートエンコーダは、入力を圧縮して復元するという自己教師的なタスクを通じ、ラベルなしにデータの特徴表現を学習する手法として考案された。
歴史
1980年代: RumelhartらによってEncoder-Decoder型のネットワークで入力の自己再構成を学習させる考え方が示される。 2006年: HintonとSalakhutdinovが、複数層を積み重ねた深いオートエンコーダにより次元削減が可能なことを示す論文を発表し、深層学習研究の再興に寄与した。
アーキテクチャ
入力を低次元の潜在表現へ圧縮するEncoderと、その潜在表現から元の入力を復元するDecoderが、鏡合わせのような対称構造で接続される。 中間にある最も次元数の小さい層(ボトルネック)が、入力データの本質的な特徴を凝縮した潜在表現に相当する。 用途に応じて、ノイズを加えた入力から元のデータを復元させるDenoising Autoencoderや、潜在空間に確率分布を仮定するVariational Autoencoder(VAE)など、様々な派生形がある。
ワークフロー
入力データをEncoderに通し低次元の潜在表現を得る → 潜在表現をDecoderに通し元の次元へ復元する → 復元結果と元の入力の誤差(再構成誤差)を計算 → 誤差逆伝播法でEncoder・Decoder双方の重みを更新する。
コード例
PyTorchでの基本的なオートエンコーダ
import torch.nn as nn
class Autoencoder(nn.Module):
def __init__(self):
super().__init__()
self.encoder = nn.Sequential(nn.Linear(784, 64), nn.ReLU())
self.decoder = nn.Sequential(nn.Linear(64, 784), nn.Sigmoid())
def forward(self, x):
z = self.encoder(x)
return self.decoder(z)利点
- 正解ラベルを必要とせず、入力データそのものから特徴表現を学習できる
- 圧縮された内部表現を次元削減や異常検知に応用できる
- ノイズ除去や欠損データの補完など、目的に応じた派生タスクへ応用しやすい
欠点
比較
- VAE — VAEは、潜在表現に確率分布を仮定し、新しいデータを生成できるよう拡張したオートエンコーダの派生形
関連用語
よくある質問
オートエンコーダは教師あり学習?教師なし学習?
正解ラベルを必要とせず入力データ自身を教師信号として使うため、教師なし学習(または自己教師あり学習)の代表例として扱われる。
オートエンコーダとVAEの違いは?
通常のオートエンコーダは入力を1つの潜在ベクトルへ決定論的に圧縮するのに対し、VAEは潜在空間に確率分布を仮定して学習するため、潜在空間からサンプリングして新しいデータを生成できる。
参考文献
- Research PaperReducing the Dimensionality of Data with Neural Networks