iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
AI & Data

圖像生成 AI 的原理與應用系列 第 9

[Day 9] 關於 VAE 的原理 - 直觀的解釋

  • 分享至 

  • xImage
  •  

接續前一天的文~在 [Day 8] 簡介 variational auto-encoder (VAE) 有提到,我們可以在 VAE 學出來的 code space 中透過調整個別維度的數值控制影像生成,這也是 VAE 的特色,然而這是怎麼做到的呢?

一些直觀的解釋

先講回 auto-encoder,我們已經知道 auto-encoder 能學習到 code 和影像間一一對應的關係,但是怎麼它是如何將影像壓縮為 code,或將 code 解碼為影像,這之中的轉換通常是高度非線性的。

這裡我們以用一維的 code 產生不同月象的影像為例子:
https://ithelp.ithome.com.tw/upload/images/20230918/20162522jFZQRxKVj8.jpg

假設輸入一個 code z,decoder 就會輸出一張月象影像,輸入向量 z_a 對應的輸出影像是滿月的影像,z_c 則是對應到下弦月的影像,那介於 z_a 和 z_c 之間的向量 z_b 是否就會對應到介於滿月與下弦月之間的下凸月影像呢?答案是不一定的。

這是因為我們在訓練 auto-encoder 的時候,並沒有要求模型學習 code 空間的相對位置要和影像空間有所對應,因此輸入 z_b 得到的影像說不定也可能是殘月的影像。

讓我們回顧一下 VAE 的架構:
https://ithelp.ithome.com.tw/upload/images/20230918/20162522TCzfpeujSf.png

VAE 並不會直接從影像學到對應的 code,而會學到一個(高維)Gaussian distribution 的平均(mean,以 m 表示)和變異數(variance,以 var 表示),而最終取得的 code 就如同在這個學出來的 Gaussian distribution 抽樣,或可以想成在學到的 mean 加上雜訊。

然而,為什麼要這樣用這樣的方式組合一個代表影像的新的 code 呢?這樣的做法隱含的意思是,當我們讓 code 從原本的位置偏移一點點,解碼 / 還原出來的影像還是要跟原本的影像很接近,這會使得 code 和影像間的對應關係變得比較平滑。

再次以月象影像生成為例子,由於 z_b 和 z_a 接近,和 z_c 也接近,因此對應到的影像應該既接近滿月影像,又接近下弦月影像,結果就會是兩者之間的過渡:下凸月的影像。
https://ithelp.ithome.com.tw/upload/images/20230918/20162522qMkzgQfNJd.jpg

VAE 的學習目標

在訓練 auto-encoder 時,我們只要要求輸入和輸出的影像接近即可。但是如果在訓練 VAE 時也只要求輸入和輸出的影像越接近越好,學習出來的 variance 很可能都等於 0,代表 code 就剛好等於學習出來的 mean 而不會有隨機偏移,這樣其實就等同於一般的 auto-encoder 了,並沒有達到讓 code 空間的相對位置和影像空間的相對位置有所對應的目標。

因此,我們必須在訓練 VAE 時多設定一個目標,讓 variance 不會等於 0。

總而言之,VAE 有兩個學習目標

  1. 最小化 reconstruction error,輸出影像要能成功還原輸入影像。
  2. 最小化 Σ_i[exp(logvar_i)−(1+logvar_i)+(m_i)^2]。其中,為了讓 exp(logvar_i)−(1+logvar_i) 最小,logvar_i 就必須為 0,而計算出來的 variance 就必須為 1(而不為 0)。至於最小化 (m_i)^2 則可視為 L2 regularization。

今天先這樣啦~明天的文章將會逐一解釋數學原理的部分!/images/emoticon/emoticon08.gif


上一篇
[Day 8] 簡介 variational auto-encoder (VAE)
下一篇
[Day 10] 關於 VAE 的原理 - 數學上的推導
系列文
圖像生成 AI 的原理與應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言