AutoEncoder訓(xùn)練

關(guān)于AutoEncoder

Deep learning:二十四(stacked autoencoder練習(xí))

Sparse Autoencoder

AutoEncoder是多層神經(jīng)網(wǎng)絡(luò),其中輸入層和輸出層表示相同的含義,具有相同的節(jié)點(diǎn)數(shù)。AutoEncode學(xué)習(xí)的是一個(gè)輸入輸出相同的“恒等函數(shù)”。不過輸入和輸出相同,使得這個(gè)網(wǎng)絡(luò)的輸出沒有任何意義。AutoEncoder的意義在于學(xué)習(xí)的(通常是節(jié)點(diǎn)數(shù)更少的)中間coder層(最中間的那一層),這一層是輸入向量的良好表示。這個(gè)過程起到了“降維”的作用。當(dāng)AutoEncoder只有一個(gè)隱含層的時(shí)候,其原理相當(dāng)于主成分分析(PCA),當(dāng)AutoEncoder有多個(gè)隱含層的時(shí)候,每?jī)蓪又g可以用RBM來pre-training,最后由BP來調(diào)整最終權(quán)值。網(wǎng)絡(luò)權(quán)重更新公式很容易用求偏導(dǎo)數(shù)的方法推導(dǎo)出來,算法是梯度下降法。(RBM:層內(nèi)無連接,層間全連接,二分圖)

Denoising AutoEncoder是AutoEncoder的一個(gè)變種,與AutoEncoder不同的是,Denoising AutoEncoder在輸入的過程中加入了噪聲信息,從而讓AutoEncoder能夠?qū)W習(xí)這種噪聲。

Denoising AutoEncoder與RBM非常像:

(1)參數(shù)一樣:隱含層偏置、顯示層偏置、網(wǎng)絡(luò)權(quán)重

(2)作用一樣:都是輸入的另一種(壓縮)表示

(3)過程類似:都有reconstruct,并且都是reconstruct與input的差別,越小越好

Denoising AutoEncoder與RBM的區(qū)別:

背后原理就不說了(RBM是能量函數(shù)),區(qū)別在于訓(xùn)練準(zhǔn)則。RBM是隱含層“產(chǎn)生”顯示層的概率(通常用log表示),Denoising AutoEncoder是輸入分布與reconstruct分布的KL距離。所用的訓(xùn)練方法,前者是CD-k,后者是梯度下降。RBM固定只有兩層;AutoEncoder,可以有多層,并且這些多層網(wǎng)絡(luò)可以由標(biāo)準(zhǔn)的bp算法來更新網(wǎng)絡(luò)權(quán)重和偏置,與標(biāo)準(zhǔn)神經(jīng)網(wǎng)絡(luò)不同的是,AutoEncoder的輸入層和最終的輸出層是“同一層”,不僅僅是節(jié)點(diǎn)數(shù)目、輸出相同,而是完完全全的“同一層”,這也會(huì)影響到這一層相關(guān)的權(quán)值更新方式??傊斎肱c輸出是同一層,在此基礎(chǔ)上,再由輸入與輸出的差別構(gòu)造準(zhǔn)則函數(shù),再求各個(gè)參數(shù)的偏導(dǎo)數(shù),再用bp方式更新各個(gè)權(quán)重。

【AutoEncoder工程代碼】:相關(guān)Matlab工程代碼主頁(yè):http://www.cs.toronto.edu/~hinton/MatlabForSciencePaper.html

論文:Science – 2006 Science_Reducing the Dimensionality of Data with Neural Networks

(如下所有文件,放到同一個(gè)目錄下)

1). 下載手寫體數(shù)據(jù)MNIST:http://yann.lecun.com/exdb/mnist/, 并在Linux或Windows下進(jìn)行解壓;(60,000 個(gè)訓(xùn)練集 和, 10,000 個(gè)測(cè)試集,數(shù)字手寫體0-9 10類)

train-images-idx3-ubyte.gz: training set images (9912422 bytes)

train-labels-idx1-ubyte.gz: training set labels (28881 bytes)

t10k-images-idx3-ubyte.gz: test set images (1648877 bytes)

t10k-labels-idx1-ubyte.gz: test set labels (4542 bytes)

2). 下載共軛梯度代碼:http://learning.eng.cam.ac.uk/carl/code/minimize/minimize.m

3). 下載AutoEncoder代碼,包括如下13個(gè)Matlab文件:

mnistdeepauto.m //訓(xùn)練AutoEncoder的主文件;

mnistclassify.m //用于訓(xùn)練分類器的主文件;

converter.m //轉(zhuǎn)換MNIST文件為Matlab數(shù)據(jù)格式;

rbm.m //訓(xùn)練RBM二進(jìn)制隱層和二進(jìn)制可視單元;

rbmhidlinear.m //訓(xùn)練RBM高斯隱層和二進(jìn)制可視單元;

backprop.m //進(jìn)行fine-tuning的反向傳播代碼;

backpropclassify.m //利用“Encoder”網(wǎng)絡(luò)進(jìn)行分類的反向傳播;

CG_MNIST.m //Conjugate Gradient optimization for fine-tuning an autoencoder

CG_CLASSIFY_INIT.m //Conjugate Gradient optimization for classification (training top-layer weights while holding low-level weights fixed)

CG_CLASSIFY.m //Conjugate Gradient optimization for classification (training all weights)

makebatches.m //Creates minibatches for RBM training

