本文へ移動

G検定(ジェネラリスト検定)

おーとえんこーだ

オートエンコーダ

Autoencoder

オートエンコーダは、入力をその出力へコピーするように訓練されるニューラルネットワークです。入力xから内部の表現hを作るエンコーダh=f(x)と、hから入力を作り直すデコーダr=g(h)の2つの部分からなります。ただし、入力をそのまま写すだけでは何も学べないため、完全なコピーができないように制約を課して使います。よく知られた制約は、hの次元を入力より小さくすることで、こうするとネットワークは入力の中で残すべき情報を選ぶように学習します。

詳しい説明

入力を自分自身へコピーするように訓練するネットワーク

オートエンコーダ(Autoencoder)は、入力をその出力へコピーするように訓練されるニューラルネットワークです。ふつうのニューラルネットワークは、画像を受け取って「猫」や「犬」という答えを出すように、入力とは別の答えを出すように訓練されます。オートエンコーダの場合は、出力で目指す値が入力そのものです。4個の数値を受け取ったら、同じ4個の数値をできるだけそのまま出力することを目指します。

この説明は、深層学習の教科書として知られるイアン・グッドフェロー(Ian Goodfellow)、ヨシュア・ベンジオ(Yoshua Bengio)、アーロン・クールヴィル(Aaron Courville)の著書「Deep Learning」(2016年)の第14章に沿っています。同書は、オートエンコーダの内部には、入力を表すコードを求める隠れ層hがあると説明しています。

名前の「オート」は自分自身の、「エンコーダ」は符号化するもの、という意味です。自分自身を符号化して、また自分自身に戻すネットワークだと考えると、名前と仕組みが結びつきます。

エンコーダとデコーダの2段階の処理

オートエンコーダの処理は、2つの部分に分けて書き表します。

1つめはエンコーダです。エンコーダは関数fとして書かれ、入力xを受け取って内部の表現hを出します。式ではh=f(x)と書きます。hはコードとも呼ばれ、入力を別の形で表した数値の並びです。

2つめはデコーダです。デコーダは関数gとして書かれ、hを受け取って入力を作り直した値rを出します。式ではr=g(h)と書きます。rは再構成と呼ばれます。

2つをつなげると、入力xはエンコーダでhになり、デコーダでrになります。まとめるとr=g(f(x))です。訓練では、rがxに近づくように、エンコーダとデコーダの重みを調整します。

数値で追う圧縮と復元

架空の数値で2段階の処理を追ってみます。入力は4個の数値からなり、x=(0.9, 0.1, 0.9, 0.1)だとします。このネットワークでは、hを2個の数値に決めてあります。

エンコーダは、4個の数値を2個にまとめます。訓練を終えたエンコーダが、h=(0.9, 0.1)を出したとします。デコーダは、この2個の数値から4個の数値を作り直します。デコーダが、r=(0.88, 0.12, 0.87, 0.13)を出したとします。

入力とのずれを測るため、4つの成分ごとに差を取って2乗し、足し合わせてみます。差は順に0.02、0.02、0.03、0.03なので、2乗の和は0.0004+0.0004+0.0009+0.0009=0.0026です。rはxと完全には一致しませんが、4個の数値の特徴はほぼ保たれています。訓練では、たくさんの入力についてこのようなずれが小さくなるように重みを調整します。

2個の数値で4個の数値をほぼ作り直せたのは、この例の入力に決まった形があったからです。この例では、1つめと3つめの数値が同じ値、2つめと4つめの数値が同じ値になっています。訓練に使う入力がどれも同じ形をしていれば、2個の数値だけを残しておけば、残りの2個はデコーダが補えます。オートエンコーダは、訓練を通じて、入力のどの情報を残せば作り直せるかを見つけていきます。

完全なコピーができないように制約を課す理由

入力をコピーするように訓練すると聞くと、すべての入力について完全にコピーできるのが理想だと思えるかもしれません。しかし、同書は、単純にg(f(x))=xとなるように学習するだけでは特に有用ではないと述べています。そのため、オートエンコーダは、完全なコピーができないように制約を課して設計します。

先ほどの例で、hの数値を入力と同じ4個にした場合を考えます。エンコーダは入力の4個をそのままhに写し、デコーダはhの4個をそのままrに写せば、ずれは0になります。これでは、ネットワークは入力を素通りさせただけで、入力の中にある決まった形については何も学んでいません。

よく知られた制約は、hの次元を入力の次元より小さくすることです。先ほどの例のようにhを2個に限ると、4個の数値をすべてそのまま運ぶことはできません。ネットワークは、作り直すために必要な情報を選んで残すしかなくなります。こうしてできたhは、入力の特徴をまとめた低い次元の表現になります。

注意点として、hを小さくしたからといって、どんな入力でも作り直せるわけではありません。入力の中に決まった形が無ければ、少ない数値に情報をまとめることはできず、rとxのずれは大きく残ります。また、hの次元を何個にすればよいかは、扱うデータによって変わります。

層を深くしたオートエンコーダと積み重ねによる事前学習

エンコーダやデコーダの中に、さらに隠れ層を加えることもできます。同書は、エンコーダの内部に少なくとも1つ追加の隠れ層を持つ深いオートエンコーダ(deep autoencoder)が、浅いオートエンコーダや線形のオートエンコーダより優れた圧縮を得られたという、ジェフリー・ヒントン(Geoffrey Hinton)とルスラン・サラフトディノフ(Ruslan Salakhutdinov)による2006年の報告を紹介しています。

同書はまた、深い構造のネットワークを訓練する一般的な方法として、浅いオートエンコーダを積み重ね、1つずつ順に事前学習していく方法があることにも触れています。このように積み重ねたものは積層オートエンコーダと呼ばれ、別のページで説明しています。事前学習は、目的の学習に入る前に重みを整えておく工程を指します。

試験で問われること

G検定

  • オートエンコーダは、入力をその出力へコピーするように訓練されるニューラルネットワークです。出力で目指す値が入力そのものである点が、入力とは別の答えを出すように訓練するふつうのネットワークと異なります。
  • オートエンコーダは、入力xから内部の表現hを作るエンコーダh=f(x)と、hから入力を作り直すデコーダr=g(h)の2つの部分からなります。デコーダが出すrは再構成と呼ばれます。
  • 単純にg(f(x))=xとなるように学習するだけでは有用ではないため、オートエンコーダは完全なコピーができないように制約を課して設計します。hの次元を入力より小さくすると、ネットワークは作り直すために残すべき情報を選ぶように学習します。
  • エンコーダの内部に追加の隠れ層を持つ深いオートエンコーダは、浅いオートエンコーダより優れた圧縮を得られたと報告されています。浅いオートエンコーダを積み重ねて1つずつ順に事前学習する方法は、深い構造のネットワークを訓練する方法の1つです。

最終更新日: 2026/09/14