日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

当我们在谈论 Deep Learning:AutoEncoder 及其相关模型

發(fā)布時(shí)間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 当我们在谈论 Deep Learning:AutoEncoder 及其相关模型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

引言

AutoEncoder 是 Feedforward Neural Network 的一種,曾經(jīng)主要用于數(shù)據(jù)的降維或者特征的抽取,而現(xiàn)在也被擴(kuò)展用于生成模型中。與其他 Feedforward NN 不同的是,其他 Feedforward NN 關(guān)注的是 Output Layer 和錯(cuò)誤率,而 AutoEncoder 關(guān)注的是 Hidden Layer;其次,普通的 Feedforward NN 一般比較深,而 AutoEncoder 通常只有一層 Hidden Layer。

本篇文章會(huì)主要介紹傳統(tǒng)的 AutoEncoder 相關(guān)模型、以及生成模型 Variational AutoEncoder。為了方便講述,以下主要以單層 Hidden Layer 的 AutoEncoder 為例。

AutoEncoder

原始 AutoEncoder

原始的 AutoEncoder 結(jié)構(gòu)很簡(jiǎn)單:Input Layer、Hidden Layer、Output Layer。此網(wǎng)絡(luò)的約束有:

  • Hidden Layer 的維度要遠(yuǎn)小于 Input Layer
  • Output 用于重構(gòu) Input,也即讓誤差最小
  • 于是,可以用 Hidden Layer 中神經(jīng)元組成的向量(這里我們稱為 Code)來表示 Input,就達(dá)到了對(duì) Input 壓縮的效果。AutoEncoder 的訓(xùn)練方式就是普通的 BP。其中,將 Input 壓縮為 Code 的部分稱為 encoder,將 Code 還原為 Input 的部分稱為 decoder。于是,AutoEncoder 的結(jié)構(gòu)可以表示為

    其數(shù)學(xué)表達(dá)式如下,其中、分別表示 encoder 和 decoder

    可以看出,AutoEncoder 其實(shí)是增強(qiáng)的 PCA:AutoEncoder 具有非線性變換單元,因此學(xué)出來的 Code 可能更精煉,對(duì) Input 的表達(dá)能力更強(qiáng)。

    雖然用 AutoEncoder 來壓縮理論上看起來很智能,但是實(shí)際上并不太好用:

  • 由于 AutoEncoder 是訓(xùn)練出來的,故它的壓縮能力僅適用于與訓(xùn)練樣本相似的樣本
  • AutoEncoder 還要求 encoder 和 decoder 的能力不能太強(qiáng)。極端情況下,它們有能力完全記憶住訓(xùn)練樣本,那么 Code 是什么也就不重要了,更不用談壓縮能力了
  • 下面再簡(jiǎn)要介紹一些 AutoEncoder 的擴(kuò)展。

    Sparse AutoEncoder

    Sparse 本身已經(jīng)被研究了很多年了,比如曾輝煌一時(shí)的 Sparse Representation。Sparse AutoEncoder(SAE)其實(shí)就是對(duì) AutoEncoder 的 Code 增加了稀疏的約束。而稀疏具有很多良好的性質(zhì),如:

    • 有降維的效果,可以用于提取主要特征
    • 由于可以抓住主要特征,故具有一定抗噪能力
    • 稀疏的可解釋性好,現(xiàn)實(shí)場(chǎng)景大多滿足這種約束(如“奧卡姆剃刀定律”)

    增加了稀疏約束后的 AutoEncoder 的損失函數(shù)定義如下:

    其中,表示 KL散度,表示網(wǎng)絡(luò)中神經(jīng)元的期望激活程度(若 Activation 為 Sigmoid 函數(shù),此值可設(shè)為 0.05,表示大部分神經(jīng)元未激活),表示第個(gè)神經(jīng)元的平均激活程度。在此處,KL散度 定義如下

    其中,定義為訓(xùn)練樣本集上的平均激活程度,公式如下。其中表示第個(gè)訓(xùn)練樣本

    Denoising AutoEncoder

    Denoising AutoEncoder(DAE)是在“Vincent Extracting and composing robust features with denoising autoencoders, 2008”中提出的。本質(zhì)就是在原樣本中增加噪聲,并期望利用 DAE 將加噪樣本來還原成純凈樣本。

    在文章中,作者以圖像為例,對(duì)圖像中的像素以一定概率遮擋,作為輸入。隨后利用 DAE 進(jìn)行恢復(fù)。由于增加了噪聲,因此學(xué)習(xí)出來的 Code 會(huì)更加穩(wěn)健。其次,論文中還從各種方面(流形、生成模型、信息論等等)對(duì) DAE 進(jìn)行了解釋。但是由于 DAE 應(yīng)用不多,這里就不展開了,有興趣的同學(xué)可以參考原文。

    其他 AutoEncoder

    除了上述的 AutoEncoder,為了學(xué)習(xí)出更加穩(wěn)健,表達(dá)能力更強(qiáng)的 Code,還有其他的 AutoEncoder,如:

    Contrative AutoEncoder(CAE),在文章"Contractive auto-encoders: Explicit invariance during feature extraction, 2011"中提出。其與 DAE 的區(qū)別就在于約束項(xiàng)進(jìn)行了修改,意在學(xué)習(xí)出更加緊湊穩(wěn)健的 Code。

    Stacked AutoEncoder(SAE),在文章“Greedy Layer-Wise Training of Deep Networks, 2007”中提出。作者對(duì)單層 AutoEncoder 進(jìn)行了擴(kuò)展,提出了多層的 AutoEncoder,意在學(xué)習(xí)出對(duì)輸入更抽象、更具擴(kuò)展性的 Code 的表達(dá)。

    除此之外,還有將傳統(tǒng) FNN 網(wǎng)絡(luò)中的結(jié)構(gòu)融入到 AutoEncoder 的,如:Convolutional Autoencoder、 Recursive Autoencoder、 LSTM Autoencoder 等等。

    Autoencoder 期望利用樣本自適應(yīng)學(xué)習(xí)出穩(wěn)健、表達(dá)能力強(qiáng)、擴(kuò)展能力強(qiáng)的 Code 的設(shè)想很好,但是實(shí)際中應(yīng)用場(chǎng)景卻很有限。一般可以用于數(shù)據(jù)的降維、或者輔助進(jìn)行數(shù)據(jù)的可視化分析。有學(xué)者另辟蹊徑,借鑒了 Autoencoder 的思想,將其用于數(shù)據(jù)的生成,取得到驚人的效果,如下面會(huì)介紹的 Variational AutoEncoder。

    Variational AutoEncoder

    Variational AutoEncoder(VAE)是由 Kingma 和 Welling 在“Auto-Encoding Variational Bayes, 2014”中提出的一種生成模型。VAE 作為目前(2017)最流行的生成模型之一,可用于生成訓(xùn)練樣本中沒有的樣本,讓人看到了 Deep Learning 強(qiáng)大的無監(jiān)督學(xué)習(xí)能力。

    如下圖這張廣為人知的“手寫數(shù)字生成圖”,就是由 VAE 產(chǎn)生的。


    判別模型 與 生成模型

    我們都知道一般有監(jiān)督學(xué)習(xí)可以分為兩種模型:判別模型(DM,Discriminative Model)和生成模型(GM,Generative Model)。下面我們以分類問題為例,簡(jiǎn)單回顧一下其概念。

    對(duì)于分類問題,本質(zhì)需要解決的其實(shí)就是最大化后驗(yàn)概率,即

    于是,可以衍生出兩種方案。第一種方法如下:

    由于

    原問題就轉(zhuǎn)化為了求和,這就是生成模型特點(diǎn):需要直接或間接對(duì)建模。常見的生成模型有隱馬爾可夫模型(HMM)、樸素貝葉斯、高斯混合模型(GMM)等等。

    形象一點(diǎn)地表達(dá),即為了求樣本屬于每一類的概率,我們先求解每一類出現(xiàn)的概率;并對(duì)每一類分別建模,求出樣本在該類發(fā)生的概率。最后利用貝葉斯公式算出。

    其二種方法即,我們可以直接對(duì)后驗(yàn)建模,顯性或隱形地求出其表達(dá)式。對(duì)樣本,代入公式求解出每一類的后驗(yàn)概率,取其中最大值即可。這就是判別模型。常見的判別模型有線性回歸模型、支持向量機(jī)(SVM)、神經(jīng)網(wǎng)絡(luò)等等,

    VAE

    VAE 跟傳統(tǒng) AutoEncoder 關(guān)系并不大,只是思想及架構(gòu)上也有 Encoder 和 Decoder 兩個(gè)結(jié)構(gòu)而已。跟 AutoEncoder 不同,VAE 理論跟實(shí)際效果都非常驚艷,理論上涉及到的主要背景知識(shí)也比較多,包括:隱變量(Latent Variable Models)、變分推理(Variational Inference)、Reparameterization Trick 等等。

    由于涉及到的知識(shí)較多,本部分只會(huì)對(duì) VAE 進(jìn)行簡(jiǎn)要介紹,省略很多證明。本部分講解思路參考論文"Tutorial on Variational Autoencoders"和博客“Tutorial - What is a variational autoencoder??”。

    首先,先定義問題:我們希望學(xué)習(xí)出一個(gè)模型,能產(chǎn)生訓(xùn)練樣本中沒有,但與訓(xùn)練集相似的數(shù)據(jù)。換一種說法,對(duì)于樣本空間,當(dāng)以抽取數(shù)據(jù)時(shí),我們希望以較高概率抽取到與訓(xùn)練樣本近似的數(shù)據(jù)。對(duì)于手寫數(shù)字的場(chǎng)景,則表現(xiàn)為生成像手寫數(shù)字的圖像。

    對(duì)于我們期望獲取的數(shù)據(jù),其不同維度之間可能存在特定的聯(lián)系。將這些聯(lián)系對(duì)應(yīng)的因素單獨(dú)抽取出來作為特征,即隱變量(Latent Variables),寫作。則原來對(duì)建模轉(zhuǎn)為對(duì)進(jìn)行建模,同時(shí)有

    其中,是隱變量空間中的點(diǎn),是模型參數(shù)空間中的點(diǎn)。此時(shí)可以分別對(duì)和建模,這就與上面提到的生成模型是一致的,因此 VAE 是無監(jiān)督的生成模型。對(duì)于手寫數(shù)字的場(chǎng)景,隱變量可以理解成圖像對(duì)應(yīng)的真實(shí)數(shù)字、書寫的角度、筆尖寬度等等方面。

    為了計(jì)算這個(gè)積分,首先需要給出的表達(dá)形式。在 VAE 中,作者選擇高斯分布,即

    其中,表示單位矩陣,為超參數(shù)。為將映射到的函數(shù),即。

    此時(shí),還需要給出的表達(dá)式。不過,其中隱變量到底代表什么(對(duì)應(yīng)的數(shù)字、書寫的角度、筆尖寬度等等,難以人工窮舉),以及它們對(duì)應(yīng)的表達(dá)式都是很難人工定義的。這里,作者給出一個(gè)很巧妙的解決方法,即取,同時(shí)利用多層 DNN 來學(xué)習(xí)。當(dāng)然,真實(shí)的隱變量不可能是簡(jiǎn)單的。巧妙之處在于,由于任何維的分布,都可以利用維的高斯分布經(jīng)過某種復(fù)雜函數(shù)變換得到。因此,對(duì)應(yīng)的多層 DNN,前幾層負(fù)責(zé)將高斯分布的映射到真正的隱變量,后幾層負(fù)責(zé)將這個(gè)隱變量映射到。

    接下來我們可以開始解決最大化的問題,公式為

    如果的數(shù)量較少,我們就可以利用采樣來計(jì)算積分,即

    但若現(xiàn)在隱變量維度很大時(shí),就會(huì)需要極大量的樣本,幾乎是不可能計(jì)算的。但是根據(jù)經(jīng)驗(yàn)可以得知,對(duì)大多數(shù)來說,,對(duì)估計(jì)沒有幫助。于是只需要采樣那些對(duì)有貢獻(xiàn)的。此時(shí),就需要知道,但是這個(gè)無法直接求取。VAE 中利用 Variational Inference,引入來近似。

    關(guān)于 Variational Inference,鑒于篇幅不會(huì)展開講,有需要了解的同學(xué)的請(qǐng)參考《PRML》第10章、《Deep Learning》第19章、以及其他教材。

    最終,可以得到需要優(yōu)化的目標(biāo) ELBO(Evidence Lower BOund),此處其定義為

    其中,第一項(xiàng)是我們希望最大化的目標(biāo);第二項(xiàng)是在數(shù)據(jù)下真實(shí)分布與假想分布的距離,當(dāng)?shù)倪x擇合理時(shí)此項(xiàng)會(huì)接近為0。但公式中含有,無法直接求解,于是將其化簡(jiǎn)后得到

    上述公式中每一項(xiàng)的分布如下。其中中參數(shù)和依然利用 DNN 來學(xué)習(xí)

    由于兩個(gè)高斯分布的 KL 距離可以直接計(jì)算,故當(dāng)與中參數(shù)已知時(shí)(通過 DNN 學(xué)習(xí)),就能求解。當(dāng)與很接近時(shí),接近于0,優(yōu)化此式就相當(dāng)于在優(yōu)化我們期望的目標(biāo)。

    概率視角講的差不多了,我們回到 DNN 視角。上述文章已經(jīng)說明了我們需要最大化的目標(biāo)是

    于是,對(duì)于某個(gè)樣本,其損失函數(shù)可以表示為

    其中,意味著將樣本編碼為隱變量,對(duì)應(yīng)于 AutoEncoder 中的 Encoder;意味著將隱變量恢復(fù)成,對(duì)應(yīng)著 Decoder。于是,的意義就可以這樣理解

    第一項(xiàng),表示隱變量對(duì)樣本的重構(gòu)誤差,并在空間內(nèi)取期望,即平均的重構(gòu)誤差。我們的目標(biāo)就是使誤差最小化

    第二項(xiàng),可以理解為正則項(xiàng)。其計(jì)算的是與真實(shí)的差異,表示我們用近似帶來的信息損失。我們也希望這個(gè)信息損失項(xiàng)盡可能的小

    于是,VAE 的結(jié)構(gòu)可以表示為


    但是,上面這種方式需要在 FF 時(shí)進(jìn)行采樣,而這種采樣操作是無法進(jìn)行 BP 的。于是,作者提出一種“Reparameterization Trick”:將對(duì)采樣的操作移到輸入層進(jìn)行。于是就有了下面的 VAE 最終形式



    采樣時(shí),先對(duì)輸入的進(jìn)行采樣,然后計(jì)算間接對(duì)采樣。通過這種方式,就可以利用 BP 來優(yōu)化損失函數(shù)了。

    我們?cè)俳Y(jié)合兩個(gè)圖梳理一下 VAE 的過程。

    下圖表示了 VAE 整個(gè)過程。即首先通過 Encoder 得到的隱變量分布參數(shù);然后采樣得到隱變量。接下來按公式,應(yīng)該是利用 Decoder 求得的分布參數(shù),而實(shí)際中一般就直接利用隱變量恢復(fù)。


    下圖展示了一個(gè)具有3個(gè)隱變量的 VAE 結(jié)構(gòu)示意圖,是對(duì)上面抽象描述的一個(gè)補(bǔ)充說明,不再贅述。



    尾巴

    前幾周由于個(gè)人原因無暇他顧,使本篇拖更良久。近期更新可能仍會(huì)比較緩慢,但我還是會(huì)保持更新,畢竟值得寫的東西太多太多。

    最后關(guān)于 VAE 部分,限于個(gè)人水平、VAE 的難度、篇幅等,本篇未能完全做到足夠清晰明了,其中省略了不少的證明及推理過程。有需要深入研究的同學(xué)建議看完本篇后,再深入閱讀下文中提到的 Paper,才能對(duì) VAE 有更系統(tǒng)的理解。

    Reference

  • 變分自編碼器(VAEs):在對(duì) VAE 結(jié)構(gòu)和原理有大致了解后,對(duì)背后的推導(dǎo)有興趣的同學(xué)可以參考此博客

  • 原文地址:?https://zhuanlan.zhihu.com/p/27865705

    總結(jié)

    以上是生活随笔為你收集整理的当我们在谈论 Deep Learning:AutoEncoder 及其相关模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。