ufldl matlab 工具箱,matlab的Deep Learning的toolbox 中的SAE算法
最近一直在看Deep Learning,各類博客、論文看得不少
但是說實話,這樣做有些疏于實現(xiàn),一來呢自己的電腦也不是很好,二來呢我目前也沒能力自己去寫一個toolbox
只是跟著Andrew Ng的UFLDL tutorial?寫了些已有框架的代碼(這部分的代碼見github)
后來發(fā)現(xiàn)了一個matlab的Deep Learning的toolbox,發(fā)現(xiàn)其代碼很簡單,感覺比較適合用來學(xué)習(xí)算法
再一個就是matlab的實現(xiàn)可以省略掉很多數(shù)據(jù)結(jié)構(gòu)的代碼,使算法思路非常清晰
所以我想在解讀這個toolbox的代碼的同時來鞏固自己學(xué)到的,同時也為下一步的實踐打好基礎(chǔ)
(本文只是從代碼的角度解讀算法,具體的算法理論步驟還是需要去看paper的
我會在文中給出一些相關(guān)的paper的名字,本文旨在梳理一下算法過程,不會深究算法原理和公式)
==========================================================================================
使用的代碼:DeepLearnToolbox? ,下載地址:點擊打開,感謝該toolbox的作者
==========================================================================================
今天介紹的呢是DL另一個非常重要的模型:SAE
把這個放在最后來說呢,主要是因為在UFLDL tutorial?里已經(jīng)介紹得比較詳細了,二來代碼非常簡單(在NN的基礎(chǔ)之上)
先放一張autoencoder的基本結(jié)構(gòu):
基本意思就是一個隱藏層的神經(jīng)網(wǎng)絡(luò),輸入輸出都是x,屬于無監(jiān)督學(xué)習(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,隱藏層的值作為下一層的輸入
各類變形
為了不致于本文內(nèi)容太少。。。現(xiàn)在單獨把它的幾個變形提出來說說
sparse autoencoder:
這就是ufldl講的版本,toolbox中的代碼和ufldl中練習(xí)的部分基本一致:
在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的基礎(chǔ)上,給輸入的x加入噪聲,就相當于dropout用在輸入層
toolbox中的也實現(xiàn)非常簡單:
在nntrain.m中:
batch_x = batch_x.*(rand(size(batch_x))>nn.inputZeroMaskedFraction)
也就是隨即把大小為(nn.inputZeroMaskedFraction)的一部分x賦成0,denoising autoencoder的表現(xiàn)好像比sparse autoencoder要強一些
Contractive Auto-Encoders:
這篇論文里也總結(jié)了一下autoencoder,感覺很不錯
Contractive autoencoders的模型是:
其中:
?hj是表示hidden layer的函數(shù),用它對x求導(dǎo)
論文里說:這個項是
encourages the mapping to the feature space to be contractive in the neighborhood of the training data
具體的實現(xiàn)呢是:
代碼呢參看:論文作者提供的:點擊打開鏈接
主要是
jacobian(self,x):
_jacobi_loss():
_fit_reconstruction():
這幾個函數(shù)和autoencoder有出入,其實也比較簡單,就不細講了
總結(jié):
總的來說,autoencoder感覺是DL中比較好理解的一部分,所以介紹內(nèi)容不長
可能你也發(fā)現(xiàn)了,Toolbox里還有一個文件夾叫CAE,不過這個CAE是Convolutional Auto-Encoders
總結(jié)
以上是生活随笔為你收集整理的ufldl matlab 工具箱,matlab的Deep Learning的toolbox 中的SAE算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java不抛出方法异常,java – 重
- 下一篇: matlab上位机串口通信,MATLAB