博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深度学习读书笔记之AE(自动编码AutoEncoder)
阅读量:2117 次
发布时间:2019-04-30

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

深度学习读书笔记之AE

声明:

1)该博文是整理自网上很大牛和专家所无私奉献的资料的。具体引用的资料请看参考文献。具体的版本声明也参考原文献。

2)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应,而且大部分内容都是直接抄NG的源博客的,如果某部分不小心侵犯了大家的利益,还望海涵,并联系老衲删除或修改,直到相关人士满意为止。

3)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢。

4)阅读本文需要机器学习、统计学、神经网络等等基础(如果没有也没关系了,没有就看看,当做跟同学们吹牛的本钱)。

5)此属于第一版本,若有错误,还需继续修正与增删。还望大家多多指点。请直接回帖,本人来想办法处理

6)本人手上有word版的和pdf版的,不知道怎么上传,所以需要的话可以直接到DeepLearning高质量交流群里要,群号由于未取得群主同意不敢公布,需要的同学可以联系群主

一.稀疏自编码器

1.1一般AE使用方法

下图是一个自编码神经网络的示例。

上面是一个三层的自编码神经网络,分别有L1,L2,L3这三层。

网络经过学习以后,得到的结果是两个矩阵和两个偏移量,W_{3 \times 6}^1和偏移量b1、{\rm{W}}_{6 \times 3}^2和b2。
给定输入x=(x1,x2,x3,x4,x5,x6),根据已知的激活函数f1,f2,这两个矩阵和偏移量有如下的性质:
{\rm{yi}} = {\rm{f}}1\left( { \sum \limits_{j = 1}^6 w_{ij}^1 \times {\rm{x}}j + b_i^1} \right),从而得到y=(y1,y2,y3),其中f1是sigmoid函数,形式 

f(z) = \frac{1}{​{1 + \exp ( - z)}}

再令{\rm{zi}} = {\rm{f}}2\left( { \sum \limits_{j = 1}^3 w_{ij}^2 \times {\rm{yj}} + b_i^2} \right),从而得到z=(z1,z2,z3,z4,z5,z6)其中f2是自等函数,形式f(z)=z.如果输入数据在0和1之间,也可以用f1是sigmoid函数。
一个训练得很好的自编码神经网络满足x=z。

1.2自编码AE的意义

只对图像进行解释。
假如是一个L1层10000个节点,L2层100个节点,L3层10000个节点的AE网络,同时所有激活函数选用sigmoid函数,那么
W_{100X10000}^1
用大量的图片训练得到
W_{100X10000}^1
{\rm{W}}_{10000 \times 100}^2;对于
W_{100X10000}^1的每一行,把
W_{100X10000}^1的权重用公式
{​{\rm{x}}_{\rm{j}}} = \frac{​{​{\rm{W}}_{​{\rm{ij}}}^1}}{​{\sqrt { \sum \nolimits_{​{\rm{j}} = 1}^{10000} {​{\left( {​{\rm{W}}_{​{\rm{ij}}}^1} \right)}^2}} }},得到的x=(x1,x2,⋯,x10000),组合成一幅100*100的子图,就能得到100幅子图,都是一些边缘,如下面的这些

可以看到,不同的隐藏单元学会了在图像的不同位置和方向进行边缘检测。显而易见,这些特征对物体识别等计算机视觉任务是十分有用的。若将其用于其他输入域(如音频),该算法也可学到对这些输入域有用的表示或特征。

如果输入数据中隐含着一些特定的结构,比如某些输入特征是彼此相关的,那么这一算法就可以发现输入数据中的这些相关性。事实上,这一简单的自编码神经网络通常可以学习出一个跟主元分析(PCA)结果非常相似的输入数据的低维表示。

1.3稀疏自编码AE的优化目标和解法

1.3.1损失函数

假设有一组s1个特征的样本样本X={x1,x2,⋯,xm},经过自编码网络在L2层和L3层分别成为Y={y1,y2,⋯,ym},Z={z1,z2,⋯,zm},其中L1层,L2层,L3层分别有节点s1,s2,s3个,则损失函数可以表示成下面的形式

其中{\rm{J}}\left( {​{\rm{W}},{\rm{b}},{\rm{x}}} \right) = \frac{1}{2}z - {x^2}

β是一个超参数,控制稀疏性惩罚因子的权重,ρ也是超参数,叫做稀疏性参数。而KL的定义如下

{\rm{KL}}({\rm{\rho }}||{​{\hat \rho }_j}) = {\rm{\rho log}}\frac{\rho }{​{​{​{\hat \rho }_j}}} + \left( {1 - \rho } \right)log\frac{​{1 - \rho }}{​{1 - {​{\hat \rho }_j}}}

而且{​{\hat \rho }_j}是L2层的第j个节点的平均激活度,定义如下

