[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

iPALM-based mel-spectrogram inversionを活用してMFCCからの音声復元を試してみた

はじめに

前回記事の続きである.

tam5917.hatenablog.com

ところでlibrosa には mfcc_to_audio という関数が用意されている.

librosa.org

この関数はMFCC(音声認識では定番の特徴量)を音声に復元する機能を実装している.処理の具体的な中身は

  1. mfcc_to_mel (逆DCT→dBスケールからメルスケールへの変換)

  2. mel_to_audio

という2つの処理の連結であるから,mel_to_audio の部分を前回記事のiPALM-basedの復元手法やADMM-basedの復元手法に置き換えれば,音質向上が期待できる.

本記事では iPALM-basedの復元手法と mfcc_to_audio を比較し,その結果を報告するものである.

実装

以下に置いた.Enjoy!

前回記事で紹介した実装からの差分は,入力特徴量がMFCCとなることに伴った関数の引数の調整が主である. 参考までにmfcc_to_audioのデモストレーションスクリプトは以下の通り.

実験条件

実験の設定は以下の通り.ちなみに使用した音声は16kHzサンプリングの1発話音声である(『青い植木鉢』).

項目 設定
メルスペクトログラムの次数 128
MFCCの次数 16から128まで16刻み
FFTの窓長 1024
フレーム長 1024
ホップ長 256
分析窓 Hann窓
最適化のステップ数 500
iPALM ハイパパラメタ λ 10
iPALM ハイパパラメタ α 0.9

メルスペクトログラムの次数は128に設定した.これは mfcc_to_mel を実行するうえでターゲットとなるメル次数を設定する必要があったためで,メルスペクトログラムを活用する他のタスクでも標準的(むしろ,やや大きめ)な次数の設定である.

MFCCの抽出に際して,音声認識系タスクでは事前に音声データに対してプリエンファシスフィルタをかけるのが一般的だが,今回は認識が目的ではなく復元の様子を観察することが目的なので,当該フィルタ処理を省略した.

MFCCの次数は16から128まで16刻みで変えて実験した.MFCCでは通常128ほど次数を大きく設定することはない.MFCC自体がスペクトル包絡情報(= 対数パワースペクトルに対する低次のケプストラム成分)の取得を目的としたものであるから,大きな次数での分析・抽出はあまり行われない.13次元や20次元に設定する例をよく見かける.本実験では次数を上限の128まで順に大きくすることで,音質の変化を観察する目的があった.

MFCCの各次数ごとに10回試行して客観的評価指標(PESQ,ESTOI)のスコアを取得した.繰り返し試行したのは初期値のランダム性に伴ってスコアがブレるためである.

実験結果

PESQとESTOIの箱ひげ図を,図1と図2にそれぞれ示す.

図1:PESQ

図2:ESTOI

まず,いずれの次数においてもiPALM-basedの手法は mfcc_to_audio の音質を概ね上回っていることが確認できる. 次数16と32では音質の劣化が著しいことが見て取れるが,元のスペクトログラムからそれだけ情報を大幅に削っていると理解できる.次数48付近から音質が向上しはじめ,次数80付近で一旦サチる傾向が見られた.次数128では最も音質が良いが,これはメルスペクトログラムとMFCCの間で情報がほぼ落ちていないと解釈できる.

MFCCの各次数における具体的な復元音声の音質は読者も気になるところだと思うので,それら音声を試聴できるように準備した.いずれもiPALM-basedの手法で得られた復元音声である.次数16や32であっても,『青い植木鉢』は何とか聞き取れるのではなかろうか.認識系タスクでよく用いられる次数の小さいMFCCにも,発話内容がかろうじて聞き取れる程度の情報が少なくとも残っていると実感できる.

種類 音声
元音声
次数 16
次数 32
次数 48
次数 64
次数 80
次数 96
次数 112
次数 128

MFCCを逆変換する関連研究

MFCC系列の逆変換に基づいて振幅スペクトルや音声波形を復元する先行研究を探すと,例えば以下の論文が見つかる.

前者は音声強調への応用研究,後者は音声波形合成への応用研究である.後者の論文では,STFT振幅スペクトル(と称するスペクトル包絡)  \boldsymbol{S} は次式で復元できる旨が簡潔に述べられている:

 \displaystyle
\hat{\boldsymbol{S}} = \boldsymbol{M}^{+} \exp(\boldsymbol{D}^{+} \boldsymbol{C})

ここで  \boldsymbol{M} はメルフィルタバンク行列, \boldsymbol{D} はtruncated な DCT行列(低次ケプストラムを取る都合上、高次ケプストラム帯の係数を落としたもの),  \boldsymbol{C} はMFCC系列であり, +の記号は疑似逆行列の演算を意味する.mfcc_to_mel は上式の exp 演算までで止めたものに対応している.メルフィルタバンク行列の疑似逆行列をかけて周波数軸のスケールをリニアスケールにまで戻してしまったら,もはやメルスペクトログラムのinversionは適用できない.

おわりに

iPALM-basedの復元手法を使えば音質が改善されるのは最初から分かっていたわけだが,ひとつのリファレンスとして記事を残しておこうと考えたのだった.MFCCからのinversionもまた面白い研究トピックなので,引き続き調査したい.

iPALM-based mel-spectrogram inversion (ICASSP 2023) をPythonで実装しメルスペクトログラムからの音声復元を試してみた

はじめに

前回記事の続きである。

tam5917.hatenablog.com

その記事では以下の論文で提案されたアルゴリズムを実装していた。

この論文の中で、iPALM-based mel-spectrogram inversion というメルスペクトログラムからの音声復元アルゴリズムが比較対象として掲載されていた。ちなみにそのアルゴリズム自体は以下の論文が初出である:

せっかくなのでiPALM-basedな手法もPythonで実装しようというわけである。

実装

以下に置いた.Enjoy!

demo_ipalm_inversion.py

実験条件は下表の通りである.使用した音声は16kHzサンプリングの1発話音声である(『青い植木鉢』).

項目 設定
メルスペクトログラムの次数 80
FFTの窓長 1024
フレーム長 1024
ホップ長 256
分析窓 Hann窓
最適化のステップ数 500
iPALM ハイパパラメタ λ 10
iPALM ハイパパラメタ α 0.9

実験結果

元音声と復元後の音声をそれぞれ示す.iPALMが提案手法である.参考までに前記事のADMM法とlibrosaの mel_to_audio による復元音声を載せた.iPALM法もADMM法と同様,mel_to_audio よりもクリアな復元音声になっていることが分かる.iPALM法と前回のADMM法を比較すると、聴いた印象で大きな違いは感じられなかった.

種類 音声
元音声
復元音声 (iPALM)
復元音声 (ADMM)
復元音声 (librosa)

ちなみに復元音声(iPALM)の客観評価指標は以下の通りとなった:

  • PESQ = 3.5777
  • ESTOI = 0.9752
  • SCM [dB] = -30.72

SCMに関してはADMM法と比べてやや大きめのスコアが出た.ちなみに同じ音声を対象に何回か復元を試してみたが,初期化の影響を受けて多少スコアは変動することが分かっている(平均 ± 標準偏差を書かなかったのはサボり).

おわりに

日本語話者データセットを対象とした規模の大きな検証実験は後の記事にて.ADMMとiPALM周辺の勉強もしっかりと進めたい.

『Mel-Spectrogram Inversion via Alternating Direction Method of Multipliers』に基づくメルスペクトログラムからの音声復元手法をPythonで実装してみた

はじめに

最近,以下の論文がarXivで見つかった:

Yoshiki Masuyama, Natsuki Ueno, and Nobutaka Ono, "Mel-Spectrogram Inversion via Alternating Direction Method of Multipliers, " arXiv:2501.05557, 2025

arxiv.org

メルスペクトログラムから元の音声を復元する手法である.メルスペクトログラムはSTFTスペクトログラム自体がメルフィルタバンクを通して圧縮されたものなので,元の音声に戻すにはひと工夫が必要となる.

上記の論文にはアルゴリズムがとてもクリアに書かれているので,本記事では簡単なデモンストレーションを実装したので紹介する,ということ.

ちなみに音声情報処理系のライブラリlibrosaには mel_to_audio が実装されている.これはメルスペクトログラムに対して二乗誤差最小化の意味で最適な STFTスペクトログラムを求め,Griffin-Lim アルゴリズムにより位相復元することで音声へと戻す実装である.音質はそれほど高くない.それぐらい復元は難しい問題ということである.

元論文のデモ音声は以下から視聴できる:

yoshikimas.github.io

実装

以下に置いた.Enjoy!

実験条件は下表の通りである.使用した音声は16kHzサンプリングの1発話音声である(『青い植木鉢』).

項目 設定
メルスペクトログラムの次数 80
FFTの窓長 1024
フレーム長 1024
ホップ長 256
分析窓 Hann窓
最適化のステップ数 500
ADMM ハイパパラメタ λ 5000
ADMM ハイパパラメタ ρ 0.1

実験結果

元音声と復元後の音声をそれぞれ示す.ADMMが提案手法である.参考までにlibrosaのmel_to_audioによる復元音声を載せた.mel_to_audio よりもクリアな復元音声になっていることが分かる.

種類 音声
元音声
復元音声 (ADMM)
復元音声 (librosa)

ちなみに復元音声(ADMM)の客観評価指標は以下の通りとなった:

  • PESQ = 3.8405
  • ESTOI = 0.9824
  • SCM [dB] = -45.59

おわりに

アルゴリズムがきれいに書かれており,良い論文だなぁという印象を持った.多数の日本語音声サンプルを対象にした評価と検証はまた後ほど.

日本語x-vector抽出器により声優統計コーパスからx-vectorを抽出してPaCMAPで可視化した話

はじめに

次元削減の新たな手法として,PaCMAPの存在を知った.

github.com

以前の記事にて,声優統計コーパスを対象に,次元削減手法の1つであるUMAPを使ってxvectorの可視化を試みた.

tam5917.hatenablog.com

今回はPaCMAPで同様の可視化を試みたので,その結果を示す.

実装

以下のリポジトリに置いてある.

github.com

  • plot_pacmap.py ... xvectorを話者ごとに可視化

  • plot_pacmap_all.py ... 全話者のxvectorを可視化

可視化例

図1に声優統計コーパス3話者から抽出したx-vectorを可視化した例を示す.3話者とは「fujitou, tsuchiya, umemura」の3名である.

図1. PaCMAPによるx-vectorの可視化(声優統計コーパス3話者)

参考まで,図2にUMAPにより可視化した例を示す(n_neighbors=10).

図2. UMAPによるx-vectorの可視化(声優統計コーパス3話者)

PaCMAPのfit時のパラメータは全てdefault値である.ちなみにPaCMAPのn_neighborsはデフォルト値が10であり,UMAPのn_neighbors値はそれを受けて揃えてみた.

上図を見比べると,PaCMAPもきれいにクラスタに分かれているが,UMAPのときと比べて一部のクラスタで形状が細長く伸びているのが興味深い.3話者の「happy」クラスタが近接する(ように見える)可視化が得られたのもまた興味深い.これらはUMAPにはなかった特徴である.もっとも次元削減した空間における見かけの距離に,どれほどの意味があるかは分からない.今後,デフォルト値からパラメタを変えて可視化の様子を観察する楽しみもあるだろう.

ちなみに体感ではあるがPaCMAPのほうがfitにかかる時間が短い(高速).

おわりに

これからは次元削減・可視化のツールとしてPaCMAPも使っていきたい.

『今更ながらVAEって(以下略)』の有効性を評価するための実験計画について

はじめに

『今更ながらVAEって(以下略)』に関する記事を先日から書いていた.いち手法(いち生成モデル)としての「有効性」をきちんと検証したい場合,以下の観点で実験的評価を行えば良いのではないか.

  • 生成画像の幾何学的な変動が、潜在空間上で意図通りに制御できるか

  • 潜在空間において、幾何学的な変動とそれ以外の変動が、分離して表現されているか

  • 生成された画像が、高品質で多様なものか

  • 画像分類タスクにおいて、ロバストな特徴量を抽出できるか

これらを考慮しながら適切な実験を計画を進めればよかろうかと.

実験設計

実験1: 幾何学的変動の制御の検証 (MNISTデータセット)

目的

提案手法が、VAEの潜在空間上で、画像の幾何学的変動(回転、スケール、平行移動)を制御できることを定量的に検証する。

手順

1 学習:

  • MNISTデータセットを用いて、提案するアフィン変換を組み込んだVAEを学習する。
  • ハイパーパラメータは、適切な値を探索する。

2 潜在空間の操作:

  • 学習済みのVAEを用いて、ランダムな潜在ベクトルを生成し、それをベースとして、アフィン変換パラメータに対応する潜在変数を、以下の手順で操作する。

    • 回転: 回転に対応する潜在変数を、マイナス90度からプラス90度まで段階的に変化させる(例えば、10度刻み)。

    • スケール: スケールに対応する潜在変数を、0.5倍から2倍まで段階的に変化させる(例えば、0.1倍刻み)。

    • 平行移動: 平行移動に対応する潜在変数を、画像の幅と高さの1/4の範囲で段階的に変化させる(例えば、ピクセル単位)。

  • 操作された潜在ベクトルを用いて、画像を生成し、生成画像の幾何学的な変動を評価する。

3 評価:

  • 生成された画像の回転角、スケール、平行移動量を定量的に測定する。

  • 例えば、画像中の数字の傾きを検出し、その角度を回転角として測定する。

  • 生成された画像のバウンディングボックスのサイズを測定し、スケールを算出する。

  • バウンディングボックスの中心位置を測定し、平行移動量を算出する。

  • 潜在変数の操作量と、画像の幾何学的な変動量の間の相関関係を分析する。

  • 生成された画像を、潜在変数の操作量ごとに並べて表示し、可視化する。

期待される結果

  • 回転、スケール、平行移動に対応する潜在変数を操作することで、生成画像の幾何学的な変動が、意図した通りに変化すること。

  • 潜在変数の操作量と、画像の幾何学的な変動量の間に、高い相関関係が見られること。

  • 生成された画像が、自然で滑らかな変動を示すこと。

実験2: アフィン変換の有無による比較 (MNISTデータセット)

目的

アフィン変換を有効にした場合と無効にした場合で、生成される画像の多様性と品質を比較する。

手順

1 学習:

  • MNISTデータセットを用いて、提案するアフィン変換を組み込んだVAEを、アフィン変換を有効にした場合と無効にした場合の2パターンで学習する。

  • ハイパーパラメータは、適切な値を探索する。

2 画像生成:

  • 学習したそれぞれのモデルを用いて、同じ数の画像をランダムに生成する。

3 評価:

  • 生成された画像の品質を評価するために、FID (Fréchet Inception Distance) スコアなどの指標を計算する。

  • 生成された画像の多様性を評価するために、カバレッジ(生成された画像の空間をどの程度網羅しているか)や、生成された画像の分布の分散を計算する。

  • 生成された画像を、アフィン変換の有無によって比較し、可視化する。

期待される結果

  • アフィン変換を有効にした場合、生成される画像の多様性が向上すること(同じ数字でも、位置や向きが異なるなど)。

  • 生成される画像の品質は、アフィン変換の有無によって大きく変わらないこと。

実験3: 潜在空間のdisentanglementの評価 (MNISTデータセット)

目的

提案手法が、VAEの潜在空間において、幾何学的な変動とそれ以外の変動を分離して表現できることを検証する。

手順

1 学習:

  • MNISTデータセットを用いて、提案するアフィン変換を組み込んだVAEを学習する。

  • ハイパーパラメータは、適切な値を探索する。

2 潜在空間の可視化:

  • 学習済みのVAEのエンコーダを用いて、MNISTデータセットの画像を潜在空間にマッピングする。

  • UMAPなどの次元削減手法を用いて、潜在空間を2次元または3次元に可視化する。

  • 色分けやラベル付けを行い、クラス(数字の種類)ごとに潜在空間がどのように分布しているかを確認する。

3 介入実験:

  • 学習済みのVAEを用いて、ランダムな潜在ベクトルを生成し、それをベースとして、以下の介入実験を行う。

    • アフィン変換パラメータの操作: アフィン変換パラメータに対応する潜在変数のみを操作し、生成画像の幾何学的な変動だけが変化するかどうかを確認する。

    • その他の潜在変数の操作: アフィン変換パラメータ以外の潜在変数のみを操作し、生成画像の幾何学的な変動は変化せず、数字の種類や太さなどの特徴が変化するかどうかを確認する。

4 評価:

  • 潜在空間の可視化結果から、アフィン変換パラメータに対応する部分と、それ以外の部分が分離しているかどうかを評価する。

  • 介入実験において、生成画像の変動が、操作した潜在変数にのみ対応しているかどうかを評価する。

  • 必要であれば、disentanglementの定量的な評価指標(Modularity, Mutual Information Gapなど)を計算する。

期待される結果

  • 潜在空間の可視化において、アフィン変換パラメータに対応する部分と、それ以外の部分が、異なる領域に分離して分布していること。

  • 介入実験において、操作した潜在変数に対応する変動だけが生成画像に現れること。

  • 定量的な評価指標において、高いdisentanglementスコアが得られること。

実験4: 画像分類タスクへの応用 (MNISTデータセット)

目的

提案手法で学習したVAEのエンコーダから抽出される特徴量が、画像分類タスクにおいて、幾何学的な変動に対してロバストな表現を獲得できるかどうかを検証する。

手順

1. VAEの学習:

  • MNISTデータセットを用いて、提案するアフィン変換を組み込んだVAEを学習する。

  • ハイパーパラメータは、適切な値を探索する。

2. 特徴量抽出:

  • 学習済みのVAEのエンコーダを用いて、MNISTデータセットの画像から特徴量を抽出する。

  • このとき、潜在空間の平均ベクトル(μ)や、潜在ベクトルそのものを特徴量として利用する。

3. 分類器の学習:

  • 抽出された特徴量を用いて、画像分類器を学習する

  • 分類器としては、ロジスティック回帰やサポートベクターマシンSVM)など、シンプルなモデルから始める。

