ディープラーニングでは、「そのまま全部を覚える」のではなく、いったん情報を小さく縮めてから、もう一度もとに戻すという学び方が使われます。
それを行うのが、オートエンコーダです。
名前を分けると、
エンコーダ→ 入力を圧縮する
デコーダ→ 圧縮された情報から、もとの形を再現する
という二つの部分からできています。
つまりオートエンコーダは、入力をいったん小さな表現にまとめ、その表現から元のデータをできるだけ再現するモデルなのです。
旅に出る前に、たくさんの荷物をまとめる場面を想像してみてください。
服、本、ノート、化粧ポーチ、充電器。
そのまま全部を広げて持ち歩くのは大変です。
そこで、必要なものを選びながら、ひとつの小さなスーツケースにぎゅっと詰め込みます。
このとき大事なのは、どれをどうまとめれば、あとで困らずに取り出せるかですよね。
適当に押し込むだけではだめで、本質的な情報をうまく残しておかないと、あとで元の形に戻せなくなってしまいます。
オートエンコーダも、それに似ています。
入力データをそのまま抱えるのではなく、いちど小さな箱のような表現に圧縮する。
そして、その圧縮された表現から、元のデータをできるだけ再現しようとするのです。
ここで大切なのは、オートエンコーダは単にデータを小さくするだけではない、ということです。
本当に大事なのは、何を残せば、そのデータらしさを保てるのかを学ぶことです。
たとえば顔の画像なら、
・明るさの細かなゆらぎ
・背景の一部
よりも、
・目や鼻や口の配置
・顔の輪郭
・全体の特徴
のほうが大事かもしれません。
オートエンコーダは、データを圧縮しながら、そのデータの本質的な特徴を取り出そうとするモデルだと考えるとわかりやすいです。
もう少し整理すると、オートエンコーダは、二つの役割に分かれています。
エンコーダ
入力データを受け取って、それをより小さな表現に変換する部分です。
旅のたとえで言えば、たくさんの荷物を小さな箱にまとめる作業にあたります。
デコーダ
小さな表現を受け取り、そこから元のデータをできるだけ再現する部分です。
こちらは、旅先でスーツケースを開けて、元の荷物を取り出し直す作業にあたります。
この二つを通して、オートエンコーダは
1 入力を縮める
2 そこから元に戻す
3 その過程で、本質的な特徴を学ぶ
ということをしています。
次元削減
ここで大事なキーワードが、次元削減です。
「次元」と聞くと少し身構えてしまうかもしれないけれど、ここではまず、情報の数を減らして、より小さな形にまとめること、くらいに考えて大丈夫です。
たとえば、100個の数字で表されていたデータを、10個くらいのもっと小さな表現にまとめる。
そんなイメージです。
データには、そのままだと情報が多すぎることがあります。
でも、その中には本当に大事な特徴、なくてもあまり困らない細かな違い、が混ざっています。
たとえば、同じ「猫の画像」でも、目や耳や輪郭の形、全体の姿勢は重要そうです。
一方で、背景の細かなノイズ、たまたま写り込んだ小さな影は、それほど大事ではないかもしれません。
次元削減では、こうした情報の中から、本質的な部分を残し、細かなゆらぎを減らすことを目指します。
オートエンコーダでは、エンコーダが入力を小さな表現に圧縮します。
この圧縮された部分は、しばしば中間表現や潜在表現と呼ばれます。
ここには、元のデータをそのまま写したものではなく、本質をぎゅっとまとめた情報が入っていると期待されます。
だからオートエンコーダは、データの特徴をコンパクトに表現するという意味で、次元削減の方法の一つとしても使われます。
旅のたとえで言えば、荷物を全部持っていくのではなく、必要なものだけをうまく詰めた「旅の本質セット」を作る感じです。
次元削減ができると、
・データをよりコンパクトに扱える
・本質的な特徴を取り出しやすい
・可視化や分類の前処理に役立つ
といった利点があります。
つまり、データをただ小さくするだけでなく、そのデータを理解しやすい形に整えるという意味があるのです。
事前学習
もう一つ大事なキーワードが、事前学習です。
これは、本番のタスクに入る前に、あらかじめデータの特徴を学んでおくことを指します。
たとえば外国語の試験を受ける前に、まずは単語帳を読んで、文章の雰囲気に慣れておくことがありますよね。
いきなり難しい読解問題に入るよりも、先に基本的な特徴やパターンをつかんでおいたほうが、その後の学習がしやすくなります。
オートエンコーダは、こうした準備運動のような学習に使われることがあります。
オートエンコーダは、ラベルがなくても入力データそのものから学習できます。
なぜなら、入力を再現すること自体が目標になるからです。
つまり、
・これは犬です
・これは猫です
といった正解ラベルがなくても、そのデータがどんな特徴を持っているかを学べるのです。
この性質を使って、本番の分類や予測の前に、データの特徴をあらかじめ学んでおく。
これがオートエンコーダを使った事前学習です。
特に昔のディープラーニングでは、深いネットワークをいきなりうまく学習させるのが難しいことがありました。
そこでまず、オートエンコーダを使って層ごとに特徴を学び、そのあとで本番のタスクに使う、という方法が考えられました。
これが、のちに出てくる、積層オートエンコーダにもつながっていきます。
つまり事前学習とは、いきなり答えを当てにいく前に、データの中にある特徴を静かに学んでおくことなのです。
まとめ
ここまでを見ると、オートエンコーダの役割は、大きく二つ見えてきます。
一つは、データを圧縮し、本質的な特徴を取り出すこと。
もう一つは、本番の学習の前に、特徴をあらかじめ学んでおくこと。
つまりオートエンコーダは、派手に答えを出すモデルというより、データの内側にある構造を学ぶモデルだと言えます。
オートエンコーダ→ 入力をいったん圧縮し、そこから元のデータを再現するモデル
エンコーダ→ データを小さな表現にまとめる
デコーダ→ 小さな表現から元のデータを再現する
次元削減→ 情報を小さくまとめて、本質的な特徴を取り出すこと
事前学習→ 本番のタスクの前に、データの特徴をあらかじめ学んでおくこと