オートエンコーダ(1)

オートエンコーダというのは一方向の多層ニューラルネットワークで、入力信号と出力信号をなるべく同じにするように調整したものです。層の数が一番少ないオートエンコーダは3層のオートエンコーダです。入力層と出力層のノード(=ニューロン)の数は等しくします。中間層のノードの数は入力層(=出力層)より少ないのが一般的なようです。
オートエンコーダとは自動コード化器の意味です。その名前の由来は、中間層のノードの数が少ない場合のオートエンコーダの働きからきています。今、オートエンコーダの例として、入力層、中間層、出力層のノード数が、それぞれ8、3、8であるようなオートエンコーダを考えてみましょう。

そうすると、このオートエンコーダによって8次元の入力情報が3次元のコードに符号化(=コード化)され、さらにその3次元のコードが8次元の情報に復号化された、とみなすことが出来ます。出力信号を入力信号に合わせる操作は、入力信号を教師信号とする教師あり学習の一種とみなすことが出来、この学習によって自動的にコード化が出来るので、オート(自動)エンコーダ(コード化器)の名前がつけられました。
入力が二値信号であるようなオートエンコーダも考えられますが、入力が実数であるようなオートエンコーダも考えられます。さて、今、入力が二値信号、つまりコンピュータのように0か1のどちらかでしかないような場合を考えてみましょう。さらに中間層のノードも二値であるとしましょう。上図の例では、8個の入力がありますから全体で入力データは8ビットです。中間層ではそれが3ビットになります。そしてそれが出力層では8ビットのデータに復元されます。もし入力データが8ビットの情報を持つのであれば、情報量の理論から考えて、それが情報量を失うことなしに3ビットで表されるはずがありません。ではどうなっているかといえば、入力データに「ある、かたより」があり、実質には8ビットの情報量を持っておらず、せいぜい3ビットの情報量しか持たない場合に、上図のようなオートエンコーダが可能になります。それはちょうど「次元削減」で述べたことに似ています。実際には直線の上にデータが乗っていて、その広がりが1次元であるのにかかわらず、見かけは2次元のデータになっているようなものです。たとえば入力データは8ビットのデータであるが「必ず1ビットだけが1で他の7ビットがゼロである」という制約を持っている場合ならば、入力データの種類は全部で8種類しかなく、これは(2^3=8なので)3ビットで表すことが出来ます。このように入力データの「ある、かたより」(この場合は「必ず1ビットだけが1で他の7ビットがゼロである」という制約)を見破って次元を削減するのがオートエンコーダです。


オートエンコーダは最初からこのような芸当が出来るわけではありません。先ほども少し書きましたが、入力データの集合の中から1つの入力データを取り出して入力し、その出力が入力と違っていたら「ある規則で」ノード(=ニューロン)の重みとしきい値を修正し、また別の入力データを取り出して入力し、その出力が入力と違っていたらまた「ある規則で」ノードの重みとしきい値を修正し・・・・ということを何百回、何千回・・・と繰り返す、つまり学習させる、ことで最終的に入力と出力が同じになるか、あるいはそれが出来なくても「ほぼ」同じになるようになるわけです。ここに「ある規則で」と書きましたが、その1つがバックプロバゲーションです。これについては以前「バックプロパゲーション」で書きました。