mnistdisp.m //顯示fine-tuning階段的進(jìn)度;

README.txt //說明文件

4). 在Matlab中執(zhí)行mnistdeepauto.m文件訓(xùn)練autoencoder;我們看一下此文件中大致做了一些什么操作:

maxepoch=10; //RBM學(xué)習(xí)時(shí)的迭代次數(shù)

numhid=1000; numpen=500; numpen2=250; numopen=30; //設(shè)置各個(gè)隱藏層的神經(jīng)元的個(gè)數(shù);這個(gè)程序所采用的網(wǎng)絡(luò)共有四層?!?000 500 250 30】

converter; \\作者提供的二進(jìn)制數(shù)據(jù)需要將原始數(shù)據(jù)文件轉(zhuǎn)換成Matlab數(shù)據(jù)格式

makebatches; \\把大的數(shù)據(jù)塊拆成每塊100個(gè)樣本的小塊 batchdata [樣本數(shù),維數(shù),分塊數(shù)]

//開始四層RBM訓(xùn)練

rbm; \\迭代學(xué)習(xí),分別學(xué)習(xí)到4個(gè)RBM模型,mnisthp.mat,?mnisthp2.mat,?mnistpo.mat,?mnistvh.mat記錄了RBM學(xué)習(xí)到的模型(3個(gè)參數(shù):權(quán)重矩陣W,前向偏移量b,后向偏移量c)

這里有一個(gè)問題,就是W,叫做鏈接權(quán)重矩陣可能更合適一點(diǎn),如果叫做轉(zhuǎn)移矩陣的話,一個(gè)問題就是,為什么P(v=1|h)=sigmod(c+Wv), 而P(h=1|v)=sigmod(b+W’h),這里W是用的轉(zhuǎn)置而不是W的逆?因?yàn)橹庇^上會(huì)有一個(gè)問題就是說 y=Wx的話,那么就應(yīng)該有x=inv(W)y,但是這里確只是用一個(gè)轉(zhuǎn)置,而且正交矩陣才具有此性質(zhì),W’=inv(W). 而其實(shí) 這個(gè)是RBM 能量函數(shù)的性質(zhì),在RBM能量函數(shù)中 v和h 有種偽對(duì)陣性,上述兩式是在能量函數(shù)基礎(chǔ)上計(jì)算條件概率得到的。

backprop; \\反向傳播的訓(xùn)練速度好慢啊。==b,迭代200次估計(jì)需要1天多,我們直接迭代1次跑個(gè)demo,最終反向傳播之后可以學(xué)習(xí)到 w1,w2,w3,w4四個(gè)編碼權(quán)重矩陣及w5,w6,w7,w8四個(gè)解碼權(quán)重矩陣。

5). 若執(zhí)行mnistclassify.m可訓(xùn)練MNIST分類器

6). 代碼中有很多參數(shù)可以進(jìn)行調(diào)節(jié)You can also set various parameters in the code, such as maximum number of epochs, learning rates, network architecture, etc.

Q:DAE 比DBN 好?

【參考】:

1.http://blog.csdn.net/xceman1997/article/details/9392153

2.http://deeplearning.net/

3.http://www.cs.toronto.edu/~hinton/MatlabForSciencePaper.html

4. DeepLearning 工具包匯總http://blog.csdn.net/zouxy09/article/details/11910527

5. DeepLearning 工具包Matlab代碼集合:https://github.com/rasmusbergpalm/DeepLearnToolbox,是丹麥工業(yè)大學(xué)以為碩士期間的工作

6. DeepLearning 工具包C, C++, Java, phython, scala代碼集合,https://github.com/yusugomori/DeepLearning

7. RBM詳解:http://ibillxia.github.io/blog/2013/04/12/Energy-Based-Models-and-Boltzmann-Machines/

【備注源碼注釋】:http://jacoxu.com/?p=692

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 查看原文 1 簡(jiǎn)介 Deep Learning最簡(jiǎn)單的一種方法是利用人工神經(jīng)網(wǎng)絡(luò)的特點(diǎn),人工神經(jīng)網(wǎng)絡(luò)(ANN)本身...
    JinkeyAI閱讀 7,088評(píng)論 0 4
  • 第二個(gè)Topic講深度學(xué)習(xí),承接前面的《淺談機(jī)器學(xué)習(xí)基礎(chǔ)》。 深度學(xué)習(xí)簡(jiǎn)介 前面也提到過,機(jī)器學(xué)習(xí)的本質(zhì)就是尋找最...
    我偏笑_NSNirvana閱讀 16,213評(píng)論 7 49
  • 文章作者:Tyan博客:noahsnail.com | CSDN | 簡(jiǎn)書 聲明:作者翻譯論文僅為學(xué)習(xí),如有侵權(quán)請(qǐng)...
    SnailTyan閱讀 5,480評(píng)論 0 8
  • 今天的心情不知道怎么形容,想買車的愿望很強(qiáng)烈,卻有一種莫名的壓力。 每天都在忙,忙啥呢?連買車的錢都沒有,其實(shí)不是...
    N1115丁麗閱讀 218評(píng)論 0 1
  • 我前世是你湖底的一條魚 今生被你遺忘在沙漠里 不管我怎么掙扎 都無法回到你的心里 我每天汲取著晨露 吮吸著空氣 我...
    瞿靜閱讀 812評(píng)論 0 1

友情鏈接更多精彩內(nèi)容