matlab的Deep Learning的toolbox 中的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有出入,其实也比较简单,就不细讲了
总结:
matlab的Deep Learning的toolbox 中的SAE算法的更多相关文章
- [Deep Learning] 深度学习中消失的梯度
好久没有更新blog了,最近抽时间看了Nielsen的<Neural Networks and Deep Learning>感觉小有收获,分享给大家. 了解深度学习的同学可能知道,目前深度 ...
- (3)Deep Learning之神经网络和反向传播算法
往期回顾 在上一篇文章中,我们已经掌握了机器学习的基本套路,对模型.目标函数.优化算法这些概念有了一定程度的理解,而且已经会训练单个的感知器或者线性单元了.在这篇文章中,我们将把这些单独的单元按照一定 ...
- 李宏毅机器学习笔记4:Brief Introduction of Deep Learning、Backpropagation(后向传播算法)
李宏毅老师的机器学习课程和吴恩达老师的机器学习课程都是都是ML和DL非常好的入门资料,在YouTube.网易云课堂.B站都能观看到相应的课程视频,接下来这一系列的博客我都将记录老师上课的笔记以及自己对 ...
- Deep Learning基础--word2vec 中的数学原理详解
word2vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包,它简单.高效,因此引起了很多人的关注.由于 word2vec 的作者 Tomas Miko ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现
https://blog.csdn.net/zouxy09/article/details/9993371 自己平时看了一些论文,但老感觉看完过后就会慢慢的淡忘,某一天重新拾起来的时候又好像没有看过一 ...
- 转【面向代码】学习 Deep Learning(二)Deep Belief Nets(DBNs)
[面向代码]学习 Deep Learning(二)Deep Belief Nets(DBNs) http://blog.csdn.net/dark_scope/article/details/9447 ...
- 【面向代码】学习 Deep Learning(三)Convolution Neural Network(CNN)
========================================================================================== 最近一直在看Dee ...
- Deep learning:四十二(Denoise Autoencoder简单理解)
前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...
随机推荐
- JavaScript浏览器解析原理
首先,JavaScript的特点是: 1. 跨平台 可以再不同的操作系统上运行. 2. 弱类型 与之相对的是强类型 强类型:在定义变量的时候,需要将变量的数据类型表明.例如:Java 弱类型:定义变量 ...
- CSS3_多列布局
CSS3 多列布局 可以随屏幕大小自适应布局 能够创建多个列对文本进行布局 属性 column-count: 5; 将文本分成 5 列 注意: 用户的屏幕大小 column-fill: bala ...
- (87)Wangdao.com第二十天_JavaScript document 节点对象
document 节点对象, 代表整个文档,每张网页都有自己的 document 对象. window.document 当浏览器开始加载文档时就存在了 正常的网页使用 document 或者 win ...
- 解决ajax 跨域请求问题
浏览器console报错: has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is 解决: 服务端加入代 ...
- Docker简介以及使用docker搭建lnmp的过程(多PHP版本)
一.Docker基础 Docker安装 Docker 要求 Ubuntu 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的 Ubuntu 版本是否支持 Docker. 通过 uname ...
- Gparted Live分区调整
由于年少无知,在安装ubuntu系统的时候,以为/temp是软件包安装时解压的缓冲,所以给/temp留了10G,而以为/var只是记录一些log而已,因此把仅存的1G分配给了它.随后在安装软件时出现“ ...
- 查看webdriver API
pydoc是Python自带的模块,主要用于从python模块中自动生成文档 生成web页面文档: cmd->python -m pydoc -p 8888 -p:在本机上启动服务 8888:端 ...
- 换目标啦,初识PHP
一.初识PHP脚步程序 1.PHP开始标记 <?php 2.PHP结束标记 ?> <?php?> 3.我们的页面最终是通过html,css,js来展示出一个炫丽的界面 4.PH ...
- Fiddler死活抓不了HTTPS包解决办法
Fiddler抓取HTTPS设置注意以下操作的前提是,手机已经能够连上Fiddler,这部分的配置过程简单就不赘述了,可参考:手机如何连接Fiddler . 如何继续配置让Fiddler抓取到HTTP ...
- go 学习第一个hello world 遇到的问题
mac:Go安装和配置+GoLand安装和使用之完整教程 https://blog.csdn.net/zxy_666/article/details/80182688 前言作为一个go语言程序员,觉得 ...