筆記:ML-LHY-17/18: Unsupervised Learning - Deep Generative Model

zzig發表於2020-10-18

主要介紹無監督學習中的生成模型。
傳統利用RNN的Pixel RNN
經典的Auto-Decoder和VAE(變分自動編碼器),以及解釋在概率上的VAE做法,和存NN的聯絡
最近比較流行的GAN
視訊1 視訊2 pdf

Pixel RNN

在這裡插入圖片描述
訓練一個RNN:
看到第1個pixel就輸出第2個推理pixel。
看到第1、第2個pixel就輸出第3個推理pixel。
看到第1、第2個、第3個pixel就輸出第4個推理pixel。

比如有一張真實的圖:
在這裡插入圖片描述

如果遮擋一部分,然後輸入Pixel RNN:
在這裡插入圖片描述
得到的結果:
在這裡插入圖片描述

同樣可以用在語音上,比如WaveNet:
在這裡插入圖片描述
預先輸入一段語義,預測後面的部分。

Variational Auto-encoder(VAE)

在這裡插入圖片描述
VAE與Auto-encoder不同的地方在於中間的code部分是:
c i = exp ⁡ ( σ i ) × e i + m i c_{i}=\exp \left(\sigma_{i}\right) \times e_{i}+m_{i} ci=exp(σi)×ei+mi
除了希望輸入輸出要儘可能一樣外,還需要最小化:
∑ i = 1 3 ( exp ⁡ ( σ i ) − ( 1 + σ i ) + ( m i ) 2 ) \sum_{i=1}^{3}\left(\exp \left(\sigma_{i}\right)-\left(1+\sigma_{i}\right)+\left(m_{i}\right)^{2}\right) i=13(exp(σi)(1+σi)+(mi)2)


為什麼要用VAE方法?

在這裡插入圖片描述
左邊是Auto-encoder,在code的中間部分,希望輸出的3/4月亮,但是Auto-encoder往往很難學習到。
VAE的做法是在code部分新增noise,兩邊的noise都會延伸到中間,那麼在中間的部分就學習到兩邊的圖,但是輸出右只能一張,所以會比Auto-encoder有更好的學習能力。

使用VAE,我們觀察式子:
c i = exp ⁡ ( σ i ) × e i + m i c_{i}=\exp \left(\sigma_{i}\right) \times e_{i}+m_{i} ci=exp(σi)×ei+mi
可以發現 m i m_{i} mi是原始的code,但是和Auto-encoder相比多新增了 exp ⁡ ( σ i ) × e i \exp \left(\sigma_{i}\right) \times e_{i} exp(σi)×ei。其中 e i e_{i} ei是從正態分佈中抽取的樣本,然後乘一個exp(var) 改變大小,var的大小是encoder自動學習的。

但是不對var做限制的話,var可能是0,所以就有:
∑ i = 1 3 ( exp ⁡ ( σ i ) − ( 1 + σ i ) + ( m i ) 2 ) \sum_{i=1}^{3}\left(\exp \left(\sigma_{i}\right)-\left(1+\sigma_{i}\right)+\left(m_{i}\right)^{2}\right) i=13(exp(σi)(1+σi)+(mi)2)

藍色是 exp ⁡ ( σ i ) \exp \left(\sigma_{i}\right) exp(σi),紅色是 1 + σ i 1+\sigma_{i} 1+σi,綠色就是: exp ⁡ ( σ i ) − ( 1 + σ i ) \exp \left(\sigma_{i}\right)-\left(1+\sigma_{i}\right) exp(σi)(1+σi),可以發現當我們希望 exp ⁡ ( σ i ) − ( 1 + σ i ) \exp \left(\sigma_{i}\right)-\left(1+\sigma_{i}\right) exp(σi)(1+σi)最小時, exp ⁡ ( σ i ) \exp \left(\sigma_{i}\right) exp(σi)並不是0,而是1。所以這個正則可以防止var = 0
在這裡插入圖片描述
注意到有個 ( m i ) 2 \left(m_{i}\right)^{2} (mi)2,就是常規的L2正則,希望不要過擬合。


VAE-Gaussian解釋

