自然語言處理(五)時下流行的生成模型


近期流行的生成模型

本次介紹近期大火的三大類生成模型,這三大類模型從三個不同角度切入,居然都能有驚人的效果。而且深入挖掘發現它們有很多相似的地方。

1. Generative Adversarial Nets

生成對抗網絡(GANs)是當今最火的生成模型,從2014年 Goodfellow 論文發表開始,其引用量已是4000+了。而且GANs家族人丁興旺,從最原始的GANs開始,家族明星是一個接一個,如cGAN, DCGAN, WGAN,WGAN-GP,LSGAN,BEGAN,infoGAN,seqGAN,cycle-GAN,star-GAN等等,每一個出來都是一個新聞。

GANs的火熱最直接的原因,其原理直觀,可解釋。生成模型的目的常常是為得到數據X的分布p(X)。而常常我們對數據的分布一無所知,甚至很多數據分布是沒有解析式的。GANs來求解p(X)時,走了一條不同尋常的路。GANs采用對抗的方式來學習,或者說是模仿(mimic)的方式來學習。GANs有個生成器(G),它的目的是生成可以以假亂真的數據,為了更好的訓練G,GANs引入一個判別器(D),它的工作是當一個樣本經過它之后,它能判別出樣本是真實的數據樣本還是生成器生成的樣本,即它輸入一個值來代表樣本為真的程度。正如原文的例子一樣,G相當於一個假幣制造者,而D 是警察。就在這個互相對抗中,G生成的樣本越來越像直實數據,而D的判別能力也越來越高。用公式表示即是:

\(\min_{G}\max_{D} E_{x\sim p(x)} D(x) + E_{z\sim p(z)}[1 - D(G(z))]\)

GANs家族欣欣向榮,如上面提到的都是明星GANs,那么問題來了,誰會更好,有沒有在各個方面全面超越其它GANs的?Google給出答案8,在2017年它們把當時主要的GANs變種放在一起研究,竟發現它們都差不多~。

##2. Variational Autoencoders

變分自編碼器(VAE)是另一種非常著名的生成模型,常常將其與GANs相提並論。VAE雖然在學術界很有名,但很多人對它並不是很了解,一部分原因是VAE的名字很高大上,會有人覺得比較難從而望而卻步;還有一些原因是沒有太多講解的比較好的, 通俗但又不失邏輯的博文。其實最主要的原因是VAE真的涉及比較多的知識,從而僅有的幾篇好資料還是從不同角度切入,這為初學者帶來不小的障礙。VAE的第一手資料當然是原始論文,但因為是大師手筆,其把他們認為‘顯而易見’而對我們至關重要的過程給省略了,所以也比較難讀。

從字面可知VAE至少包含兩塊內容,變分推斷(Variational Inference)與自編碼器(Auto encoders)。

首先,變分推斷在VAE當中,可以簡單的理解為KL散度的應用即可。其次,自編碼器是因為VAE的結構與自編碼器很像,都有解碼與編碼過程。

首先來看auto encoder的結構:

Input: X 經過auto encoder生成\hat X,如果二者相似,說明auto encoder的是一個可用的模型。

auto encoder模型涉及兩過程:編碼(encoding)與解碼(decoding)。通常認為X的生成是由某些隱變量(latent variables,記為Z)決定的。所以變程可分解為:

\[ X \xrightarrow{ P(Z|X) \quad (encoder)} Z\xrightarrow{P(\hat X|Z)\quad (decoder)} \hat X \]

生成模型首先想到最大似然:

\[ P(X) = \int P(X|Z)P(Z) dZ \]

但有隱變量的存在,簡單的MLE是不行了的,那么可否用EM算法呢,因為EM算法會涉及到模型:P(Z|X)

\[ P(Z|X) = \frac{P(X|Z)P(Z)}{P(X)} \]

因為P(X)中有積分的存在,且分布未知,是不可處理的(Intractable),所以EM算法也無能為力。

