GLOSSARY

変分オートエンコーダ(VAE)とは?AI技術でも使われるオートエンコーダの活用例も解説

  • このエントリーをはてなブックマークに追加
変分オートエンコーダ

INDEX

変分オートエンコーダ

AI生成モデルの1種に変分オートエンコーダ(VAE)と呼ばれるものがあります。教師なし学習や半教師学習などで応用されていて、GANとFlowとあわせ三大技術の1つとされています。

この記事では活用事例とあわせて、変分オートエンコーダ(VAE)が抱える課題についてもみていきましょう。

ぜひ最後までご覧ください。

変分オートエンコーダ(VAE)とは?

変分オートエンコーダ

まず、変分オートエンコーダ(VAE)とは何かについて解説します。変分オートエンコーダ(VAE)は訓練データで学習し、似たような画像の生成を行う生成モデルです。

オートエンコーダとデコーダからできていて、オートエンコーダにデコーダの変数を混ぜ、入力とは異なる出力を行います。

似たような画像の生成を行うために、潜在変数の分布を元データの特徴が表れるようにしています。

数学的観点から潜在変数を求めるのは難しいです。しかし、ニューラルネットワークを利用することで、潜在変数を実現させています。

ニューラルネットワークとは?

変分オートエンコーダ

変分オートエンコーダ(VAE)ではニューラルネットワークが利用されていますが、そもそもどういうものなのでしょうか。

人間の脳の神経回路の構造を数学的に表現した手法が、ニューラルネットワークです。脳内にある神経細胞「ニューロン」が語源になっています。

音声や画像などのパターンを認識させるときによく使われています。ニューラルネットワークは、入力層・出力層・隠れ層の3層構成です。

入力層では情報が入力され、出力層でその情報の発信を行います。隠れ層は入力層と出力層の中間にあり、入力されたデータを元にさまざまな計算を行います。

隠れ層の数が多ければ、複雑な問題でも対処可能です。

オートエンコーダの重要性

変分オートエンコーダ

オートエンコーダの重要性についてみていきましょう。まず、オートエンコーダについて簡単に説明します。

オートエンコーダは教師なし学習の1つです。そのため、訓練データのみを利用するのが特徴です。

入力層・出力層・中間層の3つの層と、それらの層を結ぶエッジの多層構造となっています。

ニューラルネットワークを正常に機能させるために、オートエンコーダが欠かせません。

  • 勾配消失の解決
  • 過学習を避ける

オートエンコーダは、これらを解決するために使われています。

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

変分オートエンコーダ

オートエンコーダはどのような場面や用途で使われているのでしょうか。オートエンコーダの活用例をみていきます。

  • ノイズの除去
  • クラスタリング
  • 異常検知

オートエンコーダは主に上記のような場面や用途で使われています。入力されたデータにある必要ない部分を除去したり、データの分類をしたりするためにオートエンコーダが活用されています。

下記ではどのように使われているのか、詳しく解説していきましょう。

ノイズの除去

オートエンコーダが使われている場面の1つにノイズの除去があります。入力データにある必要ない部分を除去するのが、ノイズの除去です。

ノイズ入りのデータをオートエンコーダに入力した後、ノイズが除去されたデータを正解データとして教師あり学習を行います。

これにより、不要なノイズがない高精度なデータを出力可能となります。ノイズが除去された出力データは、他の機械学習でも活用可能です。分類精度を高めるためにはとくに欠かせません。

クラスタリング

クラスタリングはデータを分類することです。オートエンコーダのエンコーダ部分には特徴抽出の機能があります。

クラスタリングではこの機能を使い、正解データのラベルを付けない教師なし学習を行います。

変分オートエンコーダを利用することで、正解と不正解それぞれの特徴にあわせた分類が可能です。

不正解に複数のパターンがある場合でも判別できます。対応する数の分だけグループが作られるため、正解とどのように違うのかという情報まで判別できるのです。

 

異常検知

入力されたデータが正常か異常かを判断し処理するのが、異常検知です。正常データのみを必要とした教師なし学習を行います。

これにより、オートエンコーダは正常データに含まれている特徴を学習します。異常を検知した場合は、その正常データを元に正確に復元を行うことが可能です。

オートエンコーダの種類

変分オートエンコーダ