4. 分類精度評価:

  • テストデータを用いて、学習した分類器の分類精度を評価する。

  • 学習データに含まれる画像の幾何学的な変動(回転、スケール、平行移動)を、テストデータには含めない場合と、含める場合の両方で評価を行う。

  • 学習データに含まれていない幾何学的な変動が、モデルの分類精度に影響するかどうかを確認する。

5. アフィン変換パラメータの活用:

  • VAEのエンコーダから抽出された特徴量に加えて、アフィン変換パラメータを特徴量として利用し、分類器を学習する。

  • この実験を通して、アフィン変換パラメータが、分類タスクにおいて有用な情報を保持しているかどうかを検証する。

期待される結果

  • VAEで抽出した特徴量を用いて学習した分類器は、学習データに含まれない幾何学的な変動に対して、高いロバスト性を持つこと。

  • アフィン変換パラメータを特徴量に加えることで、分類精度が向上すること。

具体的な検証内容

  • アフィン変換を適用しない場合:

    • 標準的なVAEで学習した特徴量を分類器の学習に用いた場合、テストデータに幾何学的な変動が含まれると、分類精度が低下することが予想される。
  • アフィン変換を適用した場合:

    • 提案手法で学習したVAEで抽出した特徴量を用いると、幾何学的な変動が含まれるテストデータに対しても、分類精度を維持できることが期待される。
  • アフィン変換パラメータの活用:

    • アフィン変換パラメータを特徴量に加えることで、分類器が、画像の幾何学的な特徴をより捉えやすくなり、分類精度が向上することが期待される。
    • この実験では、アフィン変換パラメータのどの部分が分類に有効であるか(例えば、回転角だけが重要か、スケールも重要か)を分析する。

評価指標

  • 分類精度 (Accuracy): 分類が正解した割合

  • 適合率 (Precision): 正と予測したデータのうち、実際に正である割合

  • 再現率 (Recall): 実際に正であるデータのうち、正と予測できた割合

  • F1スコア (F1-score): 適合率と再現率の調和平均

おわりに

実験計画という大げさな表題となったけども,今後のブログネタのロードマップ程度に認識してもらえれば幸い.

『今更ながらVAEって(以下略)』における幾何学的変動の正規化は普通のAEでも概ね実現できたという話

はじめに

最近VAEに関する記事を書いた。

tam5917.hatenablog.com

潜在変数の一部をアフィン変換のパラメタとして分離する話は、生成モデルではない普通のAE(オートエンコーダ)でも通用する。元記事の元記事を読めば、コンセプト自体はVAEに特有の道具を使っているわけではないので、AEで動くのは「それはそう」なのである。

qiita.com

本記事では自分の手元で実装して確かめたので、その報告である。

実装

以下に置いた。Enjoy!

$ python sample_ae.py --use_affine


  • 再構成誤差の計算にBCElossを使う場合
$ python sample_ae.py --use_bce --use_affine

実装上の工夫

VAEのときにはアフィン変換のパラメタは標準正規分布を事前分布に持っていた。よってオートエンコーダにおけるencoder部も、0を中心に適当な範囲でスケーリングしておけば、期待通りに動くだろうということである(楽観的)。以下、encoder部の実装を示す。tanhのrangeが[-1, 1]であるので、適当にスケーリングしている。scaleのデフォルト値が3.5になっているが、強いこだわりはない。3.0や4.0でも動く。あまり大きな値になると、ドアップのような生成結果になった(気がする)。