{​{\hat \rho }_j} = \frac{1}{​{\rm{m}}} \sum \limits_{i = 1}^m \left[ {​{y_j}\left( {​{\rm{xi}}} \right)} \right]

其中{y_j}\left( {xi} \right)表示L2层的第j个节点在输入为xi的时候的值.

1.3.2求解

求解步骤如下:

(1)   对于每个训练样本x进行迭代:

a)先计算L3层的每一个节点i的误差

\delta _i^{\left( 3 \right)} =  - \left( {​{x_i} - {z_i}} \right) \bullet \nabla f\left( {W_i^{\left( 2 \right)}{y_i} + b_i^{\left( 2 \right)}} \right)

得到的结果是L3层的残差。

再计算L2层的每一个节点i的误差

得到的结果是L2层的每个节点i的残差

b)然后计算{W^{\left( 2 \right)}}{b^{\left( 2 \right)}}的梯度,利用上面的残差

\frac{\partial }{​{\partial W_{ij}^{\left( 2 \right)}}}J\left( {W,b,x} \right) = {y_j}\delta _i^{\left( 3 \right)}

\frac{\partial }{​{\partial b_i^{\left( 2 \right)}}}J\left( {W,b,x} \right) = \delta _i^{\left( 3 \right)}

{W^{\left( 1 \right)}}{b^{\left( 1 \right)}}的梯度,利用上面的残差

\frac{\partial }{​{\partial W_{ij}^{\left( 1 \right)}}}J\left( {W,b,x} \right) = {x_j}\delta _i^{\left( 2 \right)}

\frac{\partial }{​{\partial b_i^{\left( 1 \right)}}}J\left( {W,b,x} \right) = \delta _i^{\left( 2 \right)}

c)误差进行累计,l=1,2

\Delta W_{ij}^{\left( l \right)}: = \Delta W_{ij}^{\left( l \right)} + \frac{\partial }{​{\partial W_{ij}^{\left( l \right)}}}J\left( {W,b,x} \right)

\Delta b_i^{\left( l \right)}: = \Delta b_i^{\left( l \right)} + \frac{\partial }{​{\partial b_i^{\left( l \right)}}}J\left( {W,b,x} \right)

(2)更新{W^{\left( l \right)}}{b^{\left( l \right)}}的权重

{\rm{W}}_{ij}^{\left( l \right)} = {\rm{W}}_{ij}^{\left( l \right)} - \alpha \left[ {\frac{1}{m}\Delta W_{ij}^{\left( l \right)} + \lambda W_{ij}^{\left( l \right)}} \right]

b_i^{\left( l \right)} = b_i^{\left( l \right)} - \alpha \left[ {\frac{1}{m}\Delta b_i^{\left( l \right)}} \right]

致谢

感谢NG的博客,无私奉献了这么多资料

感谢邓侃率领的一群人翻译了NG的博客的所有内容,让我等小白能看懂。

Deep Learning高质量交流群里的多位同学:@厦大_图像_风淳 ,@罗杰 ,@Wilbur

参考文献

[1]http://deeplearning.stanford.edu/wiki/index.php/UFLDL%E6%95%99%E7%A8%8B  NG的博客,邓侃翻译版

from: http://blog.csdn.net/mytestmy/article/details/16918641

你可能感兴趣的文章
leetcode 热题 Hot 100-3. 合并两个有序链表
查看>>
leetcode 热题 Hot 100-4. 对称二叉树
查看>>
Leetcode C++《热题 Hot 100-12》226.翻转二叉树
查看>>
Leetcode C++《热题 Hot 100-13》234.回文链表
查看>>
Leetcode C++《热题 Hot 100-14》283.移动零
查看>>
Leetcode C++《热题 Hot 100-15》437.路径总和III
查看>>
Leetcode C++《热题 Hot 100-17》461.汉明距离
查看>>
Leetcode C++《热题 Hot 100-18》538.把二叉搜索树转换为累加树
查看>>
Leetcode C++《热题 Hot 100-19》543.二叉树的直径
查看>>
Leetcode C++《热题 Hot 100-21》581.最短无序连续子数组
查看>>
Leetcode C++《热题 Hot 100-22》2.两数相加
查看>>
Leetcode C++《热题 Hot 100-23》3.无重复字符的最长子串
查看>>
Leetcode C++《热题 Hot 100-24》5.最长回文子串
查看>>
Leetcode C++《热题 Hot 100-26》15.三数之和
查看>>
Leetcode C++《热题 Hot 100-27》17.电话号码的字母组合
查看>>
Leetcode C++《热题 Hot 100-28》19.删除链表的倒数第N个节点
查看>>
Leetcode C++《热题 Hot 100-29》22.括号生成
查看>>
Leetcode C++《热题 Hot 100-40》64.最小路径和
查看>>
Leetcode C++《热题 Hot 100-41》75.颜色分类
查看>>
Leetcode C++《热题 Hot 100-42》78.子集
查看>>