【轉帖】【面向代碼】學習 Deep Learning(四) Stacked Auto-Encoders(SAE)

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   color   os   使用   sp   

今天介紹的呢是DL另一個非常重要的模型:SAE

把這個放在最後來說呢,主要是因為在UFLDL tutorial 裡已經介紹得比較詳細了,二來代碼非常簡單(在NN的基礎之上)

先放一張autoencoder的基本結構:

基本意思就是一個隱藏層的神經網路,輸入輸出都是x,屬於無監督學習

==========================================================================================

基本代碼

saesetup.m

 

[cpp] view plaincopyprint?
  1. function sae = saesetup(size)  
  2.     for u = 2 : numel(size)  
  3.         sae.ae{u-1} = nnsetup([size(u-1) size(u) size(u-1)]);  
  4.     end  
  5. end  
function sae = saesetup(size)    for u = 2 : numel(size)        sae.ae{u-1} = nnsetup([size(u-1) size(u) size(u-1)]);    endend

saetrain.m

 

 

[cpp] view plaincopyprint?
  1. function sae = saetrain(sae, x, opts)  
  2.     for i = 1 : numel(sae.ae);  
  3.         disp([‘Training AE ‘ num2str(i) ‘/‘ num2str(numel(sae.ae))]);  
  4.         sae.ae{i} = nntrain(sae.ae{i}, x, x, opts);  
  5.         t = nnff(sae.ae{i}, x, x);  
  6.         x = t.a{2};  
  7.         %remove bias term  
  8.         x = x(:,2:end);  
  9.     end  
  10. end  
function sae = saetrain(sae, x, opts)    for i = 1 : numel(sae.ae);        disp([‘Training AE ‘ num2str(i) ‘/‘ num2str(numel(sae.ae))]);        sae.ae{i} = nntrain(sae.ae{i}, x, x, opts);        t = nnff(sae.ae{i}, x, x);        x = t.a{2};        %remove bias term        x = x(:,2:end);    endend

其實就是每一層一個autoencoder,隱藏層的值作為下一層的輸入

 

 

各類變形

    為了不致於本文內容太少。。。現在單獨把它的幾個變形提出來說說

  sparse autoencoder:

   

   這就是ufldl講的版本,toolbox中的代碼和ufldl中練習的部分基本一致:

   在nnff.m中使用:nn.p{i} = 0.99 * nn.p{i} + 0.01 * mean(nn.a{i}, 1);計算

   在nnbp.m中使用

     pi = repmat(nn.p{i}, size(nn.a{i}, 1), 1); 

     sparsityError = [zeros(size(nn.a{i},1),1) nn.nonSparsityPenalty * (-nn.sparsityTarget ./ pi + (1 - nn.sparsityTarget) ./ (1 - pi))];

 

   計算sparsityError即可

 denoising autoencoder:

   denoising其實就是在autoencoder的基礎上,給輸入的x加入雜訊,就相當於dropout用在輸入層

   toolbox中的也實現非常簡單:

   在nntrain.m中:

      batch_x = batch_x.*(rand(size(batch_x))>nn.inputZeroMaskedFraction)

   也就是隨即把大小為(nn.inputZeroMaskedFraction)的一部分x賦成0,denoising autoencoder的表現好像比sparse autoencoder要強一些

Contractive Auto-Encoders:

   這個變形呢是《Contractive auto-encoders: Explicit invariance during feature extraction》提出的

   這篇論文裡也總結了一下autoencoder,感覺很不錯

    Contractive autoencoders的模型是:

     

    其中:

       hj是表示hidden layer的函數,用它對x求導

    論文裡說:這個項是

         encourages the mapping to the feature space to be contractive in the neighborhood of the training data

     具體的實現呢是:

        

     代碼呢參看:論文作者提供的:點擊開啟連結

      主要是

jacobian(self,x):

_jacobi_loss():

_fit_reconstruction():

這幾個函數和autoencoder有出入,其實也比較簡單,就不細講了

總結: 總的來說,autoencoder感覺是DL中比較好理解的一部分,所以介紹內容不長可能你也發現了,Toolbox裡還有一個檔案夾叫CAE,不過這個CAE是Convolutional Auto-Encoders參考http://www.idsia.ch/~ciresan/data/icann2011.pdf,以後有時間再學習一下~

【轉帖】【面向代碼】學習 Deep Learning(四) Stacked Auto-Encoders(SAE)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.