def encode(self, inputs: Tensor, scale: float = 3.5) -> Tensor:
    """Encode input image.

    Args:
        inputs (torch.Tensor): input image
        scale (float): scaling factor

    Returns:
        latent (torch.Tensor): bottleneck features in latent space
    """
    hidden = self.encoder(inputs)
    latent: Tensor = scale * torch.tanh(hidden)
    return latent

実験結果

モデル訓練後、アフィン変換を外して再構成した画像たちを図1に示す。比較のため,入力画像と再構成画像のペアを2カラムずつ並べた。

図1:入力画像(左)と再構成画像(右)

例えば1は概ね向きが揃っており、また3、5を見ても、向きやスケールが概ね揃っていることが見て取れる。8は歪みが取れている様子が良く分かる。総じて完璧な正規化ではないが、普通のAEでもそこそこ動くという結果は示された。

おわりに

ちょっとVAEから関連ネタが続いているが、実装は楽しいからよし。

『今更ながらVAEって(以下略)』の定式化を清書する

はじめに

先日、以下の記事を書いた。

tam5917.hatenablog.com

新年なので(?)、その定式化を清書しようというわけである。長くなってしまったので、急ぐ人は「8. 考察」からどうぞ。

定式化

1. 問題設定:変分推論による生成モデル

