オートエンコーダ(自己符号化器)

オートエンコーダ(自己符号化器)とは

オートエンコーダ(自己符号化器,autoencoder)とは,ニューラルネットワークを利用した教师なし机械学习の手法の一つです。次元削减や特徴抽出を目的に登场しましたが,近年では生成モデルとしても用いられています。

単純なオートエンコーダは,下図のように表すことができます。

オートエンコーダのネットワーク構造

図の左侧からデータを入力,右侧に出力という流れを示しています。図中の円形部分をノード,矢印をエッジと呼びます。ノードに入力された数値は各エッジにおいて固有の重みで重み付けれたのち,次の层のノードに入力されます。各ノードには复数のエッジから入力があり,それらの和が最终的なノードの入力値となります。

オートエンコーダの学習は,入力データと一致するデータを出力することを目的とする教師なし学習です(後述のように教师あり学习とすることもできます)。オートエンコーダのネットワークは,入力したデータの次元数をいったん下げ,再び戻して出力するという構造になっています。このため,入力から出力への単なるコピーは不可能です。オートエンコーダの学習過程では,入出力が一致するように各エッジの重みを調整していきます。この学習を通して,データの中から復元のために必要となる重要な情報だけを抽出し,それらから効率的に元のデータを生成するネットワークが形成されます。こうしてオートエンコーダの前半部分は次元削減,特徴抽出の機能を獲得し,後半部分は低次元の情報をソースとするデータ生成機能を獲得します。前半部分をエンコーダ,後半部分をデコーダと呼びます。

学習後,この2つのネットワークは別々に使うことができます。すなわち,エンコーダは特徴抽出器,デコーダは生成器として独立に用いることができます。

オートエンコーダの種類

オートエンコーダは先に绍介した基本构造を出発点として,様々に派生,进化しています。ここでは,様々なオートエンコーダの中から,下记の4种类を绍介します。

  • 积层オートエンコーダ
  • 畳み込みオートエンコーダ
  • 変分オートエンコーダ
  • 条件付き変分オートエンコーダ

积层オートエンコーダ:叠放自动编码器

積層オートエンコーダは,始めに示したシンプルなオートエンコーダのエンコーダおよびデコーダ部分を多層化した構造となります。入力データはエンコーダにおいて段階的に次元を減らし,デコーダで復元されます。エンコーダおよびデコーダを多層化することで,より複雑で高度な特徴量抽出を狙っています。

当初このような深いニューラルネットは,勾配消失という問題によってうまく学習することができませんでした。これは,層を深くしていくと前半の層で勾配がほとんどゼロになってしまい学習が進まなくなる,という問題です。これを解決するために,積層オートエンコーダは,ニューラルネットの各層における学習を一層ずつ行って,最後にすべて積み重ねる,という手順で構築します。下の図ですと,入力層以降の3層の学習のうち,まず初めに1層目(青)部分のみ考えます。入力データセットを復元するように1層目の学習を行った後,得られた重みを固定値として使って次の層である2層目の学習を行います。これを繰り返して3層目までの重みを得ることができます(事前学習)。最後に1層目から3層目をすべて繋げて元々のネットワークを構築し,得られた重みを初期値として設定したのち,全体の学習を通して重みを微調整(ファインチューニング)します。

积层オートエンコーダの学习の仕组み

このように1層ずつの学習とすることで初期値が最適解に近き,適切な学習が可能となります。他にも,ノードを減らしていくというオートエンコーダのネットワーク構造自体が,ディープニューラルネットワークのもう一つの課題であった過学習の抑止に繋がるというメリットがあります。

しかし,その後の技術の発達により,ディープニューラルネットワークは事前学習無しでも適切な学習が可能となり,積層オートエンコーダをこのような事前学習に用いることはほぼなくなっています。

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

畳み込みオートエンコーダは,エンコーダ,デコーダ部分に全結合層ではなく畳み込み層を使ったネットワーク構造になっています。畳み込み層により空間的に意味のある特徴(エッジやテクスチャなど)を抽出できるため,画像に対して用いられます。

畳み込みオートエンコーダのネットワークの概念

変分オートエンコーダ:变自动编码器(VAE)

変分オートエンコーダは,生成モデルとして有名です。通常のオートエンコーダとの大きな違いとして,入力データを圧縮して得られる特徴ベクトル(潜在変数)を確率変数として表します。一般的にはN次元の潜在変数が,N次元正規分布に従うように学習します。これまでに紹介したオートエンコーダでは,次元削減後の特徴ベクトルには特に制約はありませんでした。そのため,特徴空間上でデータがどのように表現されているかはわかりません。しかし,VAEでは,ここに正規分布という制約を設けることでデータの潜在空間上での分布に連続性が生じ,似た潜在変数からは似たデータが生成されるようになります。

ネットワークは下の図のような概念で表されます。エンコーダの出力として平均と标准偏差を推定し,それらで表される正规分布からランダムサンプリングによりデコーダに入力する潜在変数を决めます(図の中央上侧のパス)。しかし,このランダムサンプリングという操作は微分不能という问题があります。误差逆伝搬(バックプロパゲーション)し,ネットワークを学习させるためには,各ノードをつなぐエッジが微分可能な演算でなければいけません。そこで重新参数化特技という方法を用います。标准正规分布からランダムにサンプリングして得る确率変数εを导入し,これを用いてとして潜在変数を决定します。このようにすることでとは微分可能なエッジで系がり,バックプロパゲーションが可能となります。

変分オートエンコーダのネットワーク概念

条件付き変分オートエンコーダ:条件变分Autoencoder (CVAE)

条件付き変分オートエンコーダは,変分オートエンコーダを拡張したもので,指定したクラスのデータを生成できるようになっています。変分オートエンコーダでは、デコーダによるデータ生成の際、潜在変数を指定することはできますが、出力データのクラスを直接指定できません。言い換えますと、潜在変数を変えると出力クラスも変わってしまう可能性があります。条件付き変分オートエンコーダは、出力クラスを指定したうえで、潜在変数も自由にコントロールすることができます。

下の図に条件付き変分オートエンコーダのネットワークの概略を示します。

条件付き変分オートエンコーダのネットワーク概念

変分オートエンコーダのネットワークと异なる点は,エンコーダ,デコーダともにラベル情报を入力していることです。ラベル情报の入力にはいくつかやり方があります。例えば,デコーダの场合1次元の潜在変数ベクトルに结合する方法や,足し合わせる方法などです。このようにラベル情报を学习に含めることで,学习后,指定したラベルのデータを生成することができるようになります。

オートエンコーダの利用例

最後にオートエンコーダの実際の利用例を見ていきます。

データ生成

変分オートエンコーダのような生成モデルを用いて,潜在変数をコントロールして,学習させたデータのどれでもないデータ生成することができます。

下に示す図は,CVAEで生成した1 - 9の手書き文字画像です。各行は共通の潜在変数から生成されたため,クラスによらず線の濃淡や丸み,傾きなどが似た文字が生成されています。

条件付き変分オートエンコーダで生成した手书き数字画像の例

クラスタリング・分類

オートエンコーダのエンコーダ部分は特徴抽出器として振る舞います。異なるクラスのデータは,異なる特徴を持っていることが期待できますので,エンコーダで得られた特徴ベクトルをもとに,データのクラスタリングが可能となります。クラスタリングの部分は,ニューラルネットを用いてもよいですし,k - means法などの機械学習手法を用いても実現可能です。

エンコーダを使ったクラスタリングの概念

また,積層オートエンコーダによる事前学習を使ったディープニューラルネットワークによる分類の例を下に示します。これは3軸の加速度センサデータを中間層2層のニューラルネットワークで学習させ,人の活動状態を分類した結果の例です。この例では,中間層の2層を積層オートエンコーダを使って事前学習しています。

3轴加速度センサデータを使った人の活动状态の分类例