VAE在統計學上對的解釋:
我們的目的是求一個概率分佈 P ( x ) P(x) P(x),其中x是圖片在高維空間的表示,比如影像 256 ∗ 256 256 *256 256256那麼x就是 256 ∗ 256 256 *256 256256的向量,但是一般我們是用低維空間的x來輸出圖片,使用x一般是比 256 ∗ 256 256 *256 256256低很多的向量。那麼是關於什麼的概率分佈呢?是關於這個x是不是真實圖片的概率。比如下面概率低的地方,圖片也就很不真實。我們求得 P ( x ) P(x) P(x)後,在概率值高的地方sample就是大概率會和真實的圖接近。
在這裡插入圖片描述

問題變成求 P ( x ) P(x) P(x)

我們把資料分佈看做是GMM(Gaussian Mixture Model),假設GMM是由m個GM組成,而這個m其實就是上面NN中code的長度,而code的值在這就是 P ( m ) P(m) P(m),單個GM的weight。相同的道理,在NN中表示低維空間的weight。
在這裡插入圖片描述
這個式子 P ( x ) = ∑ m P ( m ) P ( x ∣ m ) P(x)=\sum_{m} P(m) P(x \mid m) P(x)=mP(m)P(xm)其實就是全概率公式。也可以結合上面GMM來理解。

上面是離散型表示,類比上面預測月亮,我們希望學習輸入的code不是特定的值,而是希望是一個連續的分佈,使用 P ( z ) P(z) P(z)是1個多維的正態分佈。

所以 求 P ( x ) 求P(x) P(x)變為:
P ( x ) = ∫ Z P ( z ) P ( x ∣ z ) d z P(x)=\int_{Z} P(z) P(x \mid z) d z P(x)=ZP(z)P(xz)dz
在這裡插入圖片描述


插入一些預備的東西:

我們假設學習一個NN可以求z這個點對應到x空間上時,那個GM的 μ ( z ) , σ ( z ) \mu(z), \sigma(z) μ(z),σ(z)
在這裡插入圖片描述
注意事實上這裡的 μ ( z ) , σ ( z ) \mu(z), \sigma(z) μ(z),σ(z) P ( x ∣ z ) P(x|z) P(xz)的。


我們也假設學習一個NN’可以求x這個點對應到z空間上時,那個GM的 μ ′ ( z ) , σ ′ ( z ) \mu'(z), \sigma'(z) μ(z),σ(z)
在這裡插入圖片描述
注意事實上這裡的 μ ′ ( z ) , σ ′ ( z ) \mu'(z), \sigma'(z) μ(z),σ(z) P ( z ) P(z) P(z)的。

類比NN中VAE:
在這裡插入圖片描述
各種是Decoder和Encoder。


繼續回到數學上,要求P(x),數學上直觀方法是使用Maximizing Likelihood求:
L = ∑ x log ⁡ P ( x ) L=\sum_{x} \log P(x) L=xlogP(x)

下面一些推導
在這裡插入圖片描述
其中引入一個任意分佈 q ( z ∣ x ) q(z \mid x) q(zx)
∫ z q ( z ∣ x ) = 1 \int_{z} q(z \mid x) = 1 zq(zx)=1
所以要最大化L,而 L ≥ ∫ Z q ( z ∣ x ) log ⁡ ( P ( x ∣ z ) P ( z ) q ( z ∣ x ) ) d z L\geq \int_{Z} q(z \mid x) \log \left(\frac{P(x \mid z) P(z)}{q(z \mid x)}\right) d z LZq(zx)log(q(zx)P(xz)P(z))dz
L b L_b Lb作為下界
log ⁡ P ( x ) = L b + K L ( q ( z ∣ x ) ∥ P ( z ∣ x ) ) L b = ∫ Z q ( z ∣ x ) log ⁡ ( P ( x ∣ z ) P ( z ) q ( z ∣ x ) ) d z \begin{array}{l} \log P(x)=L_{b}+K L(q(z \mid x) \| P(z \mid x)) \\ L_{b}=\int_{Z} q(z \mid x) \log \left(\frac{P(x \mid z) P(z)}{q(z \mid x)}\right) d z \end{array} logP(x)=Lb+KL(q(zx)P(zx))Lb=Zq(zx)log(q(zx)P(xz)P(z))dz

在這裡插入圖片描述

