李宏毅學習筆記28.MORE ABOUT AUTO-ENCODER

簡介

本節是新加的內容,AUTO-ENCODER有很多內容在本節中補充。
公式輸入請參考:在線Latex公式
在這裏插入圖片描述
AUTO-ENCODER模型構架如上圖所示,中間的vector也被稱爲:
Embedding,Latent Representation,Latent Code
那麼本節要從兩個方面來講:
·More than minimizing reconstruction error
·More interpretable embedding
之前要做embedding的根本原因是:An embedding should represent the object.
在這裏插入圖片描述
額,二次元的世界我不懂。。。推測上面左邊的二次元人物的形象是脖子上掛鐵三角,因此鐵三角可以作爲她的embedding表示。so進入第一個話題:

Beyond Reconstruction

How to evaluate an encoder?

接上面的例子,實際上我們是有這樣的encoder(吃圖片,吐vector表示):
在這裏插入圖片描述
這個模型相當於GAN裏面的Discriminator(相當於binary classifier)
在這裏插入圖片描述
這個模型訓練吃圖片,判斷是否和標籤是不是一對。
在這裏插入圖片描述
oss of the classification task is 輸出與標籤的交叉熵LDL_D
我們用ϕ\phi來表示Discriminator的參數,那麼訓練模型參數來最小化LDL_D可以寫爲:
LD=minϕLD(1)L^*_D=\underset{\phi}{min}L_D\tag1
如果訓練後我們發現LDL^*_D很小,那麼我們可以下結論:The embeddings are representative. 機器就可以根據圖片和向量表示判斷他們是一對的
如果發現LDL^*_D很大,那麼我們可以說,向量表示不好,圖片和向量無法判斷是否一對:
在這裏插入圖片描述
在這裏插入圖片描述

既然我們知道如何來評估向量表示的好和不好,我們就是要調整encoder的參數θ\theta,然後用評估方法(根據LDL^*_D來評估)來讓生成向量最優。
θ=argminθLD\theta^*=arg\underset{\theta}{\text{min}}L^*_D
把公式1代入:
θ=argminθminϕLD\theta^*=arg\underset{\theta}{\text{min}}\underset{\phi}{\text{min}}L_D
也就是說我們要訓練encoder的參數θ\theta和discriminator的參數ϕ\phi,使得LDL_D最小化,這個東西實際可以類比到最原始的auto-encoder模型要同時訓練encoder和decoder使得reconstruction error最小。也就是說auto-encoder模型:
在這裏插入圖片描述
實際上就是下面encoder+discriminator模型的special case
在這裏插入圖片描述
這一節把之前的auto-encoder進行了擴展,變成了encoder+discriminator模型。

Sequential Data

這小節來看看,如果輸入數據是Sequential的數據會是什麼情況。最常見的Sequential data就是文章。
之前有解決這個問題的模型叫:Skip thought

Skip thought

就是根據中間句來預測上下句。
在這裏插入圖片描述

這個模型訓練過程和訓練word embedding很像,因爲訓練word embedding的時候有這麼一個原則,就是兩個詞的上下文很像的時候,這兩個詞的embedding就會很接近。換到句子的模型上,如果兩個句子的上下文很像,那麼這兩個句子的embedding就應該很接近。
例如:
這個東西多少錢?答:10元。
這個東西多貴?答:10元。
發現答案一樣,所以問句的embedding是很接近的。

Quick thought

文獻:https://arxiv.org/pdf/1803.02893.pdf
由於Skip thought要訓練encoder和decoder,因此訓練速度比較慢,因此有出現一個改進版本Quick thought,顧名思義就是訓練速度上很快。在Quick thought裏面只訓練encoder,不訓練decoder。
在這裏插入圖片描述
丟一個句子進encoder得到的向量表示要和下一個句子丟進encoder得到的向量表示要越接近越好,而與隨機句子丟進encoder得到的向量表示要越接遠越好。
模型中的classifier吃當前句子(Spring had come.)的向量表示,還吃下一句(And yet his crops didn’t grow.)和其它幾個隨機生成的句子的向量表示,這個classifier可以輸出正確的下一句。
classifier和encoder是一起訓練的。
實作上classifier做的事情很簡單,就是直接拿當前句子的向量表示和所有句子的向量表示做內積,看誰的內積最大,誰就是下一個句子。這裏爲了防止機器作弊,直接把輸入作爲下一句(這樣內積最大),還要附加條件:使得當前句的向量表示和隨機句子的向量表示越不像越好。

Contrastive Predictive Coding(CPC)

這個模型和Quick thought的思想是一樣的,不過是用在聲音信號上的。(不展開)
在這裏插入圖片描述

下面看第二個話題(More interpretable embedding)

Feature Disentangle