我々の目的はデータセット  \mathcal{D} = \{\mathbf{x}_1, \dots, \mathbf{x}_N \} から学習を行い、新しいデータを生成できるような生成モデル  p(\mathbf{x}) を構築することである。例えばMNISTデータセット上で考える場合、各  \mathbf{x}_{i} は個々の手書き文字画像を表す。

データ  \mathbf{x} は潜在変数  \mathbf{z} によって生成されると仮定する。このとき、生成モデルは以下のように表すことができる。


\begin{align*}
p(\mathbf{x}) = \int p(\mathbf{x}|\mathbf{z}) p(\mathbf{z}) d\mathbf{z}
\end{align*}

ここで  p(\mathbf{z}) は潜在変数  \mathbf{z} の事前分布であり、通常は標準正規分布  \mathcal{N}(\mathbf{0}, \mathbf{I}) が用いられる。 p(\mathbf{x}|\mathbf{z}) は、潜在変数  \mathbf{z} が与えられたときのデータ  \mathbf{x} の条件付き確率分布であり、デコーダによってモデル化される。しかしながら、この積分は解析的に計算できないため、変分推論を用いて近似を行う。

2. 変分推論

変分推論では、真の事後分布  p(\mathbf{z}|\mathbf{x}) をより扱いやすい分布  q(\mathbf{z}|\mathbf{x}) で近似する。この分布  q(\mathbf{z}|\mathbf{x}) を変分事後分布と呼ぶ。このとき、対数尤度  \log p(\mathbf{x}) の下限(Evidence Lower Bound, ELBO)を最大化することで、変分事後分布  q(\mathbf{z}|\mathbf{x}) を最適化する。ELBO は以下のように表される。


\begin{align*}
\mathcal{L}_{\text{ELBO}} = \mathbb{E}_{q(\mathbf{z}|\mathbf{x})} \left[ \log p(\mathbf{x}|\mathbf{z}) \right] - D_{\text{KL}} \left( q(\mathbf{z}|\mathbf{x}) || p(\mathbf{z}) \right)
\end{align*}

第一項は対数尤度の期待値であり、デコーダの出力と元のデータとの一致度を測る尺度を表す。

第二項は分布  q と分布  p の間のKLダイバージェンスであり、変分事後分布  q(\mathbf{z}|\mathbf{x}) が事前分布  p(\mathbf{z}) にどれだけ近いかを表す。

3. 今回のVAEにおけるモデル

今回のVAEでは、以下の仮定とモデル化を行う。

  • 変分事後分布  q(\mathbf{z}|\mathbf{x}) : ガウス分布  \mathcal{N}(\boldsymbol{\mu}(\mathbf{x}), \boldsymbol{\sigma}^2(\mathbf{x})) で近似する。

    • 平均  \boldsymbol{\mu}(\mathbf{x}) と分散  \boldsymbol{\sigma}^2(\mathbf{x}) は、エンコーダの出力として得られる。
  • デコーダ  p(\mathbf{x}|\mathbf{z}) : 潜在変数  \mathbf{z} を入力とし、元のデータ  \mathbf{x} を再構成するニューラルネットワークとしてモデル化する。

  • アフィン変換: 潜在変数  \mathbf{z} の一部をアフィン変換パラメータとして扱い、デコーダが画像を生成する際に、座標グリッドにアフィン変換を適用する。

4. アフィン変換の組み込み

潜在変数  \mathbf{z} を、アフィン変換パラメータ  \mathbf{z}_{a} とその他のパラメータ  \mathbf{z}_{r} に分割する。

  •  \mathbf{z}_{a} \in \mathbb{R}^6 : 2次元アフィン変換のパラメータ(スケーリング、回転、平行移動)

  •  \mathbf{z}_{r} : その他の潜在変数

4.1 座標グリッドの定義

今回のVAEでは、画像上の各ピクセルに対応する座標を [-1, 1] x [-1, 1] の範囲で正規化したグリッドとして定義している。

具体的には、画像のサイズを  H \times W とすると、座標グリッド  \mathbf{c} \in \mathbb{R}^{H \times W \times 2} は以下のように定義される。


\begin{align*}
\mathbf{c}_{i,j} = \begin{bmatrix}
\frac{2j}{W-1} - 1 \
\frac{2i}{H-1} - 1
\end{bmatrix}
\end{align*}

ここで、

この定義により、画像の左上のピクセルは [-1, -1]、右下のピクセルは [1, 1] に対応し、画像内のピクセルが [-1, 1] x [-1, 1] の範囲に正規化される。

4.2. アフィン変換の適用

アフィン変換は上記の正規化された座標グリッド  \mathbf{c} に対して適用される。アフィン変換行列  \mathbf{A} \in \mathbb{R}^{3 \times 3} は潜在変数  \mathbf{z}_{a} から生成され、以下の変換を行う。


\begin{align*}
\mathbf{c}' = \mathbf{A} \mathbf{c}
\end{align*}

ただし \mathbf{c} を斉次座標系として扱うために、 \mathbf{c} に1を要素にもつ次元を足して、 \mathbf{c}  \mathbb{R}^{3} のベクトルとみなす。

ここで \mathbf{c}' も斉次座標系で表されているので、最後の次元の要素を落とすことで、2次元の座標グリッドに戻すことができる。