オートエンコーダにはどのような種類があるのでしょうか。

  • 変分オートエンコーダ(VAE)
  • 積層オートエンコーダ
  • 畳み込みオートエンコーダ(CAE)
  • 条件付き変分オートエンコーダ(CVAE)

主にこれら4つの種類があります。それぞれの特徴について解説します。変分オートエンコーダ(VAE)は生成モデルの1つです。

積層オートエンコーダはオートエンコーダを多層構造にしたものです。このように、それぞれ異なった特徴を持っています。

下記ではこれら4つのオートエンコーダについて紹介します。

変分オートエンコーダ(VAE)

変分オートエンコーダ(VAE)は冒頭でもお伝えしたように、オートエンコーダにデコーダの変数を混ぜて出力を行う生成モデルです。

データの圧縮と復元だけではなく、特徴ベクトル(潜在変数)を確率変数として表すこともできます。

オートエンコーダは次元削減後の特徴ベクトルに制約がないため、データが空間上ではどのように表現されているのかはわかりません。

そこで変分オートエンコーダ(VAE)ではデータの潜在空間上の分布に連続性を持たせるため、正規分布という制約を設けています。

なので、似た潜在変数から似たデータを生成できます。

積層オートエンコーダ

積層オートエンコーダはその名の通り、オートエンコーダを何層にも重ねて多層構造を持たせたものです。

次の入力層として中間層を利用し、1層ずつエンコードとデコードを交互に行い学習させます。そして、初期値を最適解に近づけるのです。

多層化することにより、複雑で高度な特徴量抽出が可能になっています。しかし現在はほとんど使われておりません。

ニューラルネットワークの技術が発展し、積層オートエンコーダのメリットである複雑で高度な特徴量抽出ができる他の種類がメジャーとなったためです。

畳み込みオートエンコーダ(CAE)

エンコーダ・デコーダ部分の全結合層の代わりとして、畳み込みニューラルネットワークを使ったオートエンコーダが畳み込みオートエンコーダ(CAE)です。

入力データの特徴を捉えられる畳み込み層と、得領への依存性を少なくするプーリング層を入力層と出力層の間に加えたニューラルネットワークとなっています。

畳み込み層があることで、エッジやテクスチャなどの空間的な特徴も抽出可能です。そのため、画像の処理をするときによく利用されています。

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

変分オートエンコーダ(VAE)を拡張させたものが、条件付き変分オートエンコーダ(CVAE)です。

変分オートエンコーダ(VAE)は潜在変数を変えると出力クラスが変わる可能性があり、それをカバーするために作られたのが条件付き変分オートエンコーダ(CVAE)です。

エンコーダ・デコーダの両方にラベル情報を入力し、出力クラスの指定や潜在変数の調整を可能にしています。

ラベルの入力方法として次の2つがあります。

  • デコーダで1次元の潜在変数ベクトルに結合させる
  • 足し合せる

このように学習にラベル情報を含めることにより、学習が終わった後にラベルのデータの生成もできるようになります。

変分オートエンコーダの成り立ちについて

変分オートエンコーダ

変分オートエンコーダ(VAE)の成り立ちについてもみていきましょう。

  • エンコーダ・デコーダの意味
  • 分布をDNNで学習する
  • 微分可能な疑似サンプリング
  • 変分ベイズの類推
  • EM・VBとの比較

これら5つの観点から変分オートエンコーダ(VAE)の成り立ちをみていきます。

エンコーダ・デコーダの意味

まず、エンコーダ・デコーダの意味を解説します。どちらも情報処理や通信技術の分野で使われる装置・アルゴリズムです。

エンコーダは与えられたデータや情報を特定の形式・符号に変換する装置・アルゴリズムのことです。音声や画像をデジタルデータにしたり、色の強度などのアナログ信号をデジタルの数値に変換したりするときに使われます。

デコーダはエンコーダで変換された情報を元に戻す装置・アルゴリズムです。エンコードされた情報を元に戻すことで正しい解釈ができたり利用できたりできます。

これらはペアで使われることが多いです。ニューラルネットワークの文脈ではエンコーダとデコーダが共に使われたモデルが利用されます。

分布をDNNで学習する