Disentangle意思是解開
在這裏插入圖片描述
·An object contains multiple aspect information. 例如
在這裏插入圖片描述
中間的vector包含不僅僅是聲音信息,還有講話人的聲音特點,環境噪音等其他信息。
在這裏插入圖片描述
圖片向量化後可以包含圖片本身的信息之外還有畫風,圖片中的物品等信息。
但是現在我們只用一個向量來表示一個object,我們是無法知道向量的那些維度包含那些信息,例如表示聲音的向量,那些維度包含內容信息,那些包含講話人的性別信息等。也就是說這些信息是交織在一起的,我們希望模型可以幫我們把這些信息disentangle開來。
兩種方法:
一種是在訓練出來的vector上已經把不同內容分開了:
在這裏插入圖片描述
一種是訓練兩個encoder分別抽取不同內容,然後把兩個部分拼接起來,才能還原原來的內容。。
在這裏插入圖片描述

Voice Conversion

方法一的例子:
在這裏插入圖片描述
在這裏插入圖片描述
人和說話的內容是放在同一個向量裏面的。
然後把女生說話的內容,和男生說話的特點合起來,就變成了男生在說How are you?(摳男飄過)
在這裏插入圖片描述
·The same sentence has different impact when it is said by different people.
在這裏插入圖片描述

Adversarial Training

訓練模型的過程很有意思,假設encoder輸出的向量一共有200維,我們希望把語者(說話人)信息(就是性別)放到後面100中(如下圖所示的黃色部分),那麼我們就把前面100維(綠色部分)接到一個Speaker Classifier上,Classifier用來分辨語者的性別,encoder的原目標要加上一個限制,就是要使得不能讓Classifier分辨出語者的性別,因此在訓練的過程中就會把語者的性別放到後100維中去了,前100維就只剩下內容的信息了。
在實作過程中,通常是利用GAN來完成這個過程,也就是把encoder看做generator,把Classifier看做discriminator。Speaker classifier and encoder are learned iteratively.
在這裏插入圖片描述

Designed Network Architecture

當然也可以用第二種方法來解決變聲器的問題
在這裏插入圖片描述
IN=instance normalization (remove global information)
AdaIN=adaptive instance normalization (only influence global information)
這裏不展開,兩個normalization 的方法應該會有歸一化專題講解。

Discrete Representation

如果模型可以從連續型的向量表示變成輸出離散的表示,那麼對於表示的解釋性估計會有更好的理解。(·Easier to interpret or clustering)
例如:用獨熱編碼表示圖片,做法很簡單,在連續向量後面接相同維度的獨熱編碼,看連續變量的哪個維度最大就用哪個做獨熱編碼的1.
在這裏插入圖片描述
同樣可以用Binary向量來表示圖片,只不過判斷0/1的方法不一樣,這裏如果大於0.5取1,小於取0
在這裏插入圖片描述
但是上面的模型在連續向量轉離散向量的步驟上是不可做偏導的(無法GD)但是有辦法:https://arxiv.org/pdf/1611.01144.pdf
當然,上面兩個離散向量的模型比較起來,Binary模型要好,原因有兩點:
1、同樣的類別Binary需要的參數量要比獨熱編碼少,例如1024個類別Binary只需要10維即可,獨熱需要1024維;
2、使用Binary模型可以處理在訓練數據中未出現過的類別。
除了上面的兩個模型之外,在實作上有:

VQVAE

Vector Quantized Variational Auto-encoder(VQVAE)
文獻:https://arxiv.org/abs/1711.00937
在這裏插入圖片描述
第一步:先用Encoder抽取爲連續型的向量vector;
第二步:再用vector與Codebook中的離散變量VectoriVector_i進行相似度計算,例如上圖中黃色的Vector3Vector_3
第三步:用Vector3Vector_3還原輸入信息。
上面的模型中,如果輸入的是語音信息,那麼語者信息和噪音信息會被過濾掉,因爲上面的Codebook中保存的是離散變量,而內容信息是一個個的token,是容易用離散向量來表示的,而其他信息不適合用離散變量表示,因此會被過濾掉。
因此過濾信息是VQVAE的一個應用。
既然可以用離散向量來表示輸入信息,那麼我們也可以考慮用序列來embedding

Sequence as Embedding

文獻:https://arxiv.org/abs/1810.02851
This is a seq2seq2seq auto-encoder.
Using a sequence of words as latent representation.

在這裏插入圖片描述
例如:一篇文章經過encoder得到一串文字,然後這串文字再通過decoder還原迴文章。
Only need a lot of documents to train the model.
中間的文字是什麼?摘要。
但是這個模型效果是不好的,例如:
臺灣大學會被機器抽取爲:灣學,而不是臺大。因爲模型只要還原原文,而沒有要求抽取出來的東西要符合語法規則。
因此模型可以改進爲:
在這裏插入圖片描述
例子:
在這裏插入圖片描述
在這裏插入圖片描述
做得不好的例子:
在這裏插入圖片描述
在這裏插入圖片描述

Tree as Embedding

除了向量表示,序列表示,還有tree表示(不展開)
https://arxiv.org/abs/1806.07832
在這裏插入圖片描述
https://arxiv.org/abs/1904.03746
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章