最近一直在看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

[cpp] view plaincopy
  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

saetrain.m

[cpp] view plaincopy
  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

其实就是每一层一个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)相关推荐

  1. 【面向代码】学习 Deep Learning Convolution Neural Network(CNN)

    转载自: [面向代码]学习 Deep Learning(三)Convolution Neural Network(CNN) - DarkScope从这里开始 - 博客频道 - CSDN.NET htt ...

  2. 转【面向代码】学习 Deep Learning(二)Deep Belief Nets(DBNs)

    [面向代码]学习 Deep Learning(二)Deep Belief Nets(DBNs) http://blog.csdn.net/dark_scope/article/details/9447 ...

  3. 深度学习Deep learning:四十一(Dropout简单理解)

    前言 训练神经网络模型时,如果训练样本较少,为了防止模型过拟合,Dropout可以作为一种trikc供选择.Dropout是hintion最近2年提出的,源于其文章Improving neural n ...

  4. 机器学习(Machine Learning)、深度学习(Deep Learning)、NLP面试中常考到的知识点和代码实现

    网址:https://github.com/NLP-LOVE/ML-NLP 此项目是机器学习(Machine Learning).深度学习(Deep Learning).NLP面试中常考到的知识点和代 ...

  5. 机器学习(Machine Learning)深度学习(Deep Learning)资料(Chapter 2)

    机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2) - tony的专栏 - 博客频道 - CSDN.NET 注:机器学习资料篇目一共 ...

  6. 【深度学习Deep Learning】资料大全

    感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! 对商业智能BI.大数据分析挖掘.机器学习, ...

  7. 【github】机器学习(Machine Learning)深度学习(Deep Learning)资料

    转自:https://github.com/ty4z2008/Qix/blob/master/dl.md# <Brief History of Machine Learning> 介绍:这 ...

  8. 机器学习(Machine Learning)深度学习(Deep Learning)资料汇总

    本文来源:https://github.com/ty4z2008/Qix/blob/master/dl.md 机器学习(Machine Learning)&深度学习(Deep Learning ...

  9. 深度学习Deep Learning 资料大全

    转自:http://www.cnblogs.com/charlotte77/ [深度学习Deep Learning]资料大全 最近在学深度学习相关的东西,在网上搜集到了一些不错的资料,现在汇总一下: ...

  10. 机器学习----(Machine Learning)深度学习(Deep Learning)资料(Chapter 1)

    文章转至:作者:yf210yf  感谢您提供的资源 资料汇总的很多,转载一下也方便自己以后慢慢学习 注:机器学习资料篇目一共500条,篇目二开始更新 希望转载的朋友,你可以不用联系我.但是一定要保留原 ...

最新文章

  1. 优秀程序员必须知道的32个算法,提高你的开发效率
  2. 数据结构-js实现栈和队列
  3. .NET程序员走向高端必读书单汇总
  4. Eclipse中看不到jsp的页面效果
  5. 淘到了一个不错的TF卡读卡器
  6. vue 分享微信传参_vue实现微信分享链接添加动态参数的方法
  7. 多线程:CopyOnWriteArrayList
  8. SDUT oj 选拔赛1 迷之好奇
  9. 《C Primer Plus》读书笔记
  10. Linux卸载JDK(虚拟机自带JDK)
  11. JEECG框架的入门学习
  12. 【Love2d从青铜到王者】第四篇:Love2d之LÖVE与移动矩形
  13. 解决Ubuntu18中 A stop job is running for .. 导致关机慢
  14. velodyne+cartographer 2D构建栅格地图
  15. Linux RabbitMQ - CLI tool fails to authenticate with the server
  16. 拼多多订单,商品详情,关键词API接口
  17. 从朴素贝叶斯的角度推导logistic模型
  18. python 高德地图交通态势爬取(存入mysql)
  19. vue 跳转页面删除当前tab
  20. Git 学习笔记 ignore 忽略文件

热门文章

  1. Android的Matrix 2
  2. zabbix安装配置
  3. dis的前缀单词有哪些_学好单词得靠词根词缀来帮忙
  4. Hibernate常用配置
  5. mysql 字段 英文 变 中文_Oracle将英文字符集数据转换成中文
  6. java提取日志sql,通过Java程序抽取日志中的sql语句
  7. VS2012 的快捷键使用
  8. java12安装和配置_JDK12 安装和环境变量配置
  9. 量子计算机与GIS,量子计算机系列---开篇,原理
  10. linux7mysql集群_linux下mysql集群搭建