変分オートエンコーダ(VAE)ではエンコーダとデコーダの分布を、DNNで学習します。DNNはDeep Neural Network(ディープニューラルネットワーク)の略です。

ディープラーニングの1種で、人間のように深い思考を行えるのが特徴です。

DNNで学習させることにより、入力データの確率分布の推定・変分オートエンコーダ(VAE)で求めた潜在変数の重要度の定量評価ができるようになります。

微分可能な疑似サンプリング

サンプリング処理が含まれると、誤差逆伝播が使えません。これを使えるようにするため、「Reparameterization trick」という方法が提案されました。

これは確率分布を可微分な確定的関数に置き換えるためのテクニックです。これにより、エンコーダ・デコーダの処理が微分可能となり、誤差逆伝播が使えるようになるのです。

誤差逆伝播を使えるようにすることで、DNNでの学習ができるようになります。

変分ベイズの類推

変分ベイズは確率モデルの潜在変数やパラメータに関する事後分布を近似させるために使われる方法です。

変分ベイズには事後分布の計算が難しいという問題があります。そのため、変分オートエンコーダ(VAE)では変分ベイズ的な方法を使っています。

真の事後分布を完全再現するのではなく、近似分布を使って近似させる方法です。平均場近似を使わないで新しい近似分布を使い、それをDNNで学習します。

これにより、真の事後分布が非常に複雑でも、近似分布を使ってそれをうまく表現できるようになるのです。

EM・VBとの比較

EM・VBとの比較についてもみていきましょう。最尤推定を行う方法が、EMアルゴリズムです。

目的関数は対数尤度です。潜在変数とパラメータが明確に区別されています。パラメータの計算で使う負担率はEステップで求め、Mステップでパラメータを点推定します。

変分オートエンコーダ(VAE)は変分ベイズを発展させたものです。KLダイバージェンスもしくは下限が目的関数です。新しい近似事後分布を導入することで、パラメータと潜在変数を明確に区別しています。

変分オートエンコーダのMNISTへの適用

変分オートエンコーダ

MNISTへ変分オートエンコーダ(VAE)を適用させる方法を紹介します。

MNISTはMixed National Institute of Standards and Technology databaseの略で、6万枚の訓練データと1万枚のテストデータを集めた画像データのセットです。

  • 確率モデルとしての定式化
  • 再構成誤差
  • KLダイバージェンス

MNISTへ適用させるための手順はこれら3つです。確率モデルとして定式化し、入力されたデータが正確かを判断するために再構成誤差を使います。

最後にKLダイバージェンスを計算し、確率分布の類似度を調べます。

下記ではこれら3つの手順について解説していきましょう。

確率モデルとしての定式化

まず、行うのは確率モデルとしての定式化です。ここで、入力と潜在変数の設定をします。セルに対応するため、MNISTでは特定の条件が設定されます。

手書きの白黒数字は隣り合うセルに依存していると考えられるでしょう。なので、各セルは独立していないと考えた方がいいでしょう。

ただし、エンコーダで潜在変数を抽出するときに、隣り合うセルの情報も抽出されます。

各セルを独立させるためにベルヌーイ分布を利用しますが、セルの依存関係も考えた推定ができることにも注意しましょう。

再構成誤差

確率モデルとして定式化するために仮定した分布を、再構成誤差に入れていきます。入力されたデータがどれだけ正確に再現できるかを評価するために使われるのが再構成誤差です。

画像の場合、入力された画像と再構成された画像のピクセルレベルで判断します。再構成誤差が小さいほど正確に再現できていると判断できます。

KLダイバージェンス

次にKLダイバージェンスを計算します。確率分布間の類似度を測るために行われる計算です。

2つの確率分布がどれだけ似ているもしくは違うのかを表します。

MNISTを題材にした変分オートエンコーダの実装方法

続いてMNISTを題材に、変分オートエンコーダ(VAE)を実装する方法を紹介します。

  • データの準備
  • VAEクラスの実装
  • モデルの学習
  • 再構成画像の定性評価
  • 潜在空間のマッピング
  • 潜在変数を用いた再構成画像の生成
  • 潜在空間のウォークスルー

この流れで実装を行います。まず行うのは、データの準備です。データの準備ができたら、VAEクラスの実装を行い、モデルを学習させます。

