【面向程式碼】學習 Deep Learning(四) Stacked Auto-Encoders(SAE)
==========================================================================================
最近一直在看Deep Learning,各類部落格、論文看得不少
但是說實話,這樣做有些疏於實現,一來呢自己的電腦也不是很好,二來呢我目前也沒能力自己去寫一個toolbox
只是跟著Andrew Ng的UFLDL tutorial 寫了些已有框架的程式碼(這部分的程式碼見github)
後來發現了一個matlab的Deep Learning的toolbox,發現其程式碼很簡單,感覺比較適合用來學習演算法
再一個就是matlab的實現可以省略掉很多資料結構的程式碼,使演算法思路非常清晰
所以我想在解讀這個toolbox的程式碼的同時來鞏固自己學到的,同時也為下一步的實踐打好基礎
(本文只是從程式碼的角度解讀演算法,具體的演算法理論步驟還是需要去看paper的
我會在文中給出一些相關的paper的名字,本文旨在梳理一下演算法過程,不會深究演算法原理和公式)
==========================================================================================
使用的程式碼:DeepLearnToolbox ,下載地址:點選開啟,感謝該toolbox的作者
==========================================================================================
今天介紹的呢是DL另一個非常重要的模型:SAE
把這個放在最後來說呢,主要是因為在UFLDL tutorial 裡已經介紹得比較詳細了,二來程式碼非常簡單(在NN的基礎之上)
先放一張autoencoder的基本結構:
基本意思就是一個隱藏層的神經網路,輸入輸出都是x,屬於無監督學習
==========================================================================================
基本程式碼
saesetup.m
function sae = saesetup(size)
for u = 2 : numel(size)
sae.ae{u-1} = nnsetup([size(u-1) size(u) size(u-1)]);
end
end
saetrain.m
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);
end
end
其實就是每一層一個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有出入,其實也比較簡單,就不細講了
總結:
相關文章
- 【面向程式碼】學習 Deep Learning(二)Deep Belief Nets(DBNs)
- 【面向程式碼】學習 Deep Learning(三)Convolution Neural Network(CNN)CNN
- 深度學習(Deep Learning)深度學習
- 《DEEP LEARNING·深度學習》深度學習
- 深度學習 DEEP LEARNING 學習筆記(一)深度學習筆記
- 深度學習 DEEP LEARNING 學習筆記(二)深度學習筆記
- 機器學習(Machine Learning)&深度學習(Deep Learning)資料機器學習Mac深度學習
- 深度學習(Deep Learning)優缺點深度學習
- Deep Learning(深度學習)學習筆記整理系列深度學習筆記
- 顯示卡不是你學習 Deep Learning 的藉口
- 深度學習模型調優方法(Deep Learning學習記錄)深度學習模型
- Deep Learning(深度學習)學習筆記整理系列之(一)深度學習筆記
- 《深度學習》PDF Deep Learning: Adaptive Computation and Machine Learning series深度學習APTMac
- 貝葉斯深度學習(bayesian deep learning)深度學習
- Deep Reinforcement Learning 深度增強學習資源
- 【深度學習】大牛的《深度學習》筆記,Deep Learning速成教程深度學習筆記
- Searching with Deep Learning 深度學習的搜尋應用深度學習
- 文章學習29“Crafting a Toolchain for Image Restoration by Deep Reinforcement Learning”RaftAIREST
- Neural Networks and Deep Learning(神經網路與深度學習) - 學習筆記神經網路深度學習筆記
- Coursera Deep Learning 4 卷積神經網路 第四周習題卷積神經網路
- deep learning深度學習之學習筆記基於吳恩達coursera課程深度學習筆記吳恩達
- Deep Learning with Differential Privacy
- 強化學習(九)Deep Q-Learning進階之Nature DQN強化學習
- 林軒田機器學習技法課程學習筆記13 — Deep Learning機器學習筆記
- 剛剛,阿里開源首個深度學習框架 X-Deep Learning!阿里深度學習框架
- DQN(Deep Q-learning)入門教程(四)之Q-learning Play Flappy BirdAPP
- 深度互學習-Deep Mutual Learning:三人行必有我師
- 林倞:Beyond Supervised Deep Learning--後深度學習時代的挑戰深度學習
- Deep learning:五十一(CNN的反向求導及練習)CNN求導
- Join Query Optimization with Deep Reinforcement Learning AlgorithmsGo
- [Deep Learning] 神經網路基礎神經網路
- Deep Learning 優化方法總結優化
- 深度學習FPGA實現基礎知識6(Deep Learning(深度學習)學習資料大全及CSDN大牛部落格推薦)深度學習FPGA
- 《深度學習入門:基於Python的理論與實現》 Deep Learning from Scratch深度學習Python
- Ranked List Loss for Deep Metric Learning | 論文分享
- DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ | TENSORSPyTorch
- Deep Transfer Learning綜述閱讀筆記筆記
- Udacity Deep Learning課程作業(一)