「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-戻る([[ニューラルネットワーク]]、[[画像処理とコンピュータビジョン(AI)]])
--一般的なフツーの[[ニューラルネットワーク]]
---[[順伝播型ニューラルネットワーク(FNN)>ニューラルネットワーク#mcd402f7]]
---[[ディープニューラルネットワーク(DNN)>ニューラルネットワーク#ge448516]]
---[[畳み込みニューラルネットワーク(CNN)]]
--[[再帰型ニューラルネットワーク(RNN)]]
---[[長短期記憶ニューラルネットワーク(LSTM)]]
---[[RNN Encoder-Decoder(Sequence-to-Sequence)]]
--[[生成モデル>機械学習の理論#p3f4e303]]系の[[ニューラルネットワーク]]
---自己符号化器(AE:オートエンコーダ)
---[[テキスト生成系(Transformer系)]]
---[[敵対的生成ネットワーク(GAN)]]

*目次 [#ka4e8507]
#contents

*概要 [#b2d7f0fb]
自己符号化器(AE:オートエンコーダ)、自己識別機とも呼ばれる。

-入力データを低次元の潜在表現にエンコードし、~
その後デコードして元のデータを再構築するためのモデル
-データの次元削減や特徴抽出などのタスクに使用される。
-入力データの再構築誤差を最小化することで訓練される。
-(余談だがVAEと違って、確率的生成モデルではない。)

**歴史 [#n519f0fb]
-元々、(入出力兼務の)可視層と隠れ層の2層の[[ニューラルネットワーク]]、展開すれば、3層の[[ニューラルネットワーク]]で、

-[[勾配消失問題>#id252e38]]を[[事前学習>深層学習のテクニック#ebe9edcc]]と[[ファイン・チューニング>深層学習のテクニック#ea94272b]]によって解決し[[ニューラルネットワーク]]発展の礎となった。

-AEのポイントは、可視層より隠れ層の次元(数)を少なくしてある(情報の圧縮)。

-このAEを積み重ね、ディープAE、正確には、積層AEを作成(ジェフリー・ヒントン)。~
層の積み重ねは、[[事前学習>深層学習のテクニック#ebe9edcc]]と[[ファイン・チューニング>深層学習のテクニック#ea94272b]]によって達成される。
--はじめに[[事前学習>深層学習のテクニック#ebe9edcc]]を行い層を積み重ねていく。
--最上部に層を足し、教師あり学習にする(?)
---ロジスティク回帰層~
---回帰問題の場合、線形回帰層

--最後の仕上げに[[ファイン・チューニング>深層学習のテクニック#ea94272b]](全体で再学習)する。

**特徴 [#j32b07ab]

***教師あり、なし [#k104eb7b]
-教師なし学習
--エンコーダーで主成分分析と同じ次元削減を行う。
--中間層の次元削減されたデータを潜在変数と呼ぶ。
--デコーダーで入力データと一致するデータを出力する。
--(データ作成の観点では)教師なしだが(、学習の観点では)、入力データを用いた教師あり学習。
--出力データと入力データの誤差を再構成誤差(Reconstruct Error)と呼ぶ。

-モデルの構造~
入力層、中間層、出力層の3層のAEの場合、
 y = f2(W2 f1(W1x + b1) + b2) 
--入力層より中間層の方が小さいAEを不完備(undercomplete)なAEと呼ぶ。
--出力層の活性化関数f2は[[恒等関数>#ea439f39]](別に分類問題ではないので)

***入出力を一致させる。 [#wd3475df]
-入出力が一致するように各エッジの重みを調整~
-出力と入力に対して誤差を算出し、その差が小さくなるように[[誤差逆伝播法>深層学習の誤差逆伝播法]]を用い重みを学習する。

***特徴表現の獲得 [#l1ca8724]
隠れ層の次元を小さくして情報量を小さくした特徴表現を獲得する。~
(入力の情報を圧縮される。→ 学習の結果、重みとして要約される。)

-入力したデータをEncoderで潜在空間上の特徴量([[潜在変数z>#wbd82034]])に圧縮(次元削減・特徴抽出)し、

-潜在空間上の特徴量([[潜在変数z>#wbd82034]])からDecoderで復元(再び戻して出力)する。

-潜在空間:何かしらの分布を仮定した潜在空間を学習

※ EncoderもDecoderも[[ニューラルネットワーク]]

***種類 [#i6d2c6b3]
**種類 [#i6d2c6b3]
様々な種類があるもよう。
-[[変分AE(VAE : Variational auto-encoder)>#scfd6dd7]]
-スタック型AE
-スパースAE
-ディープAE
-デノイジングAE
-, etc.
***[[変分AE(VAE : Variational auto-encoder)>#scfd6dd7]] [#ld8b4ca0]
***[[ベクトル量子化変分オートエンコーダ(VQ-VAE)>#r3022418]] [#ee7ea523]
***スタック型AE [#q31bd6c7]
***スパースAE [#s9123927]
***ディープAE [#r10b8379]
***デノイジングAE [#ef099ad3]
***, etc. [#r79bada1]

**できること [#m200a83f]
様々な用途で利用されている。

***[[自然言語処理>言語処理(AI)#a5995dbe]] [#tc292ad4]
***[[ロボティクス>人工知能(AI):ロボティクス#o1cea037]] [#v242e4af]
***[[異常検知>AIの活用例#o6ad8a75]] [#p61cb6cc]
***[[需要予測>AIの活用例#j8f8a628]] [#g91436e7]

*詳細 [#d4622d02]

**変分オートエンコーダ(VAE) [#scfd6dd7]
変分AE(VAE:Variational Autoencoder)

-画像生成、音声生成、異常検知などのタスクでは[[AE>#b2d7f0fb]]を土台とした変分オートエンコーダ(VAE)を使う。

--VEと異なり、確率的生成モデルの一種で、データの潜在表現を学習し、その表現から新しいデータを生成する。

--入力データが何らかの分布(一般的には多変量正規分布や正規分布)に基づいて生成されていると仮定している。

--データを低次元の潜在空間にエンコードし、その後デコードして元のデータを再構築する。

---エンコーダー~
・入力データを潜在空間の平均と分散の[[潜在変数z>#wbd82034]]にマッピングする。~
・入力データが潜在空間内のどの位置に分布するかを表す確率分布を定義する。~
・マッピングは厳密な分布ではなく、平均と分散のパラメタを持つ確率分布として表現される。

---デコーダー~
・潜在空間からサンプリングされた[[潜在変数z>#wbd82034]]をサンプリングし、元のデータを再構築する。~
・潜在空間からサンプリングされた[[潜在変数z>#wbd82034]]を元に、再構築データの確率分布を定義する。~
・

--生成される画像は鮮明ではなく、ぼやけた画像になる。

***仕組み [#g2c513ed]
-Encoder・Decoder
--Encoder
---入力データが多次元ガウス分布として符号化され、その分布から[[潜在変数z>#wbd82034]]をサンプリング。
---つまり、多次元ガウス分布を記述する平均 μ と分散 σ^2 を返すようにEncoderを学習。
--Decoder
---サンプリングされた[[潜在変数z>#wbd82034]]から、元々の入力データを再構成したものを出力。

-学習~
損失関数(「再構築誤差」と「潜在表現の分布」)を最小化する。

--損失関数
---一般的にKLダイバージェンス(Encoderによる誤差)や再構築誤差(Decoderによる誤差)の展開式を損失関数として使用する。
---これらの損失関数は、再構築誤差を最小化し、同時に潜在表現の分布が事前に定義した正規分布に近づくように学習する。

--以下のように学習
---入力をエンコードした潜在変数をサンプリングしたzをデコードした出力が近くなるよう。
---エンコードの分布が平均 0、標準偏差 Iのガウス分布に近くなるよう。

--潜在変数のサンプリング処理が入るため誤差逆伝播を行うことが困難となる。
---これをReparameterization Trick(再パラメタ化トリック)で解決。
---Encoderによってサンプリングに利用する変数μ,σを出力
---新たにサンプリング変数εを導入し潜在変数zを「z=μ+εσ (ε~N(0, I))」のように再定義
---ネットワーク全体が微分可能になり、確率的な変数の勾配を正確に計算できるようになる。

-「D KL(N(μ,σ)∣N(0,I))」を正則化項として加えると集合の中心は原点付近となる。
--KLダイバージェンスは事前分布と事後分布の情報量の差を表す。
--D KL(事前分布|事後分布)
--事前分布:平均 μ、標準偏差 σ
--事後分布:平均 0、標準偏差 I

***潜在変数z [#wbd82034]
-潜在空間上の特徴量、潜在変数z
--潜在変数zにガウス分布を仮定し、潜在変数zを(ガウス分布と言う)構造の押し込むことが出来る。
--潜在変数zは入力x1, x2を、異なる潜在変数の領域に正規分布に沿ってマッピング。
--潜在変数zが連続的な分布(正規分布)になっているので調整することで連続的に生成データが変化する。

-層

--Encoder
---μ,σ^2 = encoder(x)

--中間層
---z~N(μ, σ^2)
---ノイズ : ϵ~N(0, I)
---z = μ+σϵ

--Decoder
---X=decoder(z)

***最適化 [#z408764b]
x をより良く表現する p(X) のパラメタを学習するには、周辺尤度 logp(X) の最大化を考える。

|記号|説明|h
|X|再構成されるデータ|
|p(X)|再構成されるデータの確率分布|
|z|[[潜在変数z>#wbd82034]]|
|p(z)|[[潜在変数z>#wbd82034]]の確率分布|
|p(X|z)|[[潜在変数z>#wbd82034]]が与えられた時のxの確率分布(Decoder)|
|q(z|X)|データXが与えられた時のzの確率分布(Encoder)|

**ベクトル量子化変分オートエンコーダ(VQ-VAE) [#r3022418]

***... [#jcf76cc5]

*参考 [#e1a7b1f5]
-深層学習についてのレポート(画像系、CNN画像認識以外)~
https://www.osscons.jp/joy1y64w3-537/#_537

-YouTube
--[[AI教室 AIRS-Lab>深層学習(deep learning)#o49c1a2e]]
---AIによる画像生成を学ぼう! 【VAE、GAN】~
https://www.youtube.com/playlist?list=PLcd5jOpoEDGBDqiRMS4eqkfBwl28ixRYc

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS