人工智慧- Autoencoder 介紹

非監督學習簡單來說就是學習人類沒有標記過的數據。對於沒有標記的數據最常見的應用就是通過聚類(Clustering)的方式將數據進行分類。對於這些數據來說通常有非常多的維度或者說Features。如何降低這些數據的維度或者說“壓縮”數據,從而減輕模型學習的負擔,我們就要用到Autoencoder了。

而Autoencoder就是做資訊的壓縮,當在一層當中使用神經元愈多,可以儲存的資訊量也就愈多,相反的神經元越少,可以儲存的資訊量越少,如果要使用Neurel Network作資料壓縮的話,希望的是可以使用比原本更少的資訊量來儲存,其架構中可細分為 Encoder(編碼器)和 Decoder(解碼器)兩部分,它們分別做壓縮與解壓縮的動作,Autoencoder從輸入層到最中間層的數據處理過程叫做數據編碼(Encode)過程,從中間層到輸出層則為解碼(Decode)過程,最後保證輸出等於輸入。

AutoEncoder是如何工作?

AutoEncoder把數據作為輸入,將其編碼轉換為一個向量,並輸出看起來像輸入的數據。換句話說,它可以學習輸入中的模式,通過反向傳播,可以生成新的非常接近輸入數據的東西。

Autoencoder由2個主要部分:

  1. Encoder:模型在其中學習如何減小輸入尺寸並將輸入數據壓縮為編碼表示。
  2. Decoder:在該模型中,模型學習如何從編碼表示中重建數據,使其盡可能接近原始輸入。

當然encoder是對輸入進行編碼生成一個向量表達,decoder負責基於該向量生成output。AutoEncoder的input與output的神經元數目是完全一致的。 Hidden Layer的神經元數目比較少,這樣可以使網絡提取到更重要的特徵,而不是將輸入直接複製到輸出裡如下圖1。
                                                            

Autoencoder code:
                                                                                                                                                  
                                                                                                                                                                      圖2 定義參數

我們的MNIST數據,每張圖片大小是 28x28 pix,即 784 Features:
                                                                                                                      
                                                                                                                                                                  圖3 MNIST 數據

在壓縮環節:我們要把這個Features不斷壓縮,經過第一個隱藏層壓縮至256個 Features,再經過第二個隱藏層壓縮至128個。

在解壓環節:我們將128個Features還原至256個,再經過一步還原至784個。

在對比環節:比較原始數據與還原後的擁有 784 Features 的數據進行 cost 的對比,根據 cost 來提升我的 Autoencoder 的準確率,下圖是兩個隱藏層的 weights 和 biases 的定義:
                                                                                              
                                                                                                                                       圖4 兩個隱藏層Weights 和 biases定義

下面來定義 Encoder 和 Decoder ,使用的 Activation function 是 sigmoid, 壓縮之後的值應該在 [0,1] 這個範圍內。在 decoder 過程中,通常使用對應於 encoder 的 Activation function:
                                                                                      

                                                                                                                                                                   圖5 encoder and decoder 定義


來實現 Encoder 和 Decoder 輸出的結果:
                                                                                                                                                      

                                                                                                                                                                    圖6 定義Encoder and Decoder 輸出

再通過我們非監督學習進行對照,即對 “原始的有 784 Features 的數據集” 和 “通過 ‘Prediction’ 得出的有 784 Features 的數據集” 進行最小二乘法的計算,並且使 cost 最小化:

                                                                                                                         

                                                                                                                                                                    圖7 定義 loss and optimizer

最後,通過 Matplotlib 的 pyplot 模塊將結果顯示出來, 注意在輸出時MNIST數據集經過壓縮之後 x 的最大值是1,而非255:
                                                                                                              

                                                                                                                                                                                   圖8 pyplot 模塊

                                                   
                                                                                                                                                                          圖9 輸出結果

通過5個 Epoch 的訓練,(通常情況下,想要得到好的的效果,我們應進行10 ~ 20個 Epoch 的訓練)我們的結果如上,上面一行是真實數據,下面一行是經過 encoder 和 decoder 之後的數據,如果繼續進行訓練,效果會更好。

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論