我們的目的是找 P ( x ∣ z ) P(x \mid z) P(xz) q ( z ∣ x ) q(z \mid x) q(zx),使得 L b L_b Lb越來越大,從而 log ⁡ P ( x ) \log P(x) logP(x)就會越來越大。
而對於 q ( z ∣ x ) q(z \mid x) q(zx)來說,它不會影響 log ⁡ P ( x ) \log P(x) logP(x),它引入的目的只是調整 L b L_b Lb。所以當 L b L_b Lb越來越大時, K L ( q ( z ∣ x ) ∥ P ( z ∣ x ) ) K L(q(z \mid x) \| P(z \mid x)) KL(q(zx)P(zx))越來越小。

此時 q ( z ∣ x ) q(z \mid x) q(zx) P ( z ∣ x ) P(z \mid x) P(zx)分佈越來越接近。而 P ( z ∣ x ) P(z \mid x) P(zx)是由NN得到,相當於Decoder。

單獨分析 L b L_b Lb,現在目的是使得 L b L_b Lb越大越好。別忘記了,求這些的一切目的都是在最大似然的框架下求 P ( x ) P(x) P(x)
在這裡插入圖片描述
為了最大化 L b L_b Lb,所以需要使得 K L ( q ( z ∣ x ) ∥ P ( z ) ) K L(q(z \mid x) \| P(z)) KL(q(zx)P(z))越來越小。

此時 q ( z ∣ x ) q(z \mid x) q(zx) P ( z ) P(z) P(z)分佈越來越接近。而 P ( z ) P(z ) P(z)是由NN’得到,相當於Encoder。

分析最後一項:
∫ Z q ( z ∣ x ) log ⁡ P ( x ∣ z ) d z \int_{Z} q(z \mid x) \log P(x \mid z) d z Zq(zx)logP(xz)dz
最大化它,其實就是求 log ⁡ P ( x ∣ z ) \log P(x \mid z) logP(xz)最大化,由於P是一個GM,所以在取均值是得到最大。所以期望 P ( x ∣ z ) P(x \mid z) P(xz)的均值就是x的均值。在這裡插入圖片描述
所以在概率上的VAE也是期望輸入和輸出要越接近越好。

和之前提到的Auto-Encode對比:

  • 在輸入這邊的NN’得到 μ ′ ( z ) , σ ′ ( z ) \mu'(z), \sigma'(z) μ(z),σ(z),也就是 P ( z ) P(z) P(z),在AE中相當於Encoder。
  • 然後在 P ( z ) P(z) P(z)上進行sample得到z,在AE中相當於hidden layer中的code。
  • z又經過輸出層這邊的NN得到 μ ( z ) , σ ( z ) \mu(z), \sigma(z) μ(z),σ(z),也就是 P ( x ∣ z ) P(x|z) P(xz),在AE中相當於Decoder。
  • 而使用最大似然求 P ( x ) P(x) P(x)要求最後的 μ ′ ( z ) , σ ′ ( z ) \mu'(z), \sigma'(z) μ(z),σ(z),也就是 P ( z ) P(z) P(z) μ ’ ( z ) \mu’(z) μ(z)要與x的mean一樣,在AE中相當於Loss要求的輸入-輸出越小越好。

一頭霧水,還不是很明白…

VAE缺點在這裡插入圖片描述

從訓練過程就可以看出,VAE一般產生的圖片是去近似資料集裡的圖片。它做的更新是線性變換。而沒有真正意義上的生成新的圖。

VAE可能只是記住現有的影像,而不是 生成新的圖片

Generative Adversarial Network (GAN)

GAN是2014年提出。

The evolution of generation

在這裡插入圖片描述
在這裡插入圖片描述
GAN演算法大致:

隨機初始化Generator引數。
迭代第k次( k 1 = 1 k_1 = 1 k1=1):

  • 產生第k代Generator,產生label為0的圖,
  • 使用label為1真實圖片和label為0的虛假圖,訓練產生第k代Discriminator(二元分類器)
  • 固定Discriminator引數,將Discriminator和Generator組成一個大的NN,使用GD求輸出越大越好,即希望通過GD調整Generator的引數後,大多數圖片騙過Discriminator,所以輸出會很大。

以上參考李宏毅老師視訊和ppt,僅作為學習筆記交流使用

相關文章