從直覺的角度來闡述
- 可以用于壓縮數(shù)據(jù)项秉,或從有
noisy
或者損壞的數(shù)據(jù)中重建原始數(shù)據(jù)诬垂。 - 允許我們線性的差值劲室,比如讓一個人的臉變成另外一個人的臉。
- 可以對
data
可以按照需求的進(jìn)行操作结窘,比如改變照片上人的頭發(fā)的長度很洋,或者不改變其他任何聲音特性的情況下平滑的將一個男性的聲音變?yōu)榕浴?/li> - 甚至可以發(fā)現(xiàn)大量未標(biāo)記數(shù)據(jù)中隱藏的概念和關(guān)系,因此可以用于無監(jiān)督學(xué)習(xí)中隧枫。
Autoencoder
- 用于壓縮數(shù)據(jù)喉磁,但是沒有泛化能力,因此不能作為生成模型官脓。
-
A->B
(AB
是隊友)协怒,A
有some kind of data
,而這個data
是B
沒有見過的卑笨,A
必須要將data
描述給B
孕暇,以便B
明白A
的data
是什么樣的(重建data
),有一個C
(教練)能確切的知道A
的data
是什么赤兴,然后能夠給B
重建的data
打個分?jǐn)?shù)妖滔,說明重建的好或者壞。問題在于A和B不能直接交流而是通過一串?dāng)?shù)字code
來傳遞信息的桶良。 -
A
需要encoder data
座舍,為了簡便我們使用表示成坐標(biāo)系的兩維code(x,y)
- 假設(shè)要傳遞的信息是貓狗的圖片,訓(xùn)練階段有
1
百萬的數(shù)據(jù)陨帆。
- 對于一張照片曲秉,
A
將這個圖片輸?shù)阶约旱?code>machine中得到了(2.846, -5.049)
,然后將這個信息發(fā)給B
采蚀,但是B
對于圖片是一無所知的,甚至對于貓和狗長什么樣也是一無所知的岸浑,因此B畫出來的圖像可能是亂七八糟的搏存,random paintings
,而C
拿到B
所畫的圖像和原始的圖像來比較給出一個相似性分?jǐn)?shù)(loss function)
矢洲,并且C
還告訴B
哪些decisions
是對score
有contribution
的以及How
(梯度下降). -
B
也可以告訴A
如何improve
A
的encoding
技術(shù),以便能更好的表示信息 -
A
和B
僅有的聯(lián)系方式就是back-propagation
缩焦,還要注意的一點就是不能一次調(diào)整圖片過多读虏,而是他們需要根據(jù)每個反饋對他們的過程進(jìn)行小的更新,并希望隨著時間的推移袁滥,這些小的調(diào)整將增加一個獨(dú)特的過程盖桥,使他們在所有圖像中獲得良好的分?jǐn)?shù),而不僅僅是當(dāng)前的圖像(控制合適的學(xué)習(xí)率)题翻。 - 因此開始的時候
B
總是亂畫揩徊,直到他從眾多貓狗的訓(xùn)練數(shù)據(jù)中有一次他畫出了動物的輪廓的話發(fā)現(xiàn)得到的分?jǐn)?shù)變高了,雖然此時他還沒有使用A
的輸入的code
嵌赠,因此當(dāng)能畫出貓狗的圖像就會關(guān)注A
輸入塑荒,才不讓自己的得分陷入停滯。
VAE
- 原始的
autoencoder
有一個問題就是有編碼器和解碼器都會記住訓(xùn)練數(shù)據(jù)姜挺,這樣泛化能力就很差齿税。 - 現(xiàn)在做的就是
B
不直接得到訓(xùn)練數(shù)據(jù)的編碼,而是從A
將數(shù)據(jù)編碼的分布中進(jìn)行隨機(jī)采樣炊豪,這在論文里面叫做reparametrization trick
凌箕,就是為了更加的robust
。 - 比如原來的
autoencoder
是非常笨的把一個圖片編碼成一個數(shù)字词渤,現(xiàn)在的VAE
將一個圖像編碼成一個分布(原來是一個點牵舱,現(xiàn)在是一坨),然后再從分布中采樣出一個數(shù)值當(dāng)成圖像的編碼缺虐,因此相當(dāng)于提高的泛化能力芜壁。 - 這樣的就是
autoencoder
編碼的code
,數(shù)據(jù)之間有很大的gap
志笼,幾乎沒有泛化能力沿盅。
- 是一個泛化能力比較強(qiáng)的編碼結(jié)構(gòu)
。
- 但是如果分布像上面一樣還是有問題的纫溃,因為泛化能力還是不夠高腰涧,因此我們要求隱變量的分布越和多元的正太分布相似我們給的獎勵就越多,這樣就增大了隱變量分布的不確定性紊浩,因此
A
就更有可能將數(shù)據(jù)編碼成下面的情況窖铡,這樣也要求了A
編碼要有技巧性疗锐,比如157
和158
編碼重疊的可能性很高,為了避免B
誤會因此要求A
將長得像的圖像放在一起(要求157
和158
)费彼,這樣就提升了A
的編碼能力滑臊。
- 比如下面的圖像就是
VAE
將MNIST
數(shù)據(jù)集進(jìn)行編碼后的t-SNE
圖像,各個數(shù)字聚類了箍铲。
- 這樣的話就有了很好的特性雇卷,比如說得到的一個訓(xùn)練好的
VAE
我們,可以得到了兩個圖像的編碼颠猴,如果取一個平均就是兩個圖像的特性各占一半关划。
- 還有一個有意思的特性就是,每一個維度都是可解釋的翘瓮,比如我們固定其他維度的信息贮折,只是改變隱變量的一個維度,發(fā)現(xiàn)
decoder
時候圖像的胡子變長了资盅,那么這一維度就是用來控制胡子長度的
- 感覺
VAE
就是比AE
多了一個訓(xùn)練encoder
的機(jī)制调榄,這種機(jī)制讓encoder
的編碼更加的可泛化。
VAE在NLP中的應(yīng)用
- 現(xiàn)在的問題好比說是一個人有另外一種語言的詞表但是卻沒有相關(guān)的解釋(并不是說解釋是一定有用的呵扛,畢竟解釋也是一串這種語言的單詞)每庆,需要明白這種語言句子的意思。
It is as if they were handed a dictionary, but without any explanations. Just a long list of all the words in the English language. (Not that the explanations would have helped, since those themselves are formed of the same words that have no meaning to our players yet.)
- 因為直接生成句子太過困難了择份,現(xiàn)在是單詞級別的監(jiān)督信息扣孟。
Now on thr other hand he does not wait for Bob to finish the entire sentence. Instead he gives Bob a score and feedback after every single word he predicts.
Even more crucially, Charlie tells Bob what would have been the correct word.
- 有一個很有意思的事情是,每個人都擁有不同的
language model
荣赶,只是因為他們所擁有的背景知識不同擁有不同的language model
而已凤价,遇到句子狗在追逐...
大部分人會填貓
,但是如果提前告訴你這是一部怪誕小說中的一句話拔创,很多人就會填寫其他東西利诺,同樣的模型訓(xùn)練數(shù)據(jù)就相當(dāng)于condition
(怪誕小說),得到了不同的語言模型剩燥。 - 鑒于有限的信息流慢逾,僅僅編碼令解碼器吃驚的信息,剩下的部分讓解碼器的語言模型來完成灭红,這一概念和信息熵十分的相似侣滩。
The trick, given the limited information flow allowed, lies in Alice encoding exactly the kind of information she thinks is surprising to Bob and letting him rely on his own language model for the rest, and also hoping that he actually uses her information in the first place.
- 現(xiàn)在有個問題就是
decoder
可以學(xué)習(xí)到一個不錯的語言模型僅僅通過對比生成的句子以及原始的句子(捕獲了低階的語法信息),這樣encoder
就學(xué)習(xí)不到任何東西变擒,encoder
幾乎是隨機(jī)的君珠,這時候加入variational
那么基本上就是隨機(jī)+隨機(jī),沒有什么用娇斑,此時優(yōu)化陷入停滯策添。
So now with Bob being pretty decent all by himself and Alice having learned absolutely nothing yet, we risk being stuck at what is called a local maximum.
- 主要的原因在于訓(xùn)練的時候是逐單詞訓(xùn)練的材部,因此用不到
hidden state
,但是如果是逐句子訓(xùn)練的話對于decoder
來說又是太難了唯竹,訓(xùn)練不起來乐导,因此訣竅就是在兩者之間找到一個平衡。 - 一種比較成功的解決這個問題的方法就是給
decoder
增加學(xué)習(xí)障礙浸颓,這樣就能讓encoder
的學(xué)習(xí)速度趕上decoder
物臂,一種方法是讓decoder
變得健忘,在語言模型中只能得到前面兩個詞的信息产上,比如...追逐...
因此他必須使用encoder
給的信息才能很好的預(yù)測下一個詞鹦聪,這樣盡管訓(xùn)練的速度回慢一些,但是不會陷入學(xué)習(xí)停滯階段蒂秘。 - 另外一種方法就叫
KL cost annealing
,就是仍然使用變分淘太,但是在開始的時候判斷的條件松一點姻僧,允許encoder
提供具體的信息,但是隨著訓(xùn)練的進(jìn)行(當(dāng)decoder
的語言模型訓(xùn)練的比較好的時候)蒲牧,要求encoder
提供更加"不確定性"的信息撇贺,也就是從Autoencoder
慢慢的進(jìn)化成Variational Autoencoder
-
VAE
可以只編碼一些重要的信息比如語言是什么風(fēng)格的,文本長度是多少冰抢,剩下的事情交給decoder
的language model
來做松嘶。
Even if they only figure out a simple code where certain code regions tell Bob that the text is a tweet, others a news article, and yet others restaurant reviews, can dramatically help Bob make better guesses about the next word.
Since Bob also doesn’t know when to actually stop his prediction, Alice might also learn to encode the length of the sentence.
- 因此有些維度就代表寫作風(fēng)格,我們可以控制這一維度來得到想要的文本挎扰,這也更加的
robust
因為加入了變分機(jī)制會是的“I went to his house”
和“I went to his flat”
的編碼在隱空間上非常相近翠订。
-
VAE
也可以用于翻譯中,比如encoder
成hidden state
然后decoder
成目標(biāo)語言遵倦。 - 也可以用于文本摘要任務(wù)中尽超,將長句子解碼成短句子。
Text summarisation is also a closely related discipline. Here Alice encodes a long text, and Bob has to decode it into a summary.
從模型的角度來理解(深度學(xué)習(xí)角度)
- 模型整體梧躺,可以看到
decoder
生成30
維的多元高斯分布似谁,然后采樣得到隱變量。
- 隱變量的每一維都是一個高斯分布掠哥,通過
reparametrization
技巧讓采樣的部分變得是課導(dǎo)的巩踏,因此可以端到端的訓(xùn)練。
- 我們需要的各個圖像的隱變量的分布是圖
1
的類型续搀,因為很平滑可以隨意差值來生成圖像塞琼,而不是AE
中的一個點表示一個圖像,為了達(dá)成這個目的相比于AE
的損失函數(shù)VAE
的損失函數(shù)變?yōu)?加了一個KL
項目代。
- 加入
kl
散度強(qiáng)迫每一維都是一個正太分布屈梁,這樣的直觀感覺就是讓每一維所表示的信息盡可能的都在均值0
附近嗤练,也就是不能讓hidden state
通過表示圖像具體的一些信息(比如那些像素點的信息是多少)這樣沒有泛化能力的特征,而是應(yīng)該保留單一的重要的特征在讶,并且這樣就強(qiáng)迫了每一維盡可能的表示單一的特征煞抬,因此完成了特征的解耦,所以在AE
的重構(gòu)損失函數(shù)中加入了KL
散度那一項可以看成是正則項构哺,就是為了讓AE
中一個點表示一個數(shù)據(jù)革答,變成VAE
中的一個分布(上面一坨)的東西表示一個數(shù)據(jù),因此泛化能力大大增強(qiáng)曙强,下圖是兩項損失函數(shù)的物理解釋残拐。
- 第二項
KL
散度loss
的計算公式,當(dāng)Q(z|x)
的均值為0
方差為1
的時候第二項損失函數(shù)取最小值碟嘴。
- 最終趨向于聚集的重建損失和趨向于分散的
KL
散度達(dá)成了平衡溪食,這是符合我們要求的,因為無論我們是從正太分布中隨機(jī)采樣來生成圖像還是進(jìn)行差值都是可以得到一個圖像的(沒有gap
娜扇,而是得到一個平滑的mix
的圖像)错沃。
def vae_loss(input_img, output):
# compute the average MSE error, then scale it up, ie. simply sum on all axes
reconstruction_loss = K.sum(K.square(output-input_img))
# compute the KL loss
kl_loss = - 0.5 * K.sum(1 + log_stddev - K.square(mean) - K.square(K.exp(log_stddev)), axis=-1)
# return the average loss over all images in batch
total_loss = K.mean(reconstruction_loss + kl_loss)
return total_loss
從數(shù)學(xué)的角度來理解(概率模型角度理解)
- 首先寫出生成模型的聯(lián)合概率分布
p(x,z)=p(x∣z)p(z)
,生成的過程可以看成是對于每一個數(shù)據(jù)點:
- 求數(shù)據(jù)的隱變量即求解
p(z∣x)
雀瓢,其中的p(x)
被稱為evidence
就是我們的數(shù)據(jù)分布枢析,p(x)=∫p(x∣z)p(z)dz
可以通過邊緣求積來得到,但是由于要枚舉所有的z是不可求的刃麸,因此必須通過變分推斷(variational inference)的方法近似這個后驗分布醒叁,具體方法是通過
qλ(z∣x)
分布族來近似,λ 指示是哪一個族分布泊业,比如如果q是一個高斯分布把沼,
-
因為上面的后驗分布是不可求的因此我們使用變分推斷的方法來近似這個后驗分布
-
使用KL散度來衡量這個近似的好不好,所以說用高斯近似后驗和用強(qiáng)制每一維是正太分布是同樣的粗粒度
- 由于近似推斷中還有
X
脱吱,也是很難求的智政,因此還要做轉(zhuǎn)換
- 根據(jù)
log p(x)
的公式我們知道最小化KL于最大化ELBO
是等價的,因此我們的優(yōu)化目標(biāo)變成了最大化ELBO
箱蝠。
- 上面的
log p(x)
公式推導(dǎo) - 對
ELBO
展開(其實花書里面對ELBO
的推導(dǎo)直接就是這個公式)续捂。
- 得到了最終的目標(biāo)函數(shù),從數(shù)學(xué)角度我們明白了為什么要加入這樣一個正則項(是為了盡可能逼近的使用一個合適的高斯分布近似原來的后驗
p(z|x)
)
其他一些零零碎碎的東西
-
重建損失一般使用均方誤差宦搬。
-
X
生成Z
的分布是使用高斯來進(jìn)行近似的牙瓢。
- 兩項損失函數(shù)的物理意義
。
- 如果去掉第二項損失函數(shù)
KL
散度那么VAE
就退化成了AE
间校,因為編碼就是一個點而不是一個分布矾克。
引用,感謝憔足!