自編碼器筆記(根據「花書」《深度學習》十四章整理)

自編碼器筆記(根據「花書」《深度學習》十四章整理)

來自專欄 機器學習與數學程序

自編碼器(autoencoder)是神經網路的一種,經過訓練後能嘗試將輸入複製到

輸出。自編碼器(autoencoder)內部有一個隱藏層h,可以產生編碼(code)表示

輸入。該網路可以看作由兩部分組成:一個由函數h = f(x) 表示的編碼器和一個生

成重構的解碼器r = g(h)。

圖1.自編碼器的一般結構

1. 欠完備的自編碼器

從自編碼器獲得有用特徵的一種方法是限制h 的維度比x 小,這種編碼維度小於輸入維度的自編碼器稱為欠完備(undercomplete)自編碼器。學習欠完備的表示將強制自編碼器捕捉訓練數據中最顯著的特徵。學習過程可以簡單地描述為最小化一個損失函數:

(1)

當解碼器是線性的且L 是均方誤差,欠完備的自編碼器會學習出與PCA 相同的生成子空間。這種情況下,自編碼器在訓練來執行複製任務的同時學到了訓練數據的主元子空間。

因此,擁有非線性編碼器函數f 和非線性解碼器函數g 的自編碼器能夠學習出更強大的PCA 非線性推廣。不幸的是,如果編碼器和解碼器被賦予過大的容量,自編碼器會執行複製任務而捕捉不到任何有關數據分布的有用信息。從理論上說,我們可以設想這樣一個自編碼器,它只有一維編碼,但它具有一個非常強大的非線性編碼器,能夠將每個訓練數據x(i) 表示為編碼i。而解碼器可以學習將這些整數索引映射回特定訓練樣本的值。這種特定情形不會在實際情況中發生,但它清楚地說明,如果自編碼器的容量太大,那訓練來執行複製任務的自編碼器可能無法學習到數據集的任何有用信息。

2. 正則的自編碼器

2.1. 稀疏自編碼器

稀疏懲罰為:

(2)

其中g(h) 是解碼器的輸出,通常h 是編碼器的輸出,即h = f(x)。

得到重構誤差:

(3)

按照維基百科解釋:

「如果網路的輸入數據是完全隨機的,比如每一個輸入都是一個跟其它特徵完全無關的獨立同分布高斯隨機變數,那麼這一壓縮表示將會非常難學習。但是如果輸入數據中隱含著一些特定的結構,比如某些輸入特徵是彼此相關的,那麼這一演算法就可以發現輸入數據中的這些相關性。事實上,這一簡單的自編碼神經網路通常可以學習出一個跟主元分析(PCA)結果非常相似的輸入數據的低維表示。

我們剛才的論述是基於隱藏神經元數量較小的假設。但是即使隱藏神經元的數量較大(可能比輸入像素的個數還要多),我們仍然通過給自編碼神經網路施加一些其他的限制條件來發現輸入數據中的結構。具體來說,如果我們給隱藏神經元加入稀疏性限制,那麼自編碼神經網路即使在隱藏神經元數量較多的情況下仍然可以發現輸入數據中一些有趣的結構。

稀疏性可以被簡單地解釋如下。如果當神經元的輸出接近於1的時候我們認為它被激活,而輸出接近於0的時候認為它被抑制,那麼使得神經元大部分的時間都是被抑制的限制則被稱作稀疏性限制。這裡我們假設的神經元的激活函數是sigmoid函數。如果你使用tanh作為激活函數的話,當神經元輸出為-1的時候,我們認為神經元是被抑制的。」

這樣,高維而稀疏是極好的。

權重衰減和其他正則懲罰可以被解釋為一個MAP 近似貝葉斯推斷,正則化的懲罰對應於模型參數的先驗概率分布。這種觀點認為,正則化的最大似然對應最大化在變數x存在情況下觀察到theta的概率。

對數似然函數:

(4)

通過優化結果推斷可能輸出:

(5)

