1. 程式人生 > >Tensorflow學習之Autoencoder(一)

Tensorflow學習之Autoencoder(一)

1. 什麼是自編碼器(Autoencoder)?

自編碼器是一種神經網路的形式。

人工神經網路是一種具有層次結構的模型,對於一個給定的神經網路,假設它的輸入和輸出是相同的,在不斷調整引數的過程中,得到了每層的引數值,自然地,就得到了輸入的抽象表示,每層代表一種抽象表示。這些抽象表示就是提取到的特徵。自動編碼器就是一種儘可能讓輸入復現的神經網路。其具體過程如圖1所示:

圖1:自編碼器結構

自編碼網路採用無監督的學習方式,整個網路中最主要的部分是編碼器和解碼器,編碼器主要是對資料進行降維,而解碼器則是對資料進行重構,即編碼的反過程。將最開始維度較高的資料輸入到編碼器中,通過層層編碼,提取出高維資料的特徵,獲得低維的資料表示,再將這些表示輸入到解碼器中得到重構資料。通過不斷調整編碼器和解碼器中的權值引數,最終使得輸入資料和輸出資料間的重構誤差達到一個較小的值,就表明編碼器的輸出是輸入的高維資料的有效表示。

2. 壓縮與解壓

在自動編碼器中,編碼器扮演著壓縮的角色,解碼器扮演著解壓的角色。假設自編碼器神經網路如圖2所示, 可以看出圖2中輸入的圖片其實是經過了壓縮,再解壓的這一道工序. 當壓縮的時候, 原有的圖片質量被縮減, 解壓時用資訊量小卻包含了所有關鍵資訊的檔案恢復出原本的圖片. 為什麼要這樣做呢?

圖2:自編碼器的壓縮與解壓結構

原來有時神經網路要接受大量的輸入資訊, 比如輸入資訊是高清圖片時, 輸入資訊量可能達到上千萬, 讓神經網路直接從上千萬個資訊源中學習是一件很吃力的工作。 所以, 何不壓縮一下,提取出原圖片中的最具代表性的資訊,縮減輸入資訊量,再把縮減過後的資訊放進神經網路學習。這樣學習起來就簡單輕鬆了。所以,自編碼器就能在這時發揮作用。如圖3所示,通過將原資料白色的X壓縮, 解壓成黑色的X,然後通過對比黑白X,求出預測誤差,進行反向傳遞,逐步提升自編碼器的準確性。訓練好的自編碼中間這一部分就是能總結原資料的精髓。可以看出,從頭到尾,我們只用到了輸入資料X, 並沒有用到X對應的資料標籤,所以也可以說自編碼器是一種非監督學習。到了真正使用自編碼的時候,通常只會用到自編碼前半部分--壓縮部分。壓縮部分也叫編碼器,通常用來降維,提起資料的主要特徵維度。解壓部分也叫解碼器,通常用降維的資料還原原始資料。

圖3:自編碼器的訓練過程

3. 編碼器(Encoder)

圖4:編碼器

圖4部分叫作 encoder 編碼器。編碼器能得到原資料的精髓, 然後我們只需要再建立一個小的神經網路學習這個精髓的資料,不僅減少了神經網路的負擔,而且同樣能達到很好的效果。

4. 解碼器(Decoder)

至於解碼器 Decoder, 我們也能讓它來做點事情。我們知道,解碼器在訓練的時候是要將精髓資訊解壓成原始資訊,那麼這就提供了一個解壓器的作用,甚至我們可以認為是一個生成器 (類似於GAN)。那做這件事的一種特殊自編碼叫做 variational autoencoders, 你能在這裡找到他的具體說明。

有一個例子就是讓它能模仿並生成手寫數字。

圖5:解碼器生成數字

 5. Reference