\begin{align*}
\mathbf{c}' \in \mathbb{R}^{H \times W \times 2}
\end{align*}
4.3. デコーダの役割

デコーダは変換された座標グリッド  \mathbf{c}' を考慮しながら、潜在変数  \mathbf{z}_{r} に基づいて画像を生成する。 デコーダの出力は再構成された画像  \hat{\mathbf{x}} であり、その形状は元の画像  \mathbf{x} と同じである。

5. 損失関数

全体の損失関数は、再構成損失、アフィン変換パラメータに関するKLダイバージェンス、およびその他のパラメータに関するKLダイバージェンスの和として表される。


\begin{align*}
\mathcal{L}_{\text{total}} = \mathcal{L}_{\text{rec}} + \beta_{a} \mathcal{L}_{\text{KL}a} + \beta_{r} \mathcal{L}_{\text{KL}_{r}}
\end{align*}

ここで、

  • 再構成損失(負の対数尤度):

\begin{align*}
\mathcal{L}_{\text{rec}} = -\mathbb{E}_{q(\mathbf{z}|\mathbf{x})} \left[ \log p(\mathbf{x}|\mathbf{z}) \right]
\end{align*}

損失関数を最小化するため、対数尤度の期待値に負号をつけたものを再構成損失と呼ぶ。デコーダによる再構成の誤差を測る尺度と考えることができる。


\begin{align*}
\mathcal{L}_{\text{KL}a} = D_{\text{KL}} \left( q(\mathbf{z}_{a}|\mathbf{x}) || p(\mathbf{z}_{a}) \right)
\end{align*}

 q(\mathbf{z}_{a}|\mathbf{x}) は、平均  \boldsymbol{\mu}_{a}(\mathbf{x}) と分散  \boldsymbol{\sigma}_{a}^2(\mathbf{x}) を持つガウス分布で近似される。  p(\mathbf{z}_{a}) は標準正規分布と仮定する。


\begin{align*}
\mathcal{L}_{\text{KL}_{r}} = D_{\text{KL}} \left( q(\mathbf{z}_{r}|\mathbf{x}) || p(\mathbf{z}_{r}) \right)
\end{align*}

 q(\mathbf{z}_{r}|\mathbf{x}) は、平均  \boldsymbol{\mu}_{r}(\mathbf{x}) と分散  \boldsymbol{\sigma}_{r}^2(\mathbf{x}) を持つガウス分布で近似される。  p(\mathbf{z}_{r}) は標準正規分布と仮定する。

 \beta_{a}  \beta_{r} はそれぞれのKLダイバージェンス項の重みを調整するパラメータである。冒頭の記事ではそれぞれの重みを1に設定し、2つのKL項に分離せず一体のものとして実装している(つまり  D_{\text{KL}} \left( q(\mathbf{z}|\mathbf{x}) || p(\mathbf{z}) \right) のまま)。

6. 学習と生成

  • 学習: 損失関数  \mathcal{L}_{\text{total}} を最小化するように、エンコーダとデコーダのパラメータを最適化する。

  • 生成: 標準正規分布からランダムに潜在変数  \mathbf{z} をサンプリングし、デコーダに入力することで、新しい画像を生成する。アフィン変換を有効にする場合は、アフィン変換パラメータ  \mathbf{z}_a を生成し、座標グリッドに変換を適用する。

7. ここまでのまとめ

今回のVAEの手法は、変分推論の枠組みに基づき、以下のステップで定式化できる。

  1. 問題設定: 生成モデルの構築と変分推論の導入

  2. モデル化: エンコーダとデコーダのモデル化、アフィン変換の組み込み

  3. 損失関数: ELBOを最大化するように、再構成損失とKLダイバージェンスを定義

  4. 学習と生成: 損失関数を最小化するようにモデルを学習し、潜在空間からのサンプリングで新しい画像を生成

8. 考察:アフィン変換の有無と幾何学的変動の正規化について

8.1. アフィン変換の有無による影響

モデル訓練後、アフィン変換を適用する場合と適用しない場合で、VAEの動作がどのように変わるかを明確にする。ただし、いずれの場合もモデルの訓練時には座標グリッドに対してアフィン変換を常に適用したものとする。これは冒頭の記事における実験条件に沿っている。

  • アフィン変換あり:潜在変数  \mathbf{z} の一部  \mathbf{z}_{a} をアフィン変換パラメータとして使用し、座標グリッド  \mathbf{c} に変換を適用する。 デコーダは、変換後の座標グリッド  \mathbf{c}' と残りの潜在変数  \mathbf{z}_{r} に基づいて画像を再構成する。この場合、生成される画像の変動は \mathbf{z}_{a}  \mathbf{z}_{r} の両方に依存する。特に、 \mathbf{z}_{a} は画像の「位置、向き、スケール」といった幾何学的な変動を制御する。

  • アフィン変換なし:アフィン変換パラメータ  \mathbf{z}_{a} を無視し、デコーダは元の座標グリッド  \mathbf{c} と潜在変数  \mathbf{z} のみを使用して画像を再構成する。この場合、生成される画像の変動は \mathbf{z}_{r} にのみ依存する。アフィン変換による幾何学的な変動は、ほぼ取り除かれる。

