# 李宏毅_More about Auto-encoder ###### tags: `Hung-yi Lee` `NTU` `More about Auto-encoder` ## More about Auto-encoder(1/4) [課程連結](https://www.youtube.com/watch?v=6ZWu4L7XOiQ) ### Auto-encoder  Auto-encoder的架構非常明顯,一個Encoder,輸出一個vector,其中這個輸出的vector又可以稱為Embedding、Laten Representation、Latent Code。而Decoder的部份則是以Encoder的output做為input,試圖還原輸入的資訊。訓練的時候,我們要讓Encoder的輸入與Decoder的輸出愈接近愈好。 課程主要希望可以說明兩點: * 有沒有minimizing reconstruction error以外的作法 * Encoder的vector是否可以更容易的被解讀 ### What is good embedding?  Embedding的用途,我們希望它是可以用來表示原來的物件。就好比,當我們看到耳機就想到三玖,去店裡只要說買三玖耳機店員就知道要拿什麼給你。 ### Beyond Reconstruction  那我們應該如何知道我們所訓練的Encoder所輸出的embedding不是有代表示?我們可以利用一個Discriminator來判斷,輸入是原圖與embedding,經過discriminator判斷兩者是否為一對的。 而因為是一個classifier,因此給定的訓練資料就必需是原圖與embedding,讓這個discriminator知道什麼樣的圖與什麼樣的embedding在一起的時候是一對的,訓練過程中我們需要去定義loss,而常見的binary classifier使用的loss function就是cross entropy。 以$\phi$來表示binary classifier的參數,我們做的就是最小化loss function,也就是$L^*_D = \min_\phi L_D$。如果訓練出來的$L^*_D$很小,那就意味著這個embedding非常具有代表性。反之,如果$L^*_D$很大,那就代表訓練出來的embedding不具代表性。 ### Beyond Reconstruction  現在我們有了一個minimizing reconstruction error以外的作法,Encoder的目標變成訓練$\theta$來最小化$L_D^*$,即: * $\theta^* = \arg\min_\theta L^*_D$ * 而我們知道,$L^*_D = \min_\phi L_D$,因此上面等式又可以等於$\arg \min_\theta \min_\phi L_D$ 也就是 我們要同時找出encdoer_$\theta$與discriminator_$\phi$來最小化$L_D$,這個作法被用於[Deep InfoMax(DIM)](https://arxiv.org/abs/1808.06670)。 但這件事又跟我們訓練Auto-encoder一樣,同時訓練encoder與decoder來minimizing reconstruction error。 ### Typical auto-encoder is a special case  我們現在知道,auto-encoder跟剛才所說的,同時訓練encoder與binary classifier一樣,只是可以將auto-encoder視為一個特別的情況。 如上圖所示,剛才我們所說的discriminator是同時將image與embedding做為輸入,但如果先將embedding做為input,得到的結果再跟image相減,那它就是一個reconstruction error了。 ## More about Auto-encoder(2/4) [課程連結](https://www.youtube.com/watch?v=hhsfEaVaeQU) ### Sequential Data  [Skip-Thought Vectors](https://papers.nips.cc/paper/5950-skip-thought-vectors.pdf) [Quick thought_AN EFFICIENT FRAMEWORK FOR LEARNING SENTENCE REPRESENTATIONS ](https://arxiv.org/pdf/1803.02893.pdf) 如果資料本身存在著順序,那就可以做更多的變化,除了輸入自己、輸出自己的作法之外,你也可以輸入一個句子,然後輸出是前一個句子跟下一個句子,這樣子的概念稱為Skip thought。 在word embedding中,如果兩個詞彙的上下文很像,那它們的語意就會很接近,而在skip-thought中,層級變成句子,如果兩個句子的上下文很像,那這兩個句子應該會有相同的意思 舉例來說,這東西多少錢,後面接十元,跟這東西有多貴,後面一樣接十元。那我們就知道,多少錢跟有多貴有著差不多的語意。 後來又延伸出一個Quick thought,差異在於: * Skip-thought要訓練encoder、decoder、也要predict未來的句子 * Quick thought只訓練encoder Quick thought的想法是,將要訓練的句子輸入給encoder,然後輸出一個embedding vector,然後每一個句子要跟它的下一個句子的輸出的embedding vector愈接近愈好,反之,跟不相關的句子的距離就要愈遠愈好。 論文中的作法是訓練一個classifier,我們會將目前的句子的embedding vector與正確的下一個句子,以及兩個隨機挑選的句子的embedding vector做為輸出,而這個classifier會正確的告訴我們那一個是正確的下一個句子。 不過實務上可以直接計算embedding vector之間的inner product,愈大值就代表就是正確的下一個句子。比較需要注意的是,訓練過程中除了正確的下一個句子要愈接近愈好之外,也要隨機挑選句子讓它們愈不接近愈好。 ### Sequential Data  [Representation Learning withContrastive Predictive Coding](https://arxiv.org/pdf/1807.03748.pdf) 這是一個處理聲音訊號的說明,每個聲音訊號的一小段都利用encoder來得到它們的embedding,以$z_t$來表示,而我們希望的就是拿著這一小段聲音訊號的embedding來預測接下來會出現的聲音訊號的embedding。 ## More about Auto-encoder(3/4) [課程連結](https://www.youtube.com/watch?v=ZRyoCBCFMOs) ### Feature Disentangle  課程主要說明,如果讓encoder的output更容易解釋。Disentangle的中文意思就是解開。 一個Encoder的輸入包含了各種的資訊,聲音訊號來說就可以有說話人的聲音以及環境音,而文字也包含詞彙與語意的資訊。但不管如何,我們就是以encoder所output的vector來做為這個輸入的表示。 ### Feature Disentangle  舉例來說,我們希望輸入一段聲音訊號,而輸出的假設是一個200維的向量,前100維是語意內容的資訊,而後100維則是說話那個人的資訊。 又或者,我們可以有兩個Encoder,一個負責處理語意內容,一個負責處理說話人的資訊,兩個輸出再合併給Decoder來做reconstructed。 ### Feature Disentangle - Voice Conversion  其中的應用可以這麼做,假設,我們可以確實的將語意與說話人的資訊確實的抽出,那就可以用來做一個變聲器,讓A說的語意由B來說出。 ### Feature Disentangle - Voice Conversion  嗯..同樣的一句話由不同人說,就是有不同的效果。 ### Feature Disentangle - Adversarial Training  這邊說明以GAN的作法來處理 * 同時訓練一個classifier,這個classifier的主要功能是判斷說這句話的人是那一個,而Encoder要努力的騙過classifier,讓它一直猜錯 * 如果你給classifier看的是Encoder的output的前100維,那Encoder就知道,我們不能把說話人的資訊放這邊,資訊自然就往後100維去 * 實務上的訓練可以採用訓練GAN的方式來處理 ### Feature Disentangle - Designed Network Architecture  我們有另一種作法,直接消除掉我們不希望出現的資訊,這可以利用instance normalization layer來處理,直接除掉global information。而在聲音資訊中可能會出現的global information就可能是說話的那個人。 所以以上圖架構來看,Encoder 1我們加入了IN layer,那就可能可以直接消掉說話人的資訊。但這還不能有任何的保證,因此我們還會在Decoder中加入AdaIN layer(adaptive instance normalization)讓Encoder 2的output可以加到AdaIN內,來調整global information。 Encoder 1拿掉語者資訊,Encoder 2要確保可以保留語者資訊,這樣重構之後的資訊才會是完整的。 ### Feature Disentangle - Adversarial Training  這是學生的作品,訓練過程中沒有給任何中文的資訊,將李宏毅老師所說的話轉成是外國人來說。 ## More about Auto-encoder(4/4) [課程連結](https://www.youtube.com/watch?v=DRLsw4CshqU) ### Discrete Representation  [參考論文_CATEGORICAL REPARAMETERIZATION WITH GUMBEL-SOFTMAX](https://arxiv.org/pdf/1611.01144.pdf) 過去訓練auto-encoder的時候,那個output的embedding vector我們都將它視為一個continue vector,但這樣的向量通常我們也難以理解。因此我們希望輸出的部份可以是discrete,這有助於解讀這個輸出向量。 上面簡報為例,我們可以讓輸出的連續向量取最大值,也就是做One-hot,或者可以設置一個閥值,也許大於0.5就賦值1,其餘為0,也就是做Binary。 不過這麼做有問題,因為很明顯的這並沒有辦法微分,不用擔心,上面的參考論文上提到的GUMBEL-SOFTMAX就是一個解法。 值得注意的是,兩種作法,相同的結果,用Binary的方式所需要的參數量是比較少的,而且採Binary還有機會處理沒看過的資料。 ### Discrete Representation  [參考論文_Neural Discrete Representation Learning](https://arxiv.org/abs/1711.00937) 有一種作法,稱為VQVAE,除了encoder、decoder之外,還有一個Codebook。這個Codebook裡面就是一排的向量,不是由人來設定,而是自己學習,想成它們就是模型內的參數,假設1個有10維,那5個就是50個參數。 概念上就是,encoder輸出一個continue vector,拿這個輸出的連續向量跟codebook內的向量做相似度計算,取出最像的那一個來做為decoder的輸入。以上面為例,因為Codebook內只有5個向量,因此decoder的輸入就只會有5種的選擇。 如果將這種技術應用在語音上,那保留在codebook內的通常就是語意的部份,環境音通常會被濾掉,因為語意的部份是discrete,而環境音通常是continues。 ### Sequence as Embedding  [參考論文_Learning to Encode Text as Human-Readable Summaries using Generative Adversarial Networks](https://arxiv.org/abs/1810.02851) 另外一種應用,我們可以讓latent representation不再是一個向量,而是一個句子。 假設我們encoder的對象是一堆的文章,那我們可以訓練一個seq2seq2seq的auto-encoder: * 第一個seq2seq吃的是一篇文章,輸出的是一個sequence,也就是一串文字,而不是向量,然後第二個seq2seq再吃這串文字來試圖還原原本的文章 這麼原本我們期待中間的word sequence會是一個summary,但實際上因為兩邊都是機器,因此它們可能會用著機器的暗號來處理,舉例來說,台灣大學也許它們簡稱不是台大,而是灣學也說不定,只要能夠還原台灣大學就可以。 ### Sequence as Embedding  如果我們希望可以學到一個人看的懂的summary,那就需要應用到GAN的概念,也就是用一個discriminator來判斷這個句子是人寫的,還是機器產生的。這樣子,encoder就會學著去產出一個可以騙過discriminator又可以給decoder還原為文章的句子。 不過這個訓練過程還是需要應用到RF的概念來硬train一發。 ### Sequence as Embedding  這是課堂上學生的實作範例。 ### Sequence as Embedding  這是課堂上學生的實作範例。 ### Tree as Embedding  [參考論文_StructVAE: Tree-structured Latent Variable Models for Semi-supervised Semantic Parsing](https://arxiv.org/abs/1806.07832) [參考論文_Unsupervised Recurrent Neural Network Grammars](https://arxiv.org/abs/1904.03746)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up