第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とは、入力層と出力層の間に、入力データの特徴量を捉える「畳み込み層」と、その特徴への依存性を減らす「プーリング層」を加えたニューラルネットワークのモデルです。
畳み込み層により特徴を抽出できるため、画像の処理に利用することが多いです。
オートエンコーダの活用事例
データ生成
先述の通り、学習データを入力すると、まだ存在しないデータを出力できます。たとえば、数字が書かれた画像を入力すると、あたかも他の人が書いたかのような新しい画像を生成できます。
異常検知
異常検知は、入力されたデータが正常か異常か判断し、異常を検知することです。オートエンコーダは教師なしで異常検知できることが特徴です。教師ありで異常検知する場合は正常データと異常データの2つをデータセットとして学習させなければいけませんが、教師なしでは、正常データのみで学習できます。また、正常データを集めるのは容易なので、異常検知はオートエンコーダにうってつけの作業です。
正常データだけで学習すると、復元後は正常データに近いデータが出力されます。つまり、異常データを入力すると、正しく復元できず、もとの入力データとの誤差が大きくなります。その誤差を用いることで、正常か異常か判断します。また、誤差が大きい場所を見れば、異常が発生している場所を特定できます。
ノイズ除去
ノイズ除去は、入力データ中の不必要な部分を除去することです。オートエンコーダにノイズのあるデータを入力し、ノイズのないデータを正解データとして、教師あり学習をさせます。学習後にデータを入力すると、ノイズのない綺麗なデータを出力するように、エンコードされます。
クラスタリング
クラスタリングは、データの特徴ごとに分類することです。オートエンコーダでは、エンコード時に特徴が抽出されるので、その特徴ごとにクラスタリングできます。こちらも正常データと異常データの2つを学習させれば、異常検知に用いることができます。
最後に
勾配消失や過学習を避けるために開発されたオートエンコーダですが、現在はその目的で利用されてはおらず、データ生成や異常検知のために使用されています。
ディープラーニングを学ぶうえで欠かせないオートエンコーダですが、その理解に役立てれば幸いです。