自动编码器及其变种
自動編碼器
??三層網絡結構:輸入層,編碼層(隱藏層),解碼層。
??訓練結束后,網絡可由兩部分組成:1)輸入層和中間層,用這個網絡對信號進行壓縮;2)中間層和輸出層,用這個網絡對壓縮的信號進行還原。圖像匹配就可以分別使用,首先將圖片庫使用第一部分網絡得到降維后的向量,再講自己的圖片降維后與庫向量進行匹配,找出向量距離最近的一張或幾張圖片,直接輸出或還原為原圖像再匹配。
??該網絡的目的是重構其輸入,使其隱藏層學習到該輸入的良好表征。其學習函數為h(x)≈xh(x)≈x。但如果輸入完全等于輸出,即g(f(x))=xg(f(x))=x,該網絡毫無意義。所以需要向自編碼器強加一些約束,使它只能近似地復制。這些約束強制模型考慮輸入數據的哪些部分需要被優先復制,因此它往往能學習到數據的有用特性。一般情況下,我們并不關心AE的輸出是什么(畢竟與輸入基本相等),我們所關注的是encoder,即編碼器生成的東西,在訓練之后,encoded可以認為已經承載了輸入的主要內容。
??自動編碼器屬于神經網絡家族,但它們與PCA(主成分分析)緊密相關。盡管自動編碼器與PCA很相似,但自動編碼器比PCA靈活得多。在編碼過程中,自動編碼器既能表征線性變換,也能表征非線性變換;而PCA只能執行線性變換。
??從不同的角度思考特征具有何種屬性是好的特征,自動編碼器分為四種類型:
(1)去燥自動編碼器(DAE)(降噪)
(2)稀疏自動編碼器(SAE,Sparse Autoencoder)(稀疏性,即高而稀疏的表達)
(3)變分自動編碼器(VAE)(高斯分布)
(4)收縮自動編碼器(CAE/contractive autoencoder)(對抗擾動)
去燥自編碼器(DAE)
??最基本的一種自動編碼器,它會隨機地部分采用受損的輸入(就是將輸入做噪聲處理或某些像素置零處理)來解決恒等函數風險,使得自動編碼器必須進行恢復或去燥。(處理過程為輸入有噪聲,目標函數為原圖像)。損失函數為L(x,g(f(x‘)))L(x,g(f(x‘))),其中x‘x‘是含噪聲的輸入。
??這項技術可用于得到輸入的良好表征。良好的表征是指可以從受損的輸入(應該就是中間層encoder輸出的那個較低維的)穩健地獲得的表征,該表征可被用于恢復其對應的無噪聲輸入。
稀疏自編碼器(SAE)
??與常規的AE結構相似,只是隱藏層要比原輸入要高維,且要讓其稀疏,即大部分為0。其損失函數為:Jsparse(W,b)=J(W,b)+β∑s2j=1KL(ρ∥ρ??j)Jsparse(W,b)=J(W,b)+β∑j=1s2KL(ρ‖ρ→j),其中ββ是控制稀疏性的權重,ρρ為平均激活度,ρ??jρ→j為實際激活度。
變分自編碼器(VAE)
??與傳統AE輸出的隱藏層不同,其給隱藏層加了一個約束:迫使隱藏層產生滿足高斯分布的變量,即均值趨于0,方差趨于1。
收縮自編碼器(CAE)
??收縮編碼器學習的是一個在輸入 x 變化小時目標也沒太大變化的函數。其損失函數為Jc=J(x,g(h))+λ∑i∥▽xhi∥2FJc=J(x,g(h))+λ∑i‖▽xhi‖F2,F范數的意義在于想要隱藏層的導數盡可能的小。
為什么自動編碼器大多顯示3層結構,訓練多層時需要多次使用?
??三層網絡是單個自編碼器所形成的網絡,對于任何基于神經網絡的編碼器都是如此。如果需要多層的編碼器,通過逐層訓練的形式完成,這就是堆疊自動編碼器。如果直接用多層的自動編碼器,其本質就是在做深度學習的訓練,可能會由于梯度爆炸或梯度消失導致難以訓練的問題。而逐層訓練可以直接使用前面已經能提取完好特征的網絡,使得整個網絡的初始化在一個合適的狀態,便于收斂。但是,在2014年出現的Batch-Normalization技術【良好的初始化技術】比逐層訓練有效的多。再后來,發現基于殘差(ResNet)我們基本可以訓練任意深度的網絡。
??自動編碼器目前主要應用于 (1) 數據去噪 (2) 可視化降維 (3)特征提取
總結
- 上一篇: 数据库学期总结
- 下一篇: 学习编程的认识和理解