深度学习之自编码器(1)自编码器原理
深度學(xué)習(xí)之自編碼器(1)自編碼器原理
- 自編碼器原理
?前面我們介紹了在給出樣本及其標(biāo)簽的情況下,神經(jīng)網(wǎng)絡(luò)如何學(xué)習(xí)的算法,這類算法需要學(xué)習(xí)的是在給定樣本 x\boldsymbol xx下的條件概率 P(y∣x)P(y|\boldsymbol x)P(y∣x)。在社交網(wǎng)絡(luò)蓬勃發(fā)展的今天,獲取海量的樣本數(shù)據(jù) x\boldsymbol xx,如照片、語音、文本等,是相對容易的,但困難的是獲取這些數(shù)據(jù)所獲得的標(biāo)簽信息,例如機(jī)器翻譯,除了收集源語言的對話文本外,還需要待翻譯的目標(biāo)語言文本數(shù)據(jù)。數(shù)據(jù)的標(biāo)注工作目前主要還是依賴人的 先驗知識(Prior Knowledge)來完成,如亞馬遜的Mechanical Turk系統(tǒng)專門負(fù)責(zé)數(shù)據(jù)標(biāo)注業(yè)務(wù),從全世界招納兼職人員完成客戶的數(shù)據(jù)標(biāo)注任務(wù)。深度學(xué)習(xí)所需要的數(shù)據(jù)規(guī)模一般非常大,這種強(qiáng)依賴人工完成數(shù)據(jù)標(biāo)注的方式代價較高,而且不可避免地引入標(biāo)注人員的主觀先驗偏差。
?面對海量的無標(biāo)注數(shù)據(jù),有沒有辦法能夠從中學(xué)習(xí)到數(shù)據(jù)的分布P(x)的算法?這就是我們這章要介紹的 無監(jiān)督學(xué)習(xí)(Unsupervised Learning)算法。特別地,如果算法把x作為監(jiān)督信號來學(xué)習(xí),這類算法稱為 自監(jiān)督學(xué)習(xí)(Self-supervised Learning),本章要介紹的自編碼器算法就是屬于自監(jiān)督學(xué)習(xí)范疇。
自編碼器原理
?讓我們來考慮有監(jiān)督學(xué)習(xí)中神經(jīng)網(wǎng)絡(luò)的功能:
o=fθ(x),x∈Rdin,o∈Rdout\boldsymbol o=f_θ (\boldsymbol x),\boldsymbol x\in R^{d_{in}},\boldsymbol o\in R^{d_{out}}o=fθ?(x),x∈Rdin?,o∈Rdout?
其中dind_{in}din?是輸入的特征向量長度,doutd_{out}dout?是網(wǎng)絡(luò)輸出的向量長度。對于分類問題,網(wǎng)絡(luò)模型通過把長度為dind_{in}din?的輸入特征向量x\boldsymbol xx變換到長度為doutd_{out}dout?的輸出向量o\boldsymbol oo,這個過程可以看成是特征降維的過程,把原始的高維輸入向量x\boldsymbol xx變換到低維的變量o\boldsymbol oo。特征降維(Dimensionality Reduction)在機(jī)器學(xué)習(xí)中有廣泛的應(yīng)用,比如文件壓縮(Compression)、數(shù)據(jù)預(yù)處理(Preprocessing)等。最常見的降維算法有主成分分析法(Principle components analysis,簡稱PCA),通過對協(xié)方差矩陣進(jìn)行特征分解而得到數(shù)據(jù)的主要成分,但是PCA本質(zhì)上是一種線性變換,提取特征點能力極為有限。
?那么能不能利用神經(jīng)網(wǎng)絡(luò)的強(qiáng)大非線性表達(dá)能力去學(xué)習(xí)到低維的數(shù)據(jù)表示呢?問題的關(guān)鍵在于,訓(xùn)練神經(jīng)網(wǎng)絡(luò)一般需要一個顯式的標(biāo)簽數(shù)據(jù)(或監(jiān)督信號),但是無監(jiān)督的數(shù)據(jù)沒有額外的標(biāo)注信息,只有數(shù)據(jù)x\boldsymbol xx本身。
?于是,我們嘗試著利用數(shù)據(jù)x\boldsymbol xx本身作為監(jiān)督信號來直到網(wǎng)絡(luò)的訓(xùn)練,即希望神經(jīng)網(wǎng)絡(luò)能夠?qū)W習(xí)到映射fθ:x→xf_θ:\boldsymbol x→\boldsymbol xfθ?:x→x 。我們把網(wǎng)絡(luò)fθf_θfθ?切分為兩個部分,前面的子網(wǎng)嘗試學(xué)習(xí)映射關(guān)系gθ1:x→zg_{θ_1}:\boldsymbol x→\boldsymbol zgθ1??:x→z,后面的子網(wǎng)絡(luò)嘗試學(xué)習(xí)映射關(guān)系hθ2:z→xh_{θ_2 }:\boldsymbol z→\boldsymbol xhθ2??:z→x,如下圖所示:
我們把gθ1g_{θ_1}gθ1??看成一個數(shù)據(jù)編碼(Encode)過程,把高緯度的輸入x\boldsymbol xx編碼成低維度的隱變量z\boldsymbol zz(Latent Variable,或隱藏變量),稱為Encoder網(wǎng)絡(luò)(編碼器);hθ2\boldsymbol h_{θ_2}hθ2??看成數(shù)據(jù)解碼(Decode)的過程,把編碼過后的輸入z\boldsymbol zz解碼為高緯度的x\boldsymbol xx,稱為Decoder網(wǎng)絡(luò)(解碼器)。
?編碼器和解碼器共同完成了輸入數(shù)據(jù)x\boldsymbol xx的編碼和解碼過程,我們把整個網(wǎng)絡(luò)模型fθf_θfθ?叫做自動編碼器(Auto-Encoder),簡稱自編碼器。如果使用深層神經(jīng)網(wǎng)絡(luò)來參數(shù)化gθ1g_{θ_1}gθ1??和hθ2h_{θ_2}hθ2??函數(shù),則稱為深度自編碼器(Deep Auto-encoder),如下圖所示:
?自編碼器能夠?qū)⑤斎胱儞Q到隱藏向量z\boldsymbol zz,并通過解碼器重建(Reconstruct,或恢復(fù))出xˉ\bar \boldsymbol xxˉ。我們希望解碼器的的輸出能夠完美地活著近似恢復(fù)出原來的輸入,即xˉ≈x\bar\boldsymbol x\approx \boldsymbol xxˉ≈x,那么,自編碼器的優(yōu)化目標(biāo)可以寫成:
Minimize?L=dist(x,xˉ)xˉ=hθ2(gθ1(x))\text{Minimize}\ \mathcal L=\text{dist}(\boldsymbol x,\bar\boldsymbol x)\\ \bar\boldsymbol x= h_{θ_2} (g_{θ_1} (\boldsymbol x))Minimize?L=dist(x,xˉ)xˉ=hθ2??(gθ1??(x))
其中dist(x,xˉ)\text{dist}(\boldsymbol x,\bar\boldsymbol x)dist(x,xˉ)表示x\boldsymbol xx和xˉ\bar\boldsymbol xxˉ的距離度量,稱為重建誤差函數(shù)。最常見的度量方法有歐式距離(Euclidean distance)的平方,計算方法如下:
L=∑i(xi?xˉi)2\mathcal L=\sum_i(\boldsymbol x_i-\bar\boldsymbol x_i)^2 L=i∑?(xi??xˉi?)2
它和均方誤差原理上是等價的。自編碼器網(wǎng)絡(luò)和普通的神經(jīng)網(wǎng)絡(luò)并沒有本質(zhì)的區(qū)別,只不過訓(xùn)練的監(jiān)督信號由標(biāo)簽y\boldsymbol yy變成了自身x\boldsymbol xx。借助于深層神經(jīng)網(wǎng)絡(luò)的非線性特征提取能力,自編碼器可以獲得良好的數(shù)據(jù)表示,相對于PCA等線性方法,自編碼器性能更加優(yōu)秀,甚至可以更加完美的恢復(fù)出輸入x\boldsymbol xx。
?在上圖(a)中,第1行是隨機(jī)采樣自測試的真實MNIST手寫數(shù)字圖片,第2、3、4行分別是基于長度為30的隱藏向量,使用自編碼器、Logistic PCA和標(biāo)準(zhǔn)PCA算法恢復(fù)出的重建樣本圖片;在圖(b)中,第1行為真實的人像圖片,第2、3行分別是基于長度為30的隱藏向量,使用自編碼器和標(biāo)準(zhǔn)PCA算法恢復(fù)出的重建樣本。可以看到,使用深層神經(jīng)網(wǎng)絡(luò)的自編碼器重建出圖片相對清洗,還原度較高,而PCA算法重建出的圖片較模糊。
總結(jié)
以上是生活随笔為你收集整理的深度学习之自编码器(1)自编码器原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10怎么修改应用商店存储位置 wi
- 下一篇: 深度学习之自编码器(2)Fashion