オート エンコーダ。 畳み込みオートエンコーダによる画像の再現、ノイズ除去、セグメンテーション

オートエンコーダ

オート エンコーダ

自己符号化器の役割 自己符号化器は入力の有用な特徴を抽出すると言われていますが、なぜに自己符号化器がそれを可能にしているのかを見てみましょう。 自己符号化器の構成方法 簡単な例で行くと、入力が3次元でこれを2次元に落としたいという場合には以下のように自己符号化器を構成します。 入力の次元が3次元であるものを、2次元に落としてから、これをもう一度3次元に復元し、ほとんど同じ値を獲得できるのであれば、 2次元に落ちてもなお元々の重要な情報を維持できているということになります(というより、なるべく維持できるように変換を獲得する)。 中間層の活性化関数は何でもよく、出力層は自分自身への回帰問題なので恒等写像とします。 従って、この変換をすべて一気に表すと このようにして得られる を に近づけるということです。 損失関数を見る 回帰問題なので損失関数は二乗誤差です。 すなわちデータ が 個ある場合は となります。 変換された式を明示的に書けば となっています。 主成分分析の復習 主成分分析の復習 主成分分析とは、データ は成分が無相関な潜在的データ が変換 を受けて観測されていると考えます。 いま、観測データの平均は であるとします(そうなるように平行移動すればいい)。 ここでデータ に関する分散共分散行列は で表されます。 一方で潜在的データ の分散共分散行列は です。 潜在的データ は成分が無相関であるという過程を設けているため、分散共分散行列は対角行列にならなければなりません。 従って、 と表されます。 右辺は を対角成分に持つ対角行列を表しています。 分散共分散行列は一般に対称行列ですから、固有ベクトルは必ず互いに直行します。 言い換えれば、直交行列により固有値分解が可能ということです。 そして直交行列 の逆行列は必ず で求まります。 すなわち上の数式(主成分分析)は、データの分散共分散行列 を と固有値分解することに等しいのです。 主成分分析ではこのようにして求まる により というデータが得られていると考えているわけですから、潜在的なデータ は により復元されます。 ここで、わざと よりも小さな次元の を獲得したいならば、固有値の大きな成分から順に残していきます。 なぜならば固有値は潜在的データにおける分散を表現しているのであって、分散が小さな値というのはほとんど変化しない(事実上一定値だと考えられるほどに変動が小さい)ので、データの特徴として意味のないものだと考えられるからです。 主成分分析の次元削減 主成分分析による次元削減は固有値の大きい方から残していくということでいいのですが、もしも仮に、どのくらいの次元に落とすのか予め決めてあるのならば、それを達成する行列 を直接推定することもできます。 固有値の大きい順に固有ベクトルを並べた行列 を考えます。 次元空間上にデータ があり、これを 次元の部分空間の押し込めたい場合は、 と変換をします。 なので、 は固有ベクトル が張る部分空間に射影されます。 これを で復元すると元の 次元空間にデータ点を戻すことができますが、一度部分空間に射影した時に落ちた情報は戻ってきません。 このような射影による切り捨て誤差を最小にするように以下の損失関数を設定します(図の破線の長さが切り捨て誤差に相当する)。 これを解くことにより変換 が得られます。 ずっと の平均は ということで話をしましたが、データがあるならば平均を求めるのは容易であり、その平均を と置けばここでは となりますが、予め引いておけば固有値問題を考える時に楽です(分散共分散行列を求めるときにどの道平均を計算しなければならない)。 自己符号化器と主成分分析 損失関数の書き換え 先ほど得られた損失関数は でしたが、中間層の活性化関数 も恒等写像にしてしまいましょう。 つまり中間層は単に次元を落とすだけのものであり、非線形変換は行いません。 これにより以上の数式が得られますね。 主成分分析との比較をするためこれを整理して と表しておきましょう。 主成分分析との比較 次元削減を予め決めている主成分分析の損失関数と比較してみましょう 添字は揃えます。 損失関数の中身は二乗なので、正負は入れ替わってもよく、主成分分析の損失関数(上)と自己符号化器の損失関数(下) このように見ると明らかで、自己符号化器は中間層を恒等変換にする条件によって主成分分析と同じ結果を返してきます。 自己符号化器の学習では という制限を設ける、あるいは設けなくともそのような結果になることがよくあることが知られています。 主成分分析との関連を知ると、そういう設定を行うことに意味があることも、そう結果的に学習されることも頷けるところでしょう。 自己符号化器の価値 非線形性を容易に表現 もしも中間層に活性化関数を導入しないというのであれば、主成分分析をしたほうがはるかに計算が速いです。 なぜなら上記したように主成分分析は固有値問題だからです。 大抵の場合、これは素早く解く実装がすでに存在しており、誤差逆伝搬法より一般的に計算量は少ないです。 従って、自己符号化器を用いるならば、中間層を恒等写像以外にしなければ価値がありません。 それはシグモイド関数でもReLUでも構わないでしょう。 データを上手く表現する何かを、気軽に試せるところが自己符号化器の強みかもしれません。 自前の活性化関数を考えても、順伝搬の変換と学習の際の微分の値が変わるだけです。 これは実装上ほとんど手間がかかりません。 雑音に対するモデル構築が容易 また、データ に対して と誤差を混ぜ込んでおきながら、出力は となるように自己符号化器を構成することで、ノイズが生じた時にそれを取り除いて情報を圧縮する仕組みが学習されることが期待できます。 自己符号化器で学習した際の一層目も二層目も両方用いれば、ノイズを取り除く仕組みがそのものが構築されることが期待できます。 データにノイズが混入した場合の主成分分析は、確率的主成分分析や因子分析のモデルで扱うことができますが、問題はかなり複雑化します(学習の計算自体は高速になる)。 ニューラルネットワークの良い初期状態を与える 自己符号化器を構成した後、ソフトマックス関数を用いた出力層を最後に加え、普通に分類の教師あり問題を自己符号化器の を初期値に学習を行うと、精度が良くなることが報告されています。 実際には、たちの悪い局所解に捕まりづらくなるということで、最高精度が保証されるわけでありませんが、学習の初期状態をどうするかに関しては様々な問題と対策が存在しますから、その1つと考えるといいでしょう。 また、自己符号化器は多層に積み重ねることができます。 近年は、自己符号化器を多層化する学習自体に時間が掛かるということで省略される場合が多いです(代わりにReLUなど勾配消失が起こらない単純な活性化関数を用いる)。 s0sem0y.

