AutoEncoderの使われ方一覧

# AutoEncoderとは
機械学習において、非常にシンプルで美しく、強力なアーキテクチャであるAuto Encoder (AE)

2006年にかの有名なヒントン教授らが提唱した。([Wikiより](https://ja.wikipedia.org/wiki/オートエンコーダ))

このアーキテクチャは機械学習の至る所に応用されている。本記事では筆者が知る利用方法の一覧をまとめておく。あまりにも広い概念であり、強力で応用先の広いものであるが故に、全てをカバーし切ることはできないことをご了承いただきたい。

# 一覧

## 生成

[Variational Auto Encoder (VAE)](https://arxiv.org/abs/1312.6114)や[条件付きVAE (C-VAE)](https://proceedings.neurips.cc/paper_files/paper/2015/hash/8d55a249e6baa5c06772297520da2051-Abstract.html)が有名である。データセットには存在しないデータを生成することができる。


下の図は MNISTで学習されたVAEの潜在空間を可視化したものである。AutoEncoderは非常にスパースであるが、VAEは潜在空間に連続性を付与することができる性質があるのが特徴的である。これにより、あるデータとあるデータの中間的な生成データを作る事ができる。

![VAEの潜在空間](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528087/83971d05-8055-5d7b-0b94-67c16e83c7ca.png)


### Tips

再構成された画像がボヤけてしまうという問題があるため、生成分野ではVAEはあまり用いられず、敵対的生成ネットワークや拡散モデルが主に用いられる。 これはVAEを学習するときに再構成損失に平均二乗誤差(MSE)を用いていることが原因の一つであり、これにより暗にガウス分布的な出力傾向を持たせてしまうのである。

VAE自体はCycleGANやLatent Diffusionモデルの中にも存在しているのだが、その役割は生成ではなく、変換や圧縮だったりする。


## 表現抽出

[β-VAE](https://openreview.net/forum?id=Sy2fzU9gl)やSparse AutoEncoderが有名。よく入力データのDisentanglement (紐解き) の話で登場する。β-VAEは圧縮された潜在表現のある次元が画像の特徴の一部を変更することに関わっていたりと非常に興味深い。
![スクリーンショット 2023-11-06 22.31.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528087/f69aaf42-9034-8221-ada8-f29e7a75b9a4.png)


## 圧縮

潜在空間のデータの次元サイズを入力データよりも小さくすることによって行う。AutoEncoderといえば誰もがこの機能を思いつくほど、最も有名な使われ方である。

![スクリーンショット 2023-11-06 22.41.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528087/46192aba-0725-b1ae-5484-8c7297996089.png)


### Note: 表現抽出 ≠ 圧縮

例えば、表現抽出ができるSparse AutoEncoderの潜在空間は、入力データのサイズよりも大きい。

また、素のAutoEncoderの潜在空間はかなり不連続になり、スパースになることが知られているため、圧縮したからといって表現抽出と言えない（言いたくない）場合もある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528087/70dda520-a296-eb97-a2ca-0f40f7ad4f72.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528087/93a4a55d-aeb8-4cf3-2e60-d6e93d7148e4.png)

ただ、基本的に圧縮においては、画像といった複雑で高次元のデータを、**簡単**で低次元のデータにして欲しいという願いが存在するため、表現抽出も同時に行われる。

## 変換

入力空間の写像先、すなわち潜在空間を別ドメインのデータにすることである。（e.g. 波形←→スペクトログラム的な）

[CycleGAN](https://arxiv.org/abs/1703.10593)の内部に存在し、アルゴリズムの中核をなしている。（おそらく、GAN特有の学習の不安定性も緩和していると思う）
![スクリーンショット 2023-11-06 22.55.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528087/ef581034-5b2e-95b2-c6dd-85d69453f3f4.png)
![スクリーンショット 2023-11-06 22.56.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528087/d6461fd0-363a-f6e3-08f7-9d87131b0cdd.png)


### ベクトル量子化

ベクトル量子化（Vector Quantization)を潜在空間に対して行うことによって、データをシンボル化することができる。([VQ VAE](https://arxiv.org/abs/1711.00937))
これによって連続値のデータを言語モデル等の扱いやすい形に変換することができる。

![スクリーンショット 2023-11-06 23.04.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528087/57fa6325-f688-bc24-a54c-47280704645c.png)


## 模倣

時空間上のAE. 入力が時系列であり、それを潜在空間上の一つのデータ点に圧縮することを考える。例えばモーションキャプチャで記録した動きを一つのデータ点に圧縮し、そこから再構成してみれば、それは模倣になるだろう。時間差で流れる鏡のようなものと考えると理解しやすいか。

とにかく、時系列上の恒等写像を生成することである。

## 異常検知

これもAEがよく用いられるタスクの一つ。AEが学習したデータセット以外は再構成誤差が大きくなるという性質を用いる。正常データだけで学習することによって、異常データの再構成誤差を大きくなり、検出できる、という算段である。

## ノイズ除去

先の異常検知と考え方は似ており、データから異常を再構成できない性質を用いて画像に存在するノイズを除去することができる。Denosing Auto Encoderと呼ばれる。
![スクリーンショット 2023-11-06 23.09.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528087/0aee408e-91f8-92f1-ceb3-7164703c84da.png)

## 探索

AIエージェントにおいて、探索的行動を取るための報酬としてAEの予測誤差を用いることが考えられる。AEは未学習のデータを再構成することができないため、予測誤差が大きいところは学習していない、すなわち未探索の場所であることが考えられる。

ちなみにこういった予測誤差を報酬として用いて、未学習の領域へと向かおうとする性質を持たせることを、Curiosity(好奇心)と呼んだりする。

# 最後に

今まで述べてきた使い方は、AutoEncoderのある一部分を切り取って見ているに過ぎない。ただ恒等写像を学習するだけのアーキテクチャの中に、これほどまでにたくさんの役割が存在することは、非常に興味深い。データの円環からは美しさすら感じる。ああ、なんて素晴らしいのだろうか！

![スクリーンショット 2023-11-07 22.56.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528087/e107e9b3-4080-9118-f5de-87325dbae40f.png)

最後まで読んでいただき誠にありがとうございました。