要落實稀疏編碼模型,引入相對熵,也就是KL散度(KL divergence)作為整個網路懲罰項。

2.2. 去噪自編碼器

相當於實現如(6)損失函數的最小化:

(6)

其中

是被某種雜訊損壞的x 的副本。因此去噪自編碼器必須撤消這些損壞,而不是簡單地複製輸入。

一般去噪自編碼器的結構:

圖2.去噪自編碼器結構

DAE的訓練過程如下:

圖3. 去噪自編碼器(DAE)訓練過程

相當於通過隨機梯度下降,求最大似然期望概率值。

3. 表示能力、層的大小和深度

萬能近似定理保證至少有一層隱藏層且隱藏單元足夠多的前饋神經網路能以任意精度近似任意函數(在很大範圍里),這是非平凡深度(至少有一層隱藏層)的一個主要優點。這意味著具有單隱藏層的自編碼器在數據域內能表示任意近似數據的恆等函數。但是,從輸入到編碼的映射是淺層的。這意味這我們不能任意添加約束,比如約束編碼稀疏。深度自編碼器(編碼器至少包含一層額外隱藏層)在給定足夠多的隱藏單元的情況下,能以任意精度近似任何從輸入到編碼的映射。

限制稀疏自編碼器的層數相當於降維,防止過擬合。必須保證中間節點數量少於輸入節點數,以還原最重要的特徵。一般工程上使用L1正則化通過懲罰學習,可以在特徵組合稀疏的情況下,得到比較好的誤差結果。

按照Hinton的說法,自編碼器的隱含層如果只有一層,其原理類似主成分分析(PCA),如果多個隱含層,每個隱含層都是受限玻爾茲曼機神經網。訓練時,相當於先對每兩層間進行無監督學習,將整個網路達到理想的初始化分布,最後再通過反向傳播演算法的有監督學習調整模型權重,這樣可以解決網路過深帶來的梯度彌散問題。

4. 隨機編解碼器

在自編碼器中,x 既是輸入也是目標。然而,我們仍然可以使用與之前相同的架構。給定一個隱藏編碼h,我們可以認為解碼器提供了一個條件分布pmodel(x j h)。接著我們根據最小化-log pdecoder(x|h) 來訓練自編碼器。損失函數的具體形式視pdecoder(x|h)的形式而定。就傳統的前饋網路來說,如果x 是實值的,那麼我們通常使用線性輸出單元參數化高斯分布的均值。在這種情況下,負對數似然對應均方誤差準則。類似地,二值x 對應於一個Bernoulli 分布,其參數由sigmoid 輸出單元確定的。而離散的x 對應softmax 分布,以此類推。在給定h 的情況下,為了便於計算概率分布,輸出變數通常被視為是條件獨立的,但一些技術(如混合密度輸出)可以解決輸出相關的建模。

潛在變數模型都可以定義為隨機編碼器如式(7)和隨機解碼器如式(8)

(7)

(8)

收縮自編碼器

在編碼h = f(x) 的基礎上添加了顯式的正則項,鼓勵f 的導數儘可能小:

(9)

懲罰項Ω(h) 為平方Frobenius 範數(元素平方之和),作用於與編碼器的函數相關偏導數的Jacobian 矩陣。這樣的操作,增強了表達式和內部特徵提取的穩健性。

其目標函數如式(10)

(10)

去噪自編碼器和收縮自編碼器之間存在一定聯繫:Alain和 Bengio 等人在2013年指出在小高斯雜訊的限制下,當重構函數將x 映射到r = g(f(x)) 時,去噪重構誤差與收縮懲罰項是等價的。換句話說,去噪自編碼器能抵抗小且有限的輸入擾動,而收縮自編碼器使特徵提取函數能抵抗極小的輸入擾動。


推薦閱讀:

今天終於弄明白了滑鼠滾輪編碼器
編碼器作為伺服電機一部分,到底發揮著怎樣的作用?

TAG:深度學習DeepLearning | 深度學習書籍 | 編碼器 |