次の

【機械学習入門】これならわかる!オートエンコーダーの使い方!

オート エンコーダ

オートエンコーダとは オートエンコーダ(自己符号化器)とは、2006年にジェフリー・ヒントンによる、ディープラーニングにおけるの仕組みの一つです。 エンコーダとデコーダからなるニューラルネットワークであり、分類だけでなく生成も可能です。 最近ツイッターで話題になったなどの、言葉から画像を生成するの技術の裏にあるのがオートエンコーダです。 仕組みとしては、入力層と出力層のノード数が同じで、中間層の数がそれよりも少ない3層のニューラルネットワークのうち、特に出力を入力に近づけることを学習に行われます。 エージェントが「自身の収益を最大化する方策の獲得を目指すことにより、次元削減が得られます。 オートエンコーダは、、クレンジング(ノイズ除去)、クラスタリングなどの次元削減に応用されます。 積層オートエンコーダ、畳み込みオートエンコーダ、スパースオートエンコーダ、変分オートエンコーダ、条件付き変分オートエンコーダなど、様々な種類があります。 積層オートエンコーダ 積層オートエンコーダ(ディープオートエンコーダとも呼ばれる)とは、オートエンコーダを積み重ねることによって、ディープオートエンコーダを作成して実現されます。 事前学習(pre training)として入力層に近い層から順番に学習させるという、逐次的な方法が特徴です。 変分オートエンコーダ 変分オートエンコーダ(変分自動符号化器、VAE: variational autoencoder)とは、変分ベイズ推定法の一種で、通常のオートエンコーダと同様、エンコーダ部分とデコーダ部分を持つモデルです。 通常のオートエンコーダーと異なる、変分オートエンコーダの特徴は潜在変数に確率分布を用いることです。 確率分布の推定と生成にそれぞれ用いるエンコーダとデコーダにニューラルネットワークを用い、と誤差逆伝播法によってパラメーターを更新します。 変分オートエンコーダは潜在変数の確率分布が求められるという利点がありますが、画像データの場合、輪郭がぼやけやすいという欠点もあります。 それに比べ、GANは画像が鮮明なものもありますが、学習が不安定になるという短所が挙げられます。 解決策として、変分オートエンコーダの後段にGANを付けた「VAEGAN」というモデルが提案されています。 変分オートエンコーダの応用である、条件付き変分オートエンコーダ(CVAE: conditional variational autoencoder)はその名の通り、変分オートエンコーダに条件変数を加えた手法です。 データにラベル情報を加えて学習できるため、条件付きのデータを生成することができます。 LionbridgeのAI教師データサービス ディープラーニング向けの教師データセットをお探しの方は、ぜひ当社にご相談ください。 AI向け教師データの作成やアノテーションのサービスを提供し、研究開発を支援しています。 世界の各タイムゾーンを渡る、100万人のコントリビューターが登録されており、大規模なAIプロジェクトも素早く仕上げることができます。

