オートエンコーダ(Autoencoder)とは|意味、仕組み、種類、活用事例を解説

このエントリーをはてなブックマークに追加


第3次AIブームを巻き起こしたディープラーニング(は深層学習)は、オートエンコーダの開発により生まれた技術です。かつてのニューラルネットワークではなし得なかったオートエンコーダの進歩とは。本項では、定義から活用方法まで詳しく解説します。

オートエンコーダとは

オートエンコーダ(自己符号化器:Autoencoder)とは、ニューラルネットワークの1つです。入力されたデータを一度圧縮し、重要な特徴量だけを残した後、再度もとの次元に復元処理をするアルゴリズムを意味します。このように、小さい次元に落とし込む作業を次元削減や特徴抽出と呼びますが、オートエンコーダはそれだけでなく、生成モデルとしても用いられます。

オートエンコーダは、2006年にトロント大学のコンピュータ科学および認知心理学の研究者であるジェフリー・ヒントン氏らによって提唱されました。

オートエンコーダの仕組み

ディープラーニングは、このオートエンコーダを何層にも重ね合わせてできた構造を持っています。オートエンコーダの仕組みはそのままディープラーニングの仕組みだと言えるでしょう。本章ではその仕組み、構造を簡単な図を用いて解説します。
Ledge.ai編集部で作成
オートエンコーダは図のような構造をしており、左から右の順に進むことで学習していきます。図の円の部分をノード、矢印をエッジと言います。

オートエンコーダは入力層のノードでデータを受け取り、隠れ層に圧縮します。この時に重みづけと呼ばれ、データはその重要度にあわせて点数がつけられます。この点数が低いデータは除外されます。これをエンコードと言います。

データが出力層に移る時も重み付けされ、ノードが複数のエッジから受け取ったデータの合計が最終的な値になります。これをデコードと言います。

オートエンコーダのイメージが掴めるよう、手書きの数字を処理する簡単な例で説明します。

出力データを入力データと同じになるようなオートエンコーダを作るために事前学習させます。

まず、数字が書かれた28×28pixel(784ニューロン)の画像データを入力します。784ニューロンなので、入力層のノードは784個必要です。16×16pixel(256ニューロン)に圧縮した後、784ニューロンに復元すると、入力時に比べ少しぼやけたような画像が出力されます。重み付けの際に画像の細かい部分のデータが省略されるため、よりぼやけた平均的な画像が出力されます。

この場合、たとえば、手書き数字の1の画像だけで学習させたとします。このオートエンコーダーでは、出力データと入力データが同じになるように重みづけされる、つまりどんな入力も1に近づくように出力されるので、たとえ2、3を入力しても1に近い細長く伸びたような画像が出力されます。

オートエンコーダの必要性


オートエンコーダの必要性、つまり次元削減や特徴抽出について理由を2つ解説します。

勾配消失を避ける

ニューラルネットワークにおいて、層を重ねることで、より複雑な処理ができます。主に採用されている計算方法である誤差逆伝播法においては、層を重ねすぎると逆に精度が落ちてしまいます。誤差逆伝播法では、予測と正解の誤差を利用して学習していくのですが、その誤差は層を重ねるとともに消えていってしまい、最終的に精度が落ちてしまいます。これを勾配消失と言います。

事前学習を採用しているオートエンコーダは勾配消失を避けられます。

過学習を避ける

過学習とは、学習の訓練データに適合しすぎて、評価データに対応できなくなることです。過学習になると、学習データだけに最適してしまい、汎用性が失われ、実際に使うことができません。

この解決策として、ちょうど良いタイミングで学習をストップさせる方法や、学習データ数を増やして解決する方法もありますが、オートエンコーダを用いることでも解決できます。

次元を圧縮するとデータが荒くなるので、過学習を防ぐことができます。

オートエンコーダの種類

オートエンコーダから派生したものを紹介します

積層オートエンコーダ(Stacked Autoencoder)

積層オートエンコーダは、先述のオートエンコーダを何層にも重ねたシンプルな構造をしています。1層ずつ学習していくのがポイントで、一気にエンコードして、一気にデコードするのではなく、エンコードとデコードを交互に実施しています。

Ledge.ai編集部で作成

上の図のように中間層を次の入力層とし、1層ずつ学習していくことで、初期値を最適解に近づけることができ、ファインチューニングすればすぐに使えるようになります。現在、技術の発展により、積層オートエンコーダのメリットをカバーできるようになったため、あまり使われていません。

変分オートエンコーダ(Variational Autoencoder:VAE)

オートエンコーダは、ただデータの圧縮と復元をするだけでしたが、VAEはデコードする際に変数を混ぜることで、入力とは少し違う出力をします。そのため、VAEは生成モデルとして有名です。

畳み込みオートエンコーダ(Convolutional Autoencoder:CAE)

CAEは、畳み込みニューラルネットワーク(CNN)を用いたオートエンコーダです。CNNとは、入力層と出力層の間に、入力データの特徴量を捉える「畳み込み層」と、その特徴への依存性を減らす「プーリング層」を加えたニューラルネットワークのモデルです。

Ledge.ai編集部で作成

畳み込み層により特徴を抽出できるため、画像の処理に利用することが多いです。

オートエンコーダの活用事例

データ生成

先述の通り、学習データを入力すると、まだ存在しないデータを出力できます。たとえば、数字が書かれた画像を入力すると、あたかも他の人が書いたかのような新しい画像を生成できます。

異常検知


異常検知は、入力されたデータが正常か異常か判断し、異常を検知することです。オートエンコーダは教師なしで異常検知できることが特徴です。教師ありで異常検知する場合は正常データと異常データの2つをデータセットとして学習させなければいけませんが、教師なしでは、正常データのみで学習できます。また、正常データを集めるのは容易なので、異常検知はオートエンコーダにうってつけの作業です。

正常データだけで学習すると、復元後は正常データに近いデータが出力されます。つまり、異常データを入力すると、正しく復元できず、もとの入力データとの誤差が大きくなります。その誤差を用いることで、正常か異常か判断します。また、誤差が大きい場所を見れば、異常が発生している場所を特定できます。

ノイズ除去

ノイズ除去は、入力データ中の不必要な部分を除去することです。オートエンコーダにノイズのあるデータを入力し、ノイズのないデータを正解データとして、教師あり学習をさせます。学習後にデータを入力すると、ノイズのない綺麗なデータを出力するように、エンコードされます。

クラスタリング

クラスタリングは、データの特徴ごとに分類することです。オートエンコーダでは、エンコード時に特徴が抽出されるので、その特徴ごとにクラスタリングできます。こちらも正常データと異常データの2つを学習させれば、異常検知に用いることができます。

最後に

勾配消失や過学習を避けるために開発されたオートエンコーダですが、現在はその目的で利用されてはおらず、データ生成や異常検知のために使用されています。

ディープラーニングを学ぶうえで欠かせないオートエンコーダですが、その理解に役立てれば幸いです。