その後、再構成画像の定性評価・潜在空間のマッピングなどの評価実験を行います。

それぞれの手順について詳しく解説していきましょう。

データの準備

まず、MNISTを利用するためにデータの準備をします。データのダウンロードは公式HP以外にもtorchvisionでも準備できるでしょう

torchvisionで取得できるデータは訓練データとテストデータに分けられています。目的に応じて、内訳を変更しましょう。

例えば学習を停止させるタイミングを判断するために検証データを使いたいのなら、学習データを検証データとして分離させてください。

バッチ学習を簡単に行いたいのなら、Dataloaderを利用するといいでしょう。データの一括インポート・エクスポートをしてくれるツールです。

使い方は簡単です。バッチサイズとシャッフルの有無を指定した後、インスタンス化をします。

すると、指定したバッチサイズでイテレーションをしてくれるDataloaderが作られます。

VAEクラスの実装

次にVAEクラスの実装です。クラスの定義にpytorchを使う場合は、nn.Moduleを継承しなくてはいけません。

ネットワーク構造の定義はコンストラクタで行います。分散には非負制約があるので、エンコーダの分散出力部分は分散の対数を出力しましょう。

  • エンコーダの定義
  • 潜在変数のサンプリング
  • デコーダの定義
  • 順伝播処理

これらを順に行い、VAEクラスを実装させます。エンコーダの定義では、活性化関数にReLUを使います。デコーダの定義でもReLUを使いましょう。

モデルの学習

実装が完了したら、モデルの学習を行います。

  • モデルのインスタンス化
  • 学習の準備
  • 学習イテレーション

この順に学習させていきます。モデルの表現力の違いを確認するためには、例えば次元数を10と20に設定したモデルを別にインスタンス化して学習させておくといいでしょう。

学習の準備では学習率や最大更新回数を設定します。例えば、最大更新回数を1000回に設定し、10回連続で検証データのロスが下がらなかったら学習をストップさせるなどです。

学習イテレーションではデータの準備で定義したDataloaderを利用して、モデルの学習・検証をします。

モデルの学習をするときは、posterior collapseと呼ばれる現象に注意しましょう。

学習初期に再構成誤差よりもKLダイバージェンスの方が大きい場合に起こるトラブルです。

潜在変数の事後分布と事前分布が同じになり、データの再構築がうまくできなくなってしまいます。

学習初期はKLダイバージェンスの項を小さくして重みを付け、徐々に大きくするようにすればposterior collapseを防げるでしょう。

再構成画像の定性評価

再構成画像の生成や潜在空間を可視化するために、評価実験を行います。再構成画像の定性評価はその1つです。

再構成がうまくできていても、ラベルの判別が正確に行われているとはいえません。その点は注意しましょう。

潜在空間のマッピング

先ほど述べたように、再構成がうまくできていてもラベルの判別が正確かどうかはわかりません。そのため、潜在空間のマッピングの確認を行います。

潜在変数の事前分布で標準正規分布を想定した場合、原点を中心にしたマッピングになります。

潜在変数を用いた再構成画像の生成

テストデータを使って潜在空間のマッピングを確認したら、潜在変数を人工的に与えてみましょう。

テストデータを使った潜在空間のマッピングに準じた結果になっているかを確認してください。

格子点を潜在変数と考え、デコーダに入力したときに生成される画像を確認します。

潜在空間のウォークスルー

潜在空間のウォークスルーとは、潜在空間を線の形になるように歩くことです。線の形になるように歩いた場合、再構成画像がどのように変化するかアニメーションで確認します。

デコーダに潜在空間を渡り歩く方向の偏在変数を線の形に変わるように入力しましょう。すると、再構成画像が変化しているのがわかります。

 

変分オートエンコーダモデル作成について

変分オートエンコーダ

変分オートエンコーダ(VAE)モデルの作成について解説していきます。変分オートエンコーダ(VAE)モデルでは次の3つの要素が欠かせません。

  • Encoder
  • 潜在空間
  • 損失関数

入力データを潜在空間に反映させるEncoder・データを表現させるための潜在空間・予測値と正解値のズレを計算するための損失関数の3つです。

下記ではこれら3つの要素についてみていきます。

Encoder

Encoderは変分オートエンコーダ(VAE)モデルの一部で、入力データを潜在空間に反映させる役割があります。

