稀疏自动编码之可视化自动编码器

对于训练出的一个稀疏自动编码器,现在想看看学习出的函数到底是什么样子。对于训练一个的图像,.计算每一个隐层节点    的输出值:

我们要可视化的函数,就是这个以一副2D图像为输入,以 为参数(忽略偏置项),由隐层节点  计算出来的函数。特别是,我们把  看作是输入  的非线性特征。我们很想知道:什么样的的图像  能使得  成为最大程度的激励? 还有一个问题,就是必须对  加上约束。如果假设输入的范数约束是,可以证明,能够使得隐层神经元得到最大程度激活的像素输入   (所有100个像素点,):

展示出由这些像素灰度值的构成的图像,我们就可以看到隐层节点学习出了什么样的特征。

如果训练出一个含有100个隐层节点的自动编码器,那么我们可视化将会产生100幅图像(每个隐层节点对应一幅)。通过测试这100幅图像,试着理解隐层学习出的整体效果。

下面给出了一个稀疏编码器(100个隐层节点,输入是的图像)学习出的结果:

上图的每个小方块都给出了一个输入图像,它可使这100个隐藏单元(隐层节点)中的某一个获得最大激励。我们可以看到,不同的隐藏单元学会了在图像的不同位置和方向进行边缘检测。这些特征对于物体识别和其他视觉学习任务很有用。当应用到其他领域(如音频),这个算法同样可以学习出很有用的表示或者特征。

学习来源:http://deeplearning.stanford.edu/wiki/index.php/Visualizing_a_Trained_Autoencoder

时间: 2024-10-30 23:06:52

稀疏自动编码之可视化自动编码器的相关文章

稀疏自动编码之自动编码器和稀疏性

到目前为止,已经叙述了神经网络的监督学习,即学习的样本都是有标签的.现在假设我们有一个没有标签的训练集,其中. 自动编码器就是一个运用了反向传播进行无监督学习的神经网络,学习的目的就是为了让输出值和输入值相等,即.下面就是一个自动编码器: 自动编码器试图学习一个函数. 换句话说,它试图逼近一个等式函数,使得该函数的输出  和输入  很近似.举一个具体的例子,假设输入  是来自一个  图像(共100个像素点)像素点的灰度值,在  层有  个隐层节点. 注意输出 . 由于隐层节点只有50个,所以网络

稀疏自动编码之反向传播算法(BP)

假设给定m个训练样本的训练集,用梯度下降法训练一个神经网络,对于单个训练样本(x,y),定义该样本的损失函数: 那么整个训练集的损失函数定义如下: 第一项是所有样本的方差的均值.第二项是一个归一化项(也叫权重衰减项),该项是为了减少权连接权重的更新速度,防止过拟合. 我们的目标是最小化关于 W 和 b 的函数J(W,b). 为了训练神经网络,把每个参数 和初始化为很小的接近于0的随机值(例如随机值由正态分布Normal(0,ε2)采样得到,把 ε 设为0.01), 然后运用批量梯度下降算法进行优

稀疏自动编码之梯度检验

众所周知,反向传播算法很难调试和得到正确结果,特别是在执行过程中存在许多细小难以察觉的错误.这里介绍一种方法来确定代码中导数的计算是否正确.使用这里所述求导检验方法,可以帮助提升写正确代码的信心. 假设我们想最小化关于  的函数   . 对于这个例子,假设 ,所以 . 在一维空间,梯度下降的一次迭代公式如下: 假设我们已经实现了某个函数  去计算 ,那么梯度下降时参数更新就可以这样:. 该如何检验我们编写的函数  是正确的呢? 回忆导数的定义: 对于任意的  ,可以用如下公式来从数值上近似导数值

稀疏自动编码之练习

从10幅图像中采样出10000幅小图像块,每个小图像块大小是8*8,利用采样出的图像作为样本学习,利用LBFGS进行优化. 下面是对10幅图像白化之后的结果: train.m %% CS294A/CS294W Programming Assignment Starter Code % Instructions % ------------ % % This file contains code that helps you get started on the % programming ass

稀疏自动编码之神经网络

考虑一个监督学习问题,现在有一些带标签的训练样本(x(i),y(i)).神经网络就是定义一个复杂且非线性的假设hW,b(x),其中W,b 是需要拟合的参数. 下面是一个最简单的神经网络结构,只含有一个神经元,后面就用下图的形式代表一个神经元: 把神经元看作是一个计算单元,左边的x1,x2,x3 (和 截距+1 )作为计算单元的输入,输出为:,其中,函数被称为激活函数,在这里我们的激活函数是sigmoid函数: 还有一种激活函数是正切函数(tanh function): 下面是两种激活函数图像:

Sparse Autoencoder稀疏自动编码

本系列文章都是关于UFLDL Tutorial的学习笔记 Neural Networks 对于一个有监督的学习问题,训练样本输入形式为(x(i),y(i)).使用神经网络我们可以找到一个复杂的非线性的假设h(x(i))可以拟合我们的数据y(i).我们先观察一个神经元的机制: 每个神经元是一个计算单元,输入为x1,x2,x3,输出为: 其中f()是激活函数,常用的激活函数是S函数: S函数的形状如下,它有一个很好的性质就是导数很方便求:f'(z) = f(z)(1 ? f(z)): 还有一个常见的

Deep Learning 12_深度学习UFLDL教程:Sparse Coding_exercise(斯坦福大学深度学习教程)

前言 理论知识:UFLDL教程.Deep learning:二十六(Sparse coding简单理解).Deep learning:二十七(Sparse coding中关于矩阵的范数求导).Deep learning:二十九(Sparse coding练习) 实验环境:win7, matlab2015b,16G内存,2T机械硬盘 本节实验比较不好理解也不好做,我看很多人最后也没得出好的结果,所以得花时间仔细理解才行. 实验内容:Exercise:Sparse Coding.从10张512*51

AutoEncoder的一些实验结果和思考

之前看Autoencoder的时候,做了一下这里的练习:http://ufldl.stanford.edu/wiki/index.php/Exercise:Sparse_Autoencoder .其实 从1月份就开始做了,当时没有调试通过,后来又加班太多,一直没有接着做.直到上上周末抽空调了一天,终于顺利完成了,又拖到这周末才开始把实验结果整理成文.看来,做事还得趁热打铁,一气呵成.时间一久,积极性就没了. 最初按照练习中的建议,先实现了一个基本的代价函数,没有加入权值惩罚项和稀疏约束项,梯度检

AutoEncoder一些实验结果,并考虑

看之前Autoencoder什么时候,我做了一些练习这里:http://ufldl.stanford.edu/wiki/index.php/Exercise:Sparse_Autoencoder .其实 从11月开始做.有没有经过调试,后来,加班太多,我没有那么做.抽出时间调了一天.最终顺利完毕了.又拖到这周末才開始把实验结果整理成文.看来,做事还得趁热打铁,一气呵成.时间一久.积极性就没了. 最初依照练习中的建议,先实现了一个主要的代价函数.没有增加权值惩处项和稀疏约束项.梯度检查都过了,跑出