8.2. 幾何学的変動の正規化

アフィン変換を外した場合、生成される画像の幾何学的変動が「正規化される」とは、具体的に以下のことを意味する。

  • 空間的な変動の抑制: アフィン変換パラメータ  \mathbf{z}_{a} が生成過程に影響を与えなくなるため、生成される画像の「位置、向き、スケール」などの幾何学的な変動が抑制される。

  • 幾何学的変動以外の特徴の表現: 生成される画像の変動は、アフィン変換パラメータ以外の潜在変数  \mathbf{z}_{r} にのみ依存するようになる。これにより、画像の本質的な特徴(例えば、文字の太さや形状など、幾何学的変動以外の特徴)を表現した生成が行われる。

  • データセットの平均的な表現:アフィン変換を外して生成された画像は、学習データセットにおける画像の平均的な位置、向き、スケールに近いものになる。

8.3. 数式での表現

アフィン変換の有無による幾何学的変動の違いを数式で表すために、デコーダの出力を明示的に記述する。

  • アフィン変換あり:デコーダの出力  \hat{\mathbf{x}} は、変換後の座標グリッド  \mathbf{c}' と潜在変数  \mathbf{z}_{r} の関数として表せる。

\begin{align*}
\hat{\mathbf{x}} = f_{\text{dec}}(\mathbf{c}', \mathbf{z}_{r})
\end{align*}
  • アフィン変換なし:デコーダの出力  \hat{\mathbf{x}} は、元の座標グリッド  \mathbf{c} と潜在変数  \mathbf{z} (この場合は  \mathbf{z}_{r} と同等) の関数として表せる。

\begin{align*}
\hat{\mathbf{x}} = f_{\text{dec}}(\mathbf{c}, \mathbf{z})
\end{align*}

このときデコーダの入力に影響を与えるのは、潜在空間のうちアフィン変換パラメータに対応しない部分のみである。


\begin{align*}
\hat{\mathbf{x}} = f_{\text{dec}}(\mathbf{c}, \mathbf{z}_{r})
\end{align*}

ここで、

  •  f_{\text{dec}} デコーダを表す関数

  •  \mathbf{c} は正規化された座標グリッド

  •  \mathbf{c}' はアフィン変換後の座標グリッド

  •  \mathbf{z} は潜在変数

  •  \mathbf{z}_{r} はアフィン変換パラメータを除いた潜在変数

をそれぞれ表す。アフィン変換を外すことで、デコーダが座標グリッドを変換することによる影響を無視し、代わりに潜在変数  \mathbf{z}_{r} を主として画像の生成に用いていることがわかる。このとき、生成された画像は、訓練データにおける位置、向き、スケールの平均に近いものになり、それらの幾何学的な変動が正規化されることになる。

8.4. 損失関数の役割

損失関数は学習時に以下の役割を果たす。

KLダイバージェンスをアフィン変換パラメータとそれ以外のパラメータに分離することで、より独立した潜在空間表現の学習が期待できる。

蛇足ながら、学習開始時点からアフィン変換を適用しない場合、今回のVAEは「普通のVAE」と等価であり、入力画像を忠実に再現するように学習が進む。デコーダが参照する座標グリッド  \mathbf{c} は定数になるからである。結果として生成される画像は、訓練データに含まれる変動を(幾何学的変動を含めて)そのまま反映する。

9. 所感など

「アフィン変換 + オートエンコーダ」や「アフィン変換 + VAE」な先行研究は適当に調べるだけでも色々と見つかる。いずれの研究も、元画像に対して直接アフィン変換を適用する形だった。今回は元画像と並行に座標グリッドを導入し、そこにアフィン変換を適用する形が独創的なのである。確かに「その発想はなかった」と唸らされた。結果的にアフィン変換パラメータが潜在変数から分離できたのだから、大したものである。

本定式化を様々な画像変動に一般化すべく、ちょっと思索するとチャレンジングな課題がどんどん出てくる。そもそも座標グリッドに乗らない・当てはまらない変動のほうが多いのだから、すぐに定式化は破綻しそうなものである。それでも潜在変数のdisentanglementの観点から、興味深いテーマをいくつか示唆してくれるのではないかと思う。何だか考えるのが楽しくなってこないかな?(日頃から深く思索せよ、という自戒を込めて)

おわりに

こういう記事は新年にしか書けない。