次の

オートエンコーダ:抽象的な特徴を自己学習するディープラーニングの人気者

オート エンコーダ

図の左側からデータを入力、右側に出力という流れを示しています。 図中の円形部分をノード、矢印をエッジと呼びます。 ノードに入力された数値は各エッジにおいて固有の重みで重み付けれたのち、次の層のノードに入力されます。 各ノードには複数のエッジから入力があり、それらの和が最終的なノードの入力値となります。 オートエンコーダの学習は、入力データと一致するデータを出力することを目的とするです(後述のようにとすることもできます)。 オートエンコーダのネットワークは、入力したデータの次元数をいったん下げ、再び戻して出力するという構造になっています。 このため、入力から出力への単なるコピーは不可能です。 オートエンコーダの学習過程では、入出力が一致するように各エッジの重みを調整していきます。 この学習を通して、データの中から復元のために必要となる重要な情報だけを抽出し、それらから効率的に元のデータを生成するネットワークが形成されます。 こうしてオートエンコーダの前半部分は次元削減、特徴抽出の機能を獲得し、後半部分は低次元の情報をソースとするデータ生成機能を獲得します。 前半部分をエンコーダ、後半部分をデコーダと呼びます。 学習後、この2つのネットワークは別々に使うことができます。 すなわち、エンコーダは特徴抽出器、デコーダは生成器として独立に用いることができます。 オートエンコーダの種類 オートエンコーダは先に紹介した基本構造を出発点として、様々に派生、進化しています。 ここでは、様々なオートエンコーダの中から、下記の4種類を紹介します。 積層オートエンコーダ• 畳み込みオートエンコーダ• 変分オートエンコーダ• 条件付き変分オートエンコーダ 積層オートエンコーダ:Stacked Autoencoder 積層オートエンコーダは、始めに示したシンプルなオートエンコーダのエンコーダおよびデコーダ部分を多層化した構造となります。 入力データはエンコーダにおいて段階的に次元を減らし、デコーダで復元されます。 エンコーダおよびデコーダを多層化することで、より複雑で高度な特徴量抽出を狙っています。 当初このような深いニューラルネットは、勾配消失という問題によってうまく学習することができませんでした。 これは、層を深くしていくと前半の層で勾配がほとんどゼロになってしまい学習が進まなくなる、という問題です。 これを解決するために、積層オートエンコーダは、ニューラルネットの各層における学習を一層ずつ行って、最後にすべて積み重ねる、という手順で構築します。 下の図ですと、入力層以降の3層の学習のうち、まず初めに1層目(青)部分のみ考えます。 入力データセットを復元するように1層目の学習を行った後、得られた重みを固定値として使って次の層である2層目の学習を行います。 これを繰り返して、3層目までの重みを得ることができます 事前学習)。 最後に1層目から3層目をすべて繋げて元々のネットワークを構築し、得られた重みを初期値として設定したのち、全体の学習を通して重みを微調整(ファインチューニング)します。 このように1層ずつの学習とすることで初期値が最適解に近き、適切な学習が可能となります。 他にも、ノードを減らしていくというオートエンコーダのネットワーク構造自体が、ディープニューラルネットワークのもう一つの課題であった過学習の抑止に繋がるというメリットがあります。 しかし、その後の技術の発達により、ディープニューラルネットワークは事前学習無しでも適切な学習が可能となり、積層オートエンコーダをこのような事前学習に用いることはほぼなくなっています。 畳み込みオートエンコーダ:Convolutional Autoencoder CAE 畳み込みオートエンコーダは、エンコーダ、デコーダ部分に全結合層ではなく畳み込み層を使ったネットワーク構造になっています。 畳み込み層により空間的に意味のある特徴(エッジやテクスチャなど)を抽出できるため、画像に対して用いられます。 変分オートエンコーダ:Variational Autoencoder VAE 変分オートエンコーダは、生成モデルとして有名です。 通常のオートエンコーダとの大きな違いとして、入力データを圧縮して得られる特徴ベクトル(潜在変数)を確率変数として表します。 一般的にはN次元の潜在変数が、N次元正規分布に従うように学習します。 これまでに紹介したオートエンコーダでは、次元削減後の特徴ベクトルには特に制約はありませんでした。 そのため、特徴空間上でデータがどのように表現されているかはわかりません。 しかし、VAEでは、ここに正規分布という制約を設けることでデータの潜在空間上での分布に連続性が生じ、似た潜在変数からは似たデータが生成されるようになります。 ネットワークは下の図のような概念で表されます。 エンコーダの出力として平均と標準偏差を推定し、それらで表される正規分布からランダムサンプリングによりデコーダに入力する潜在変数を決めます(図の中央上側のパス)。 しかし、このランダムサンプリングという操作は微分不能という問題があります。 誤差逆伝搬(バックプロパゲーション)し、ネットワークを学習させるためには、各ノードをつなぐエッジが微分可能な演算でなければいけません。 そこでReparameterization trickという方法を用います。 このようにすることで と は微分可能なエッジで繋がり、バックプロパゲーションが可能となります。 条件付き変分オートエンコーダ:Conditional Variational Autoencoder CVAE 条件付き変分オートエンコーダは、変分オートエンコーダを拡張したもので、指定したクラスのデータを生成できるようになっています。 変分オートエンコーダでは、デコーダによるデータ生成の際、潜在変数を指定することはできますが、出力データのクラスを直接指定できません。 言い換えますと、潜在変数を変えると出力クラスも変わってしまう可能性があります。 条件付き変分オートエンコーダは、出力クラスを指定したうえで、潜在変数も自由にコントロールすることができます。 下の図に条件付き変分オートエンコーダのネットワークの概略を示します。 変分オートエンコーダのネットワークと異なる点は、エンコーダ、デコーダともにラベル情報を入力していることです。 ラベル情報の入力にはいくつかやり方があります。 例えば、デコーダの場合1次元の潜在変数ベクトルに結合する方法や、足し合わせる方法などです。 このようにラベル情報を学習に含めることで、学習後、指定したラベルのデータを生成することができるようになります。 オートエンコーダの利用例 最後にオートエンコーダの実際の利用例を見ていきます。 データ生成 変分オートエンコーダのような生成モデルを用いて、潜在変数をコントロールして、学習させたデータのどれでもないデータ生成することができます。 下に示す図は、CVAEで生成した1-9の手書き文字画像です。 各行は共通の潜在変数から生成されたため、クラスによらず線の濃淡や丸み、傾きなどが似た文字が生成されています。 異常検知 オートエンコーダはに用いることもできます。 入出力に正常データを与えて学習すると、正常データに含まれる特徴を学習します。 学習の結果、正常データを入力した場合、その正常データを正確に復元できるようになります。 このオートエンコーダに異常データを入力するとどのような出力となるでしょうか。 理想的には、ネットワークは正常データに含まれる特徴をうまく拾い上げ、それらから元のデータを復元するものになっているため、異常データの特徴をうまく抽出することはできません。 同様に、出力データにも異常データの特徴は反映されません。 したがって、入出力データを比較し、大きな違いがあればその入力は異常データであると言えます。 この方法では、入出力の差が大きい箇所も特定できるため、異常個所の特定まで可能です。 下の図は、正常なECG波形を学習したオートエンコーダを使って、正常な波形と異常な波形をそれぞれ入力した場合の出力との比較です。 正常な波形は入出力がほぼ一致しているのに対して、異常な波形は入出力信号が大きく異なっており、異常であることが明確に判断できます。 ノイズ除去(デノイジングオートエンコーダ) デノイジングオートエンコーダの学習では、人為的にノイズを加えたデータを入力として、ノイズ追加前のオリジナルのデータを出力するよう学習します。 このような学習を経ると、オートエンコーダはノイズが含まれたデータの中から、オリジナルデータを表す主要な特徴だけを取り出すことができるようになります。 この特徴量をデコーダに通すことで、クリーンなデータを復元することができます。 下の図は、十字状のノイズが含まれた画像に対しての、オートエンコーダを使ったデノイズ例です。 オリジナルの画像として手書き数字文字、ノイズとしてランダムに十字状の欠損を与えた画像を入力として、オリジナル画像を出力する用学習します。 このように学習して、十字欠損が入った画像を適切にデノイズするオートエンコーダを作成できます。 MATLABを使用したオートエンコーダ 積層オートエンコーダのような段階的な学習を実装するのは、比較的手間がかかります。 これら関数を組合わせることで、素早く、手軽にオートエンコーダを試すことができます。 さらに、MATLABは画像のみならず時系列信号のにも使うことができ、LSTM レイヤも関数一つで呼び出すことができますので、LSTMオートエンコーダの構築も可能です。 また、比較的新しいVAEといった方法では、エンコーダとデコーダの間にランダムサンプリングが必要となるなど、より柔軟な処理が必要となります。 Deep Learning Toolboxには、カスタマイズ可能な学習ループを回す仕組みがありますので、目的に合ったネットワークや学習手順を構築できます。 MATLABは産業界で広く使われてきたという歴史から、最終成果物の実装、共有までをサポートしています。 作成したネットワークの、までを含む、ワークフロー全体をMATLABがワンストップでカバーします。

次の