博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转帖】【面向代码】学习 Deep Learning(四) Stacked Auto-Encoders(SAE)
阅读量:6302 次
发布时间:2019-06-22

本文共 2270 字,大约阅读时间需要 7 分钟。

今天介绍的呢是DL另一个非常重要的模型:SAE

把这个放在最后来说呢,主要是因为在 里已经介绍得比较详细了,二来代码非常简单(在NN的基础之上)

先放一张autoencoder的基本结构:

基本意思就是一个隐藏层的神经网络,输入输出都是x,属于无监督学习

==========================================================================================

基本代码

saesetup.m

 

[cpp]
  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  
function sae = saesetup(size)    for u = 2 : numel(size)        sae.ae{u-1} = nnsetup([size(u-1) size(u) size(u-1)]);    endend

saetrain.m

 

 

[cpp]
  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  
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);    endend

其实就是每一层一个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:

   这个变形呢是《》提出的

   这篇论文里也总结了一下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
参考,以后有时间再学习一下~

转载于:https://www.cnblogs.com/daleloogn/p/4162495.html

你可能感兴趣的文章
堆排序算法
查看>>
folders.cgi占用系统大量资源
查看>>
路由器ospf动态路由配置
查看>>
zabbix监控安装与配置
查看>>
python 异常
查看>>
last_insert_id()获取mysql最后一条记录ID
查看>>
可执行程序找不到lib库地址的处理方法
查看>>
bash数组
查看>>
Richard M. Stallman 给《自由开源软件本地化》写的前言
查看>>
oracle数据库密码过期报错
查看>>
修改mysql数据库的默认编码方式 .
查看>>
zip
查看>>
How to recover from root.sh on 11.2 Grid Infrastructure Failed
查看>>
rhel6下安装配置Squid过程
查看>>
微软职位内部推荐-Service Engineer II for Azure Cloud Network
查看>>
Kali linux 2016.2(Rolling)中的auxiliary模块详解
查看>>
Silverlight实用窍门系列:25.Silverlight多线程技术Timer的应用,模拟心电图、模拟CPU、内存状态图【附带源码实例】...
查看>>
ASP.NET 2.0 XML 系列(2): XML技术
查看>>
selenium + python自动化测试环境搭建
查看>>
关于Eclipse的Save时的自定义操作
查看>>