【面向代码】学习 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(四) Stacked Auto-Encoders(SAE)相关推荐
- 【面向代码】学习 Deep Learning Convolution Neural Network(CNN)
转载自: [面向代码]学习 Deep Learning(三)Convolution Neural Network(CNN) - DarkScope从这里开始 - 博客频道 - CSDN.NET htt ...
- 转【面向代码】学习 Deep Learning(二)Deep Belief Nets(DBNs)
[面向代码]学习 Deep Learning(二)Deep Belief Nets(DBNs) http://blog.csdn.net/dark_scope/article/details/9447 ...
- 深度学习Deep learning:四十一(Dropout简单理解)
前言 训练神经网络模型时,如果训练样本较少,为了防止模型过拟合,Dropout可以作为一种trikc供选择.Dropout是hintion最近2年提出的,源于其文章Improving neural n ...
- 机器学习(Machine Learning)、深度学习(Deep Learning)、NLP面试中常考到的知识点和代码实现
网址:https://github.com/NLP-LOVE/ML-NLP 此项目是机器学习(Machine Learning).深度学习(Deep Learning).NLP面试中常考到的知识点和代 ...
- 机器学习(Machine Learning)深度学习(Deep Learning)资料(Chapter 2)
机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2) - tony的专栏 - 博客频道 - CSDN.NET 注:机器学习资料篇目一共 ...
- 【深度学习Deep Learning】资料大全
感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! 对商业智能BI.大数据分析挖掘.机器学习, ...
- 【github】机器学习(Machine Learning)深度学习(Deep Learning)资料
转自:https://github.com/ty4z2008/Qix/blob/master/dl.md# <Brief History of Machine Learning> 介绍:这 ...
- 机器学习(Machine Learning)深度学习(Deep Learning)资料汇总
本文来源:https://github.com/ty4z2008/Qix/blob/master/dl.md 机器学习(Machine Learning)&深度学习(Deep Learning ...
- 深度学习Deep Learning 资料大全
转自:http://www.cnblogs.com/charlotte77/ [深度学习Deep Learning]资料大全 最近在学深度学习相关的东西,在网上搜集到了一些不错的资料,现在汇总一下: ...
- 机器学习----(Machine Learning)深度学习(Deep Learning)资料(Chapter 1)
文章转至:作者:yf210yf 感谢您提供的资源 资料汇总的很多,转载一下也方便自己以后慢慢学习 注:机器学习资料篇目一共500条,篇目二开始更新 希望转载的朋友,你可以不用联系我.但是一定要保留原 ...
最新文章
- 优秀程序员必须知道的32个算法,提高你的开发效率
- 数据结构-js实现栈和队列
- .NET程序员走向高端必读书单汇总
- Eclipse中看不到jsp的页面效果
- 淘到了一个不错的TF卡读卡器
- vue 分享微信传参_vue实现微信分享链接添加动态参数的方法
- 多线程:CopyOnWriteArrayList
- SDUT oj 选拔赛1 迷之好奇
- 《C Primer Plus》读书笔记
- Linux卸载JDK(虚拟机自带JDK)
- JEECG框架的入门学习
- 【Love2d从青铜到王者】第四篇:Love2d之LÖVE与移动矩形
- 解决Ubuntu18中 A stop job is running for .. 导致关机慢
- velodyne+cartographer 2D构建栅格地图
- Linux RabbitMQ - CLI tool fails to authenticate with the server
- 拼多多订单,商品详情,关键词API接口
- 从朴素贝叶斯的角度推导logistic模型
- python 高德地图交通态势爬取(存入mysql)
- vue 跳转页面删除当前tab
- Git 学习笔记 ignore 忽略文件