入力データを受け取ったEncoderは、潜在変数の確率分布に変換させます。

Encoderの設計は変分オートエンコーダ(VAE)モデルの性能に影響を与えるため、適切な結果を得るためには慎重に設計しなくてはいけません。

潜在空間

本記事で度々、「潜在空間」という言葉を使ってきましたが、改めて潜在空間について説明します。

潜在空間はデータを表現するために使われる抽象的な空間のことです。入力されたデータをより抽象的な特徴に変換したり、表現したりする空間です。

変分オートエンコーダ(VAE)は潜在空間を学習し、エンコーダ・デコーダの訓練をするのが目的となっています。

損失関数

損失関数は機械学習モデルが計算した予測値と、実際の正解値のズレを計算するための関数です。

計算によって出た結果によって、実際の正解値と予測値にどれくらいの距離や差があるのかを知ることができます。

予測値は事前に構築された機械学習モデルが計算した値です。しかし、必ず正確な答えが出るとは限らないので注意しましょう。

変分オートエンコーダの課題

変分オートエンコーダ

GANやFlowと比較したとき、扱いやすさなどから変分オートエンコーダ(VAE)は好まれることが多いです。

GANも生成モデルの1つで、確率分布の設定の仕方に違いがあります。GANでは確率分布を暗黙的に仮定しています。

Flowはデータの尤度を求めることができ、その尤度を直接最大化することで学習が可能です。また、逆変換もできます。

GANよりも安定した学習ができ、Flowにはできない潜在変数を低次元に落とせるのは変分オートエンコーダ(VAE)のメリットです。

しかし、課題もあります。生成画像がぼやけたり、尤度の計算ができなかったりというデメリットがあります。

生成画像の鮮明さでいうとGANの方が優れており、尤度の計算をしたいのならFlowがおすすめです。

変分オートエンコーダを理解するためには?

変分オートエンコーダ

変分オートエンコーダ(VAE)を理解するためにはどのような方法があるのでしょうか。

変分オートエンコーダ(VAE)は「オートエンコーダが発展した手法」といわれています。しかし、実際には違います。

変分推論を骨組みに考えられた事後分布の近似手法です。

オートエンコーダの目的は、画像などの観測値を低次元の特徴量ベクトルに圧縮することです。

人間の顔を例にすると、目や鼻の位置など画像を決めるための情報に圧縮します。一方、変分オートエンコーダ(VAE)は画像を生成します。

オートエンコーダと名前につくのは、オートエンコーダの形になっているためです。

より詳しく知るためには、変分オートエンコーダ(VAE)を実際に使ってみるのがいいでしょう。

実際に動かしてみることで、仕組みやどういったことができるのかを把握できます。

まとめ

変分オートエンコーダ

ここまで変分オートエンコーダ(VAE)について解説してきました。いかがでしたか?

変分オートエンコーダ(VAE)を理解するためには、実際に自分の手で動かしてみることが一番の近道です。

実装方法についても紹介しましたので、ぜひ参考にしてみてください。

さらに、今注目を集める生成AIリスキリングの第一歩を。生成AIパスポートとは?

生成AIパスポートは、一般社団法人生成AI活用普及協会(GUGA)が提供する、AI初心者のために誕生した、生成AIリスクを予防する資格試験です。AIを活用したコンテンツ生成の具体的な方法や事例に加え、企業のコンプライアンスに関わる個人情報保護、著作権侵害、商用利用可否といった注意点などを学ぶことができます。

⽣成AIの台頭により、AIはエンジニアやデータサイエンティストといった技術職の方々だけではなく誰もがAIを使えるようになりました。今、私たちがインターネットを当たり前に活用していることと同様に、誰もが生成AIを当たり前に活用する未来が訪れるでしょう。

そのような社会では、採用や取引の場面で、生成AIを安全に活用できる企業・人材であることが選ばれる前提条件になり「生成AIレベルの証明」が求められることが予測できます。生成AIパスポート試験に合格すると、合格証書が発行されるため、自身が生成AIを安全に活用するためのリテラシーを有する人材であることを、客観的な評価として可視化することが可能です。

ぜひあなたも生成AIレベルを証明し「生成AI人材」に仲間入りしましょう!

詳細はこちら