参考:达维德Anguita,亚历山德罗Ghio,卢卡一对多,泽维尔帕拉和Jorge L.雷耶斯·奥尔蒂斯。基于多类硬件友好支持向量机的智能手机人体活动识别万博1manbetx.环境辅助生活的国际研讨会(2012 IWAAL)。维多利亚,西班牙。2012年12月。

异常検知

オートエンコーダは异常検知に用いることもできます。入出力に正常データを与えて学習すると,正常データに含まれる特徴を学習します。学習の結果,正常データを入力した場合,その正常データを正確に復元できるようになります。

このオートエンコーダに異常データを入力するとどのような出力となるでしょうか。理想的には,ネットワークは正常データに含まれる特徴をうまく拾い上げ,それらから元のデータを復元するものになっているため,異常データの特徴をうまく抽出することはできません。同様に,出力データにも異常データの特徴は反映されません。したがって,入出力データを比較し,大きな違いがあればその入力は異常データであると言えます。この方法では,入出力の差が大きい箇所も特定できるため,異常個所の特定まで可能です。

下の図は,正常な心电图波形を学習したオートエンコーダを使って,正常な波形と異常な波形をそれぞれ入力した場合の出力との比較です。正常な波形は入出力がほぼ一致しているのに対して,異常な波形は入出力信号が大きく異なっており,異常であることが明確に判断できます。

オートエンコーダを使った時系列信号の異常検知の例

このように教师なし学习によって异常検知を行うことが可能ですが,少数の异常データをラベル付きで学习させるといった半教师あり学习を用いることによって,さらに精度を高めるといったことも可能です。

同様の异常検知を画像に対して実行することも可能です。この场合は,畳み込みオートエンコーダを用います。次の図は,畳み込みオートエンコーダを使って実施した异常検知の一例です。この例では,正常なナットを学习,复元するCAEを构筑しました。このCAEに异常を含むナット画像を通すと,図に示す通り,异常个所を特定することができます。なお,この例ではネットワークにSegNetというセマンティックセグメンテーション用のネットワークを使いました。

CAEを用いた异常検知の例

ノイズ除去(デノイジングオートエンコーダ)

デノイジングオートエンコーダの学习では,人为的にノイズを加えたデータを入力として,ノイズ追加前のオリジナルのデータを出力するよう学习します。このような学习を経ると,オートエンコーダはノイズが含まれたデータの中から,オリジナルデータを表す主要な特徴だけを取り出すことができるようになります。この特徴量をデコーダに通すことで,クリーンなデータを复元することができます。

下の図は,十字状のノイズが含まれた画像に対しての,オートエンコーダを使ったデノイズ例です。オリジナルの画像として手書き数字文字,ノイズとしてランダムに十字状の欠損を与えた画像を入力として,オリジナル画像を出力する用学習します。このように学習して,十字欠損が入った画像を適切にデノイズするオートエンコーダを作成できます。

オートエンコーダを用いた画像のデノイズ概念

MATLABを使用したオートエンコーダ

积层オートエンコーダのような段阶的な学习を実装するのは,比较的手间がかかります。MATLAB®のオプション製品である深度学习工具箱™にはオートエンコーダネットワークの生成,それらのスタッキング(積層化)などの機能が関数として備わっています。これら関数を組合わせることで,素早く,手軽にオートエンコーダを試すことができます。さらに,MATLABは画像のみならず時系列信号のディープラーニングにも使うことができ,LSTMレイヤも関数一つで呼び出すことができますので,LSTMオートエンコーダの構築も可能です。

また,比较的新しいVAEといった方法では,エンコーダとデコーダの间にランダムサンプリングが必要となるなど,より柔软な处理が必要となります.Deep学习工具箱には,カスタマイズ可能な学习ループを回す仕组みがありますので,目的に合ったネットワークや学习手顺を构筑できます。

MATLABは産業界で広く使われてきたという歴史から,最終成果物の実装,共有までをサポートしています。作成したネットワークのGPUコード(CUDAコード)自动生成アプリ化までを含む,ワークフロー全体をMATLABがワンストップでカバーします。


オートエンコーダにおける制品使用例および使い方


ソフトウェアリファレンス