什麼是自編碼?

文章來自莫煩~

各位小夥伴們,大家好,今天讓我們來如何用神經網路來處理非監督的學習,也就是AutoEncoder,自編碼。

首先,我們聽到自編碼,一定會想到,AutoEncoder會是個什麼碼呢?是條形碼,二維碼,還是我們宅男們最不能忍受的打碼中的一種呢?

NO.NO.NO,和他們都沒有關係,其實自編碼是一種神經網路形式,如果你一定要和上面的那些碼扯上關係,我想可以這樣理解了。

現在我們先構架一個神經網路模型,這個模型是收集一張圖片,接受這個圖片後,神經網路給這個圖片打碼,最後再從打碼的圖片中還原,是不是感覺有點抽象,其實我也覺得這樣的解釋不太恰當,那就讓我們更加的具體一點來深入了解下這個自編碼。

現在假設我們剛才構建的模型是這個樣子,我們可以從圖片中看出來,我們剛才上傳給自編碼模型的圖片實質上是經過壓縮以後再進行解壓的一個過程。

當壓縮的時候,原有的圖片的質量被縮減,解壓的時候,用信息量小卻包含了所有信息的文件來恢復出原來的圖片。

那麼,為什麼要這麼做呢?當神經網路要輸入大量的信息,比如高清圖片的時候,輸入的圖像數量可以達到上千萬,要神經網路直接從輸入的數據量中進行學習,是一件非常費力不討好的工作,因此我們就想,為什麼不壓縮一下呢?

提取出原圖片中最具有代表性的信息,縮減輸入中的信息量,然後在把縮減過後的信息放入到神經網路中學習,這樣學習起來就變得輕鬆了,所以自編碼就是能在這個時候發揮作用,從上圖中的藍色框中的X解壓縮到黃色框中的x,然後用黃色的X和藍色的X進行對比,得到預測誤差,再進行反向傳遞,然後逐步的提高自編碼的準確率,訓練一段時間後在中間獲得的哪一個部分黃色的L2就是源數據的精髓。

可以從上面那個模型看出,從頭到尾,我們只用到了這個輸入的信息L1,並沒有用到數據X所對應的數據標籤,所以我們這時候可以得出結論,自編碼是一種非監督學習,通常我們在使用自編碼的時候通常只會使用自編碼的前半部分,這個部分也叫作EnCode,編碼器,編碼器可以得到源數據的精髓,

然後我們只需要在創建一個小的神經網路模型再去學習這個精髓中的數據,不僅可以減少神經網路的負擔,並且同樣可以達到一個很好的效果。

上面這張圖是一個通過自編碼整理出來的數據,他能從各種數據中篩選總結出各種數據的特徵,如果把這個圖片的類型特徵都整理好放到一個圖片上,那麼數據類型都可以很好的用源數據的類型區分出來。

如果你了解PCA主成分分析,自編碼的功能和他類似,甚至在某些部分超出了PCA,換句話說,自編碼可以和PCA一樣可以給特殊屬性降維。

推薦閱讀文章:

參考自:什麼是自編碼 Autoencoder - 知乎專欄

什麼是自編碼?

視頻講解|0基礎學習極大似然估計

視頻講解|為什麼神經網路參數不能全部初始化為全0

更多文章可以掃描公眾號,自然語言處理與機器學習:


推薦閱讀:

SeqGAN & IRGAN | 實錄·Guru Talk #12
word2vec 相關paper/blog推薦
對話系統概述
Character-Aware Neural Language Models

TAG:机器学习 | 深度学习DeepLearning | 自然语言处理 |