那么,還有的方法就是Gibbs釆樣法與變分推斷了。Gibbs采樣法與即將采用的神經網絡,梯度下降法是不合拍的。

P(Z|X)不可處理,那么我們可以用一個可用處理的分布(設為Q(Z))來近似P(X|Z)。根據變分推斷,Q(Z)與P(Z|X)的近似程度(更確切地說是距離)可用KL散度來刻畫:

\(Q^*(Z) = \arg \min_{Q(Z)\in \mathscr{Z}} KL(Q(Z)||P(Z|X))\)

其中$KL(Q|P) = E_{z\sim Q}\left[\log Q(Z) -\log P(Z|X)\right] = \int Q(Z)\log\frac{Q(Z)}{P(Z|X)} dZ$. 做下簡要推導(把3式即貝葉斯法則代入):

\[ \begin{array}\\ KL(Q(Z)||P(Z|X)) &= E_{z\sim Q}\left[\log Q(Z) -\log P(Z|X)\right] \\ &= E_{z\sim Q}\left[\log Q(Z) -\log \frac{P(X|Z)P(Z)}{P(X)}\right]\\ & = E_{z\sim Q}\left[\log Q(Z) -\log P(X|Z)- \log P(Z) + \log P(X)\right] \\ &= E_{z\sim Q}\left[\log Q(Z) -\log P(X|Z)- \log P(Z)\right] + \log P(X) \quad(\text{因為}P(X)\text{不依賴於}Z)\\ \end{array} \]

經變換可得:

\[ \begin{array}\\ \log P(X)& =& -E_{z\sim Q}\left[\log Q(Z) -\log P(X|Z)- \log P(Z)\right] + KL(Q(Z)||P(Z|X))\\ &=& -E_{z\sim Q}[\log Q(Z) - \log P(Z)] + E_{z\sim Q} \log P(X|Z) + KL(Q(Z)||P(Z|X))\\ &=& -( - E_{z\sim Q} \log P(X|Z) + KL [ Q(Z) || P(Z)] ) + KL(Q(Z)||P(Z|X))\\ && 其中Q(Z)可以是任意函數,但我們更關心的是依賴於X的那部分,\\ &&所以可以將上式中的Q(Z)替換成Q(Z|X):\\ &=& -( - E_{z\sim Q} \log P(X|Z) + KL [ Q(Z|X) || P(Z)] ) + KL(Q(Z|X)||P(Z|X))\\ & = & ELBO + KL(Q(Z|X)||P(Z|X)) \end{array} \]

其中$ELBO (evidence lower bound) = -( - E_{z\sim Q} \log P(X|Z) + KL [ Q(Z|X) || P(Z)] )$.

從MLE的角度,最大化$\log P(X)\(可轉化成最大化ELBO(因為KL非負),這也是ELBO名字的由來。從變分的角度,最小化KL可轉化成最大化ELBO,因為在這個背景下,可認為\)\log P(X)$是固定的(evidence)。ELBO是可處理的。

我們知道對任一x,它都可以轉化成y,無論二者間的轉化函數多么復雜。那么我們可以假設Q(Z|X)與P(Z)(后驗與先驗)為正態分布,事情就容易了,而且更近一步,盡管變得可處理了,但因為參數過多,用神經網絡來近似再好不過了:

從上圖可知,encoder在X給定的前提下,會產生兩個參數向量,$\mu(X)$和 \(\sum (X)\)。但這會產生兩個問題,一個是在此分布上做抽樣方差會很大,另一個是抽樣這個方式本身是不可導的。

###The Reparameterization Trick

為解決上述問題,這里用到了一個trick,即為得到隱變量z,我們不是從N(\mu(X),\sum(X))中抽樣,而是從標准正態分布中抽取,變經變換:\(z = \mu(X) + \sum^{\frac{1}{2}}(X)\cdot\epsilon\),其中$\epsilon \sim N(0,1)$。

3. Flow-based Model

