Deep Learning 学习笔记(8):自编码器( Autoencoders )
之前的笔记,算不上是 Deep Learning,
只是为理解Deep Learning 而需要学习的基础知识,
从下面开始,我会把我学习UFDL的笔记写出来
#主要是给自己用的,所以其他人不一定看得懂#
UFDL链接 : http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial
自编码器( Autoencoders ):(概述)
自编码器是只有一层隐藏节点,输入和输出具有相同节点数的神经网络。
自编码器的目的是求的函数 . 也就是希望是的神经网络的输出与输入误差尽量少。
由于隐藏节点数目小于输入节点,
这就表示神经网络需要学习到输入样本的特征,以便进行压缩表示。
如果输入样本是完全混乱的,这将会十分困难。
但是当输入样本具有一定相似性(比如都是汽车),神经网络将会学习到其中的共同特征(比如车窗,车轮)
这种学习是半监督的(样本无标签,但是经过了筛选)。
自编码器(autoencoder):
如图是一个自编码器(autoencoder),不算偏置节点的话,输入输出节点相同。
节点函数是sigmoid,用之前讲到的反向传播算法对其进行训练,
训练的结果,出来后,我们对W1进行可视化表示,便是数据的压缩特征。
(注意,由于输出节点是sigmoid,输入数据的范围必须在 [ 0, 1] 内)
(常用激活函数有:sigmoid、tanh、max(x,0))
稀疏性:(直接粘贴自UFDL)
如果隐藏节点比可视节点(输入、输出)少的话,由于被迫的降维,自编码器会自动习得训练样本的特征(变化最大,信息量最多的维度)。但是如果隐藏节点数目过多,甚至比可视节点数目还多的时候,自编码器不仅会丧失这种能力,更可能会习得一种“恒等函数”——直接把输入复制过去作为输出。这时候,我们需要对隐藏节点进行稀疏性限制。
所谓稀疏性,就是对一对输入图像,隐藏节点中被激活的节点数(输出接近1)远远小于被抑制的节点数目(输出接近0)。那么使得神经元大部分的时间都是被抑制的限制则被称作稀疏性限制。
注意到 表示隐藏神经元 的激活度,但是这一表示方法中并未明确指出哪一个输入 带来了这一激活度。所以我们将使用 来表示在给定输入为 情况下,自编码神经网络隐藏神经元 的激活度。 进一步,让
表示隐藏神经元 的平均活跃度(在训练集上取平均)。我们可以近似的加入一条限制
其中, 是稀疏性参数,通常是一个接近于0的较小的值(比如 )。换句话说,我们想要让隐藏神经元 的平均活跃度接近0.05。为了满足这一条件,隐藏神经元的活跃度必须接近于0。
为了实现这一限制,我们将会在我们的优化目标函数中加入一个额外的惩罚因子,而这一惩罚因子将惩罚那些 和 有显著不同的情况从而使得隐藏神经元的平均活跃度保持在较小范围内。惩罚因子的具体形式有很多种合理的选择,我们将会选择以下这一种:
这里, 是隐藏层中隐藏神经元的数量,而索引 依次代表隐藏层中的每一个神经元。如果你对相对熵(KL divergence)比较熟悉,这一惩罚因子实际上是基于它的。于是惩罚因子也可以被表示为
其中 是一个以 为均值和一个以 为均值的两个伯努利随机变量之间的相对熵。相对熵是一种标准的用来测量两个分布之间差异的方法。(如果你没有见过相对熵,不用担心,所有你需要知道的内容都会被包含在这份笔记之中。)
这一惩罚因子有如下性质,当 时 ,并且随着 与 之间的差异增大而单调递增。举例来说,在下图中,我们设定 并且画出了相对熵值 随着 变化的变化。
我们可以看出,相对熵在 时达到它的最小值0,而当 靠近0或者1的时候,相对熵则变得非常大(其实是趋向于)。所以,最小化这一惩罚因子具有使得 靠近 的效果。 现在,我们的总体代价函数可以表示为
其中 如之前所定义,而 控制稀疏性惩罚因子的权重。 项则也(间接地)取决于 ,因为它是隐藏神经元 的平均激活度,而隐藏层神经元的激活度取决于 。
为了对相对熵进行导数计算,我们可以使用一个易于实现的技巧,这只需要在你的程序中稍作改动即可。具体来说,前面在后向传播算法中计算第二层( )更新的时候我们已经计算了
现在我们将其换成
就可以了。
Deep Learning 学习笔记(8):自编码器( Autoencoders )的更多相关文章
- 【deep learning学习笔记】注释yusugomori的DA代码 --- dA.h
DA就是“Denoising Autoencoders”的缩写.继续给yusugomori做注释,边注释边学习.看了一些DA的材料,基本上都在前面“转载”了.学习中间总有个疑问:DA和RBM到底啥区别 ...
- 【Deep Learning学习笔记】Dynamic Auto-Encoders for Semantic Indexing_Mirowski_NIPS2010
发表于NIPS2010 workshop on deep learning的一篇文章,看得半懂. 主要内容: 是针对文本表示的一种方法.文本表示可以进一步应用在文本分类和信息检索上面.通常,一篇文章表 ...
- [置顶]
Deep Learning 学习笔记
一.文章来由 好久没写原创博客了,一直处于学习新知识的阶段.来新加坡也有一个星期,搞定签证.入学等杂事之后,今天上午与导师确定了接下来的研究任务,我平时基本也是把博客当作联机版的云笔记~~如果有写的不 ...
- 【deep learning学习笔记】Recommending music on Spotify with deep learning
主要内容: Spotify是个类似酷我音乐的音乐站点.做个性化音乐推荐和音乐消费.作者利用deep learning结合协同过滤来做音乐推荐. 详细内容: 1. 协同过滤 基本原理:某两个用户听的歌曲 ...
- 【deep learning学习笔记】注释yusugomori的RBM代码 --- 头文件
百度了半天yusugomori,也不知道他是谁.不过这位老兄写了deep learning的代码,包括RBM.逻辑回归.DBN.autoencoder等,实现语言包括c.c++.java.python ...
- Neural Networks and Deep Learning学习笔记ch1 - 神经网络
近期開始看一些深度学习的资料.想学习一下深度学习的基础知识.找到了一个比較好的tutorial,Neural Networks and Deep Learning,认真看完了之后觉得收获还是非常多的. ...
- paper 149:Deep Learning 学习笔记(一)
1. 直接上手篇 台湾李宏毅教授写的,<1天搞懂深度学习> slideshare的链接: http://www.slideshare.net/tw_dsconf/ss-62245351? ...
- Deep Learning 学习笔记——第9章
总览: 本章所讲的知识点包括>>>> 1.描述卷积操作 2.解释使用卷积的原因 3.描述pooling操作 4.卷积在实践应用中的变化形式 5.卷积如何适应输入数据 6.CNN ...
- 【deep learning学习笔记】最近读的几个ppt(四)
这几个ppt都是在微博上看到的,是百度的一个员工整理的. <Deep Belief Nets>,31页的一个ppt 1. 相关背景 还是在说deep learning好啦,如特征表示云云. ...
随机推荐
- Qt事件系统基本概念
(转自:http://www.cnblogs.com/andy1987/p/3322059.html) 1. QT事件系统 Qt应用程序的消息处理是基于事件驱动的,程序的每个动作都是由某个事件所触发的 ...
- react login page demo
1. login form import React from "react"; import {Row, Col} from "antd"; import { ...
- DRF 返回数据的封装,和分页
DRF 返回数据的封装,和分页 1 返回值的 封装 自定义一个类,初始化基本的返回数据信息 class BaseResponse(object): """ 初始化基本的返 ...
- jdk1.8 HashMap 实现 数组+链表/红黑树
转载至 http://www.cnblogs.com/leesf456/p/5242233.html 一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Ja ...
- 前端之JavaScript 补充
1. BOM window location.href = "https://www.sogo.com" location.reload() // 重新加载当前页 location ...
- 关于public static void main(String[] args)相关知识
main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同.比如方法的名字必须是main,方法必须是public ...
- HDU - 5728:PowMod (欧拉函数&指数循环节)
Declare: k=∑ m i=1 φ(i∗n) mod 1000000007 k=∑i=1mφ(i∗n) mod 1000000007 n n is a square-free number. φ ...
- intellij idea 如何更改比编辑器文本字体和大小
换上了intellij idea之后,第一件事就是想要改变下文字字体,因为在我这个27寸的2k分辨率的屏幕上,文字显然太小了. intellij idea字体设值分成两部分,一部分是UI部分字体字号设 ...
- numpy 矩阵相关函数
我们 知道,矩阵在python里面用的不少,所以记载下关于矩阵的操作 numpy.zeros():可以用来构造全零矩阵 >>> zeros(3) array([ 0., 0., ...
- Asp.net页面间传值方式汇总
七种传值方式,分别是:URL传值,Session传值,Cookie传值,Server.Transfer传值,Application传值,利用某些控件的PostBackUrl属性和使用@Previous ...