吴恩达的 CS294A 是一门很好的深度学习入门课程,打算接下来的学习以这个课程的内容为主。UFLDL Tutorial 是 CS294A 课程的 wiki 页,包含了课程讲义和作业。如果你对 监督学习逻辑回归梯度下降 等基础概念并不熟悉,可以先学习 之前的课程

关于课程作业的 Python 代码已经放到了 Github 上,点击 课程代码 就能去 Github 查看( 无法访问 Github 的话可以点击 Coding 查看 ),代码中的错误和改进欢迎大家指出。

稀疏自编码器

大家知道现在深度学习在计算机视觉领域全面开花结果,得到了许多之前无法想象的好结果。而就在这之前大家还要花费很大的精力来人工设计特征。下面要学习的 稀疏自编码器 正是向自动学习特征迈出的第一步。( 下图为作业中的神经网络,左图为输入图像,右图为训练后的输出图像 )

稀疏自编码器 的基本模型是一个三层的神经网络,在学习时让网络输出的目标值接近于输入的图像本身,从而学习图像中的特征。直接学习一个恒等函数的话没有什么意义,所以我们要对隐含层做出一些限制,比如减小神经元的个数,网络就会被迫压缩数据并尝试重建输入图像。当我们加入惩罚让神经元在大部分情况下都不激活的时候,网络能够学习到十分有趣的边缘特征。隐含层的神经元在观察到输入图像中某个特定角度的边缘特征时才会被激活( 这和神经科学发现的人类视觉皮层V1中的神经元的激活方式相似 )。

代价函数

根据机器学习的一般模式,首先给出 稀疏自编码器 的代价函数:


比起熟悉的前两项,代价函数新增了对于隐含层的惩罚,式中 表示隐含层的神经元个数。 表示 隐含层神经元 对于所有训练数据的平均激活度,( 注意这里的 表示一个函数,值为数据 对应的 ), 的目标值,目的就是之前说的让神经元在大多数时间不激活。

按照 Ng 的说法,新的惩罚项有多种函数可以选择,而这里用来衡量 差异的度量为 又称为 相对熵,定义为:


它所度量的是两个概率分布间的距离( 我也不是太懂,有机会再做深入的研究 )。 有了代价函数,接下来看下原先的反向传播算法有什么变化~

梯度下降

在之前 反向传播算法 课程中已经说过它该算法的两个重点,一个是它的目的:更快速地计算代价函数的梯度,另一个是它的计算依赖于多元函数求导的链式法则。

由于代价函数的增加项直接为隐含层的函数,所以隐含层的误差:


其中后一项可化为:


因此 反向传播算法 中的 计算变为:


其余的计算都和原先的算法相同。 搞定代价函数和梯度计算,剩下的就是调用带优化的梯度下降算法了~

可视化

最后稍微提下课程作业,它让我们在 10 张风景图片中随机取 10000 个 8x8 的局部图,然后让稀疏自编码器学习其中的特征。神经网络的隐含层神经元个数为 25,输入输出维度都为 64。下图为每个隐含层神经元对应的输入层权重,大致可看成该神经元检测到这种特征时会被激活。( tip: 作业中的学习算法和梯度检查函数在之前的课程中都写过,因此可以直接拿来用。 )

So~,稀疏自编码器的内容就是这些了,谢谢大家耐心阅读。

P.S. 封面图为猴子视觉皮层 V1 区的方向柱

UFLDL:稀疏自编码器相关推荐

  1. 深度学习入门教程UFLDL学习实验笔记一:稀疏自编码器

     深度学习入门教程UFLDL学习实验笔记一:稀疏自编码器 UFLDL即(unsupervised feature learning & deep learning).这是斯坦福网站上的一篇 ...

  2. Stanford UFLDL教程 稀疏自编码器符号一览表

    稀疏自编码器符号一览表 下面是我们在推导sparse autoencoder时使用的符号一览表: 符号 含义 训练样本的输入特征,. 输出值/目标值. 这里 可以是向量. 在autoencoder中, ...

  3. 深度学习笔记一:稀疏自编码器

    开始学习深度学习了,既然确定目标就要努力前行!为自己加油!--2015.6.11 Sparse Encoder 1.神经网络 概念:假设我们有训练样本集 (x(^ i),y(^ i)) ,那么神经网络 ...

  4. 稀疏自编码器符号一览表

     稀疏自编码器符号一览表 From Ufldl Jump to: navigation, search 下面是我们在推导sparse autoencoder时使用的符号一览表: 符号 含义 训练样 ...

  5. 为什么稀疏自编码器很少见到多层的?

    Andrew Ng 的视频和资料也好,还是网上的资料和代码,以及书上的内容,我很少见到稀疏自编码器是多层的结构一般都是{N,m,N}的三层结构(一层是隐层,输入输出各一层)为什么很少见到例如{N,m, ...

  6. 深度学习入门 ---稀疏自编码器

    在学习稀疏自编码器之前,需要读者有BP神经网络的基础 1. 为什么要用稀疏自编码器   对于没有带类别标签的数据,由于为其增加类别标记是一个非常麻烦的过程,因此我们希望机器能够自己学习到样本中的一些重 ...

  7. [自编码器:理论+代码]:自编码器、栈式自编码器、欠完备自编码器、稀疏自编码器、去噪自编码器、卷积自编码器

    写在前面 因为时间原因本文有些图片自己没有画,来自网络的图片我尽量注出原链接,但是有的链接已经记不得了,如果有使用到您的图片,请联系我,必注释. 自编码器及其变形很多,本篇博客目前主要基于普通自编码器 ...

  8. 稀疏自编码器及TensorFlow实现

    自动编码机更像是一个识别网络,只是简单重构了输入.而重点应是在像素级重构图像,施加的唯一约束是隐藏层单元的数量. 有趣的是,像素级重构并不能保证网络将从数据集中学习抽象特征,但是可以通过添加更多的约束 ...

  9. 稀疏自编码器_自编码(AutoEncoder)模型及几种扩展之二

    4. 稀疏自编码 假设我们只有一个没有类别标签的训练样本集合{x(1),x(2)...},一个自编码神经网络就是一种非监督学习算法,它使用BP算法,并将目标值设为: y(i)=x(i). 我们的目标是 ...

最新文章

  1. 从Asp.net转到Php之调试
  2. ALBERT第一作者亲自讲解:词向量、BERT、ALBERT、XLNet全面解析
  3. asp.net 导入excel显示进度
  4. C#LeetCode刷题之#219-存在重复元素 II​​​​​​​(Contains Duplicate II)
  5. logback-spring.xml
  6. nagios监控安装及设置案例
  7. Linux技术研究-基础篇(启动和自动挂载)
  8. oracle索引大小暴增_oracle海量数据中提升创建索引的速度
  9. python修改csv文件字段顺序_Pandas中DataFrame交换列顺序的方法实现
  10. python gps坐标系utm坐标系等不同坐标系相互转换详细教材
  11. 天猫要做“大”,京东怕不怕?
  12. 在windows下使用cmd命令全速下载百度云文件
  13. oracle扩容temp表空间,解决oracle临时表空间的报错
  14. uni-app H5实现公众号微信授权登入遇到的问题(前端)
  15. 颈椎前路caspar撑开器_Mobi-C人工颈椎间盘在颈前路手术的临床应用
  16. Oracle LOB 详解
  17. 详解JS中三元运算符的语法和常见用法
  18. Codeforces 480D Parcels 动态规划
  19. 怎么做好数据可视化(文末送书)
  20. 【STL容器使用案例】雀魂启动 (map容器\[]重载)

热门文章

  1. 德勤2018TMT八大预测:移动互联网迎来二次革命
  2. 25 张图读懂「文件系统」
  3. 太 6 了!区块链包包、疫情防控大脑……程序员这样玩转区块链!
  4. 桂林机场春运期间新增多条航线航班 实现接力承运无缝衔接
  5. spring之AOP的简单实例
  6. 构建一个给爬虫使用的代理IP池
  7. 团队作业——Alpha冲刺 6/12
  8. Redis和消息队列使用实战
  9. Facebook开源ptr:在Python环境中并行运行单元测试
  10. Cocos2d-x3.2 重力感应