Flow-based的模型就沒有以上兩種那么的有名了,而且可以說是郁郁不得志,在2014年NICE(最初版flow-based模型)提出時,關注者寥寥。在2016年改進版問世時,也沒啥動靜,直到2018年OpenAI的glow橫空出世,終於划過夜空,讓大家見到了這個一時竟蓋過GANs和VAEs,風頭正勁的生成模型。

flow-based模型的思想也很直觀: 尋找一種變換h = f(x)(f 可逆,且h與x的維度相同)將數據空間映射到另一個空間,新空間各個維度相互獨立:

\[ p_H(h) = \Pi_d p_{H_d}(h_d) \]

新的空間數據的組織結構相對簡單。換種說法即是,我們要學習的是樣本的分布,通過一種可逆變換將這個分布轉化成一種相簡單易得的分布,比如指數族分布。

將變量轉換可得到:

\[ p_X(x) = p_H (f(x))| \det \frac{\partial f(x)}{\partial x}| \]

這個推導是由概率中的變量轉換定理給出的:

\[ \begin{array}\\ F_X(x) = P(X\le x) = P(g(h)\le x) = P(h \le f(x)) = F_H(f(x)) \end{array} \]

其中 $g(\cdot)$為 \(f(\cdot)\) 的反函數,兩邊同時對x求導即可。

變換$f(\cdot)\(需是其雅克比矩陣(\)\frac{\partial f(x)}{\partial x}\()比較容易得到,且其反函數\)(g(\cdot))$也容易得到。

通過最大似然法優化:

\[ \log (p_X(x)) = \log(p_H(f(x))) + \log(|\det \frac{\partial f(x)}{\partial x}|) \]

其中$p_H(h)$為先驗,是預先給定的,比如標准正態分布。如果這個先驗可因式分解(即各維度相互獨立),那么我們可稱為非線性獨立成分估計(Non-Linear Independent components estimation(NICE)).

如果是NICE,上面的形式即可轉化為:

\[ \log (P_X(x)) = \sum_{d =1}^D\log (p_{H_d}(f_d(x))) + \log(|\det(\frac{\partial f(x)}{\partial x})|) \]

其中$f(x) = (f_d(x))_{d\le D}$, 另外 f(\cdot)可以是由一系列的變換組成的總變換$f =f_1\circ f_2\circ...\circ f_K$(就像深度神經網絡一樣,只不過要求每變換f_k都必須是可逆的):

\[ x \overset{f_1}{\underset{f_1^{-1}} \Longleftrightarrow}h_1 \overset{f_2}{\underset{f_2^{-1}} \Longleftrightarrow} h_2\overset{f_3}{\underset{f_3^{-1}} \Longleftrightarrow}... \overset{f_K}{\underset{f_K^{-1}} \Longleftrightarrow}h_K \]
\[ \log p_X(x) = \sum_{d = 1}^D \log(p_{H_d}(f_d(x))) + \sum_{i=1}^K \log|\det(\frac{\partial h_i}{\partial h_{i-1}})| \]

###Coupling Layer

上面提到$f(\cdot)$應該滿足:可逆且反函數易得,雅克比矩陣也要易得。作者提出了一種雙射變換。

設 $x \in \mathscr, I_1,I_2$是 [1,D]的兩個分量,令 \(d = |I_1|\) 並且 m 是定義在 $R^d$上的函數,且令 $y = (y_,y_), y_,y_ $滿足:

\[ \begin{array}\\ y_{I_1} = x_{I_1}\\ y_{I_2} = g(x_{I_2},m(x_{I_1})) \end{array} \]

可以看出這是一種可逆變換:

\[ \begin{array}\\ x_{I_1} = y_{I_1}\\ x_{I_2} = g^{-1}(y_{I_2}; m(y_{I_1})) \end{array} \]

從上式可知,$m(\cdot)$在可逆變換中並不沒有變換,也不影可逆變換,那么$m(\cdot)$可以是任意復雜的,比如各種神經網絡。

而且此變換的雅克比矩 以陣也容易得到:

\[ \frac{\partial y}{\partial x} = \left[ \begin{array}\\ I_d \quad\quad 0\\ \frac{\partial y_{I_2}}{\partial x_{I_1}} \quad\frac{\partial y_{I_2}}{\partial x_{I_2}} \end{array} \right] \]

其中 I_d是單位陣,這也意味着:

\[ \frac{\partial y}{\partial x} = \det \frac{\partial y_{I_2}}{\partial x_{I_2}} \]

###Glow

glow 是OpenAI 在NICE,與Real NVP的基礎上的做的工作,理論沒有變化只是在原基礎上做了一個優化,即在此篇論文中提出一個叫做 step of flow 模塊(左下).

###Tricks

####Rescaling

如果采用加法式coupling layer(也即 g = a +b), 那么雅克比矩陣就退化成為單位陣,這樣顯然對學習不利,因此添加額外一層,此層為一個對角矩陣 S 去將coupling layer 的能量釋放出來,這樣,優化函數也變為:

\(\log(p_X(x)) = \sum_{i = 1}^D [\log(p_{H_i}(f_i(x))) + \log(|S_{ii}|)]\)

####Masked convolution

coupling layer的變換 f 可以寫成:

\[ y = b\odot x + (1-b)\odot\Big (g \big((1-b)\odot x; m(b\odot x)\big)\Big) \]

其中b是一個二元的 mask. b的形式有很多,如(0,0,...,1,1), (1,0,1,0,1,...),甚至可以是隨機的。

####Combining coupling layers

多個coupling layers 疊在一起的能力會更強大。但要注意,因為每一層的coupling layer都有一部分的雅克比行列式是單位陣,這樣在優化的時候如果在每一層都同一部分的雅克比矩陣是不變的單位陣,不利於學習,因此最好兩部分(如上面的I_1,I_2)可以交換的變換角色。

####Multi-scale architecture

為節省計算量與存儲消耗,都只將上一層的一部分經過新的layer:

用公式可表示為:

\[ \begin{array}\\ h^{(0)} = x\\ (z^{(i+1)},h^{(i+1)})) = f^{(i+1)}(h^{(i)})\\ z^{(L)} = f^{(L)}(h^{(L-1)})\\ then\\ z = (z^{(1)},...,z^{(L))}) \end{array} \]

####Batch normalization and residual networks

pass

三者在結構上可能有些差別,理論出發點也各不相同,但你會發現三者竟是共通的,他們其實都是將數據映射到新的空間,這個空間的數據分布相對易得。

##主要參考文獻

[1]: Kingma, D. P., Dhariwal, P., & Francisco, S. (n.d.). Glow: Generative Flow with Invertible 1×1 Convolutions, 1–15. Retrieved from https://github.com/openai/glow. [2]: Dinh, L., Sohl-Dickstein, J., & Bengio, S. (2016). Density estimation using Real NVP. https://doi.org/1605.08803 [3]: Dinh, L., Krueger, D., & Bengio, Y. (2014). NICE: Non-linear Independent Components Estimation, 1(2), 1–13. https://doi.org/1410.8516 [4]: Kingma, D. P., & Welling, M. (2013). Auto-Encoding Variational Bayes, (Ml), 1–14. https://doi.org/10.1051/0004-6361/201527329 [5]: Doersch, C. (2016). Tutorial on Variational Autoencoders, 1–23. https://doi.org/10.3389/fphys.2016.00108 [6]: Goodfellow, I. J., Pouget-Abadie, J., Mirza, M., Xu, B., Warde-Farley, D., Ozair, S., … Bengio, Y. (2014). Generative Adversarial Networks, 1–9. https://doi.org/10.1001/jamainternmed.2016.8245 [7]: Mirza, M., & Osindero, S. (2014). Conditional Generative Adversarial Nets, 1–7. Retrieved from http://arxiv.org/abs/1411.1784 [8]: Lucic, M., Kurach, K., Michalski, M., Gelly, S., & Bousquet, O. (2017). Are GANs Created Equal? A Large-Scale Study. Retrieved from http://arxiv.org/abs/1711.10337


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM