资讯专栏INFORMATION COLUMN

自编码网络AutoEncoder的原理

villainhr / 2800人阅读

摘要:自编码网络模型自编码网络的结构如下图所示网络中最左侧蓝色的节点是输入层,最右侧黄色的一列神经元是输出层。输出层的神经元数量完全等于输入层神经元的数量。自编码网络的作用是,将输入样本压缩到隐藏层,再在输出端重建样本。

本文参考自:http://ufldl.stanford.edu/wiki/index.php...
     原翻译版本有些不易理解的地方,用自己的语言写了一次。


     有监督的神经网络需要我们的数据是有标注(Labeled)的,然而神经网络并不止限于处理有标注的数据,同时还能处理无标注的数据,形如:$${x^{(1)},x^{(2)},x^{(3)},...} 其中 x^{(i)}in{mathbb{R}^n}$$

     其中的一种算法叫做AutoEncoder——自编码网络。

自编码网络模型

自编码网络的结构如下图所示:

     网络中最左侧蓝色的节点是输入层,最右侧黄色的一列神经元是输出层。
     输出层的神经元数量完全等于输入层神经元的数量。 隐藏层的神经元数量少于输出层。

     自编码网络的作用是,将输入样本压缩到隐藏层,再在输出端重建样本。也就是说,自编码网络输出层与输入层存在如下关系:
$$hat{x_i} approx x_i $$

注意:由于神经元的输出只在0和1之间,因此输入需要进行均值归一化

自编码网络可以看做将数据进行压缩(由原来的“n-维”压缩成“m维”(m=隐藏层神经元数目)),然后再在需要的时候用损失尽量小的方式将数据恢复出来。

这里有两层意思:

   第一,自编码网络是要将经过压缩的数据还原,即将我们将学习一组
$$h_{W,b} approx x$$ 这是算法要学习的参数。

 

   第二,还原数据应该使得损失尽量小,也就规定了我们的目标函数:
$$J(W,b) = frac{1}{m} sum_{i=1}^m{(hat{x} - x)^2} $$

数据压缩原理

压缩:限制隐藏层神经元数量
    限制隐藏层的神经元数量,就可以得到压缩的效果。例如:输入x是10*10图片的像素灰度值,即x是100维向量。输入层大小n=100。我们令隐藏层大小 s_2=50 ,那么隐藏层的输出a2是一个50维向量,网络的输出层必须使用这个50维向量来重建100维的输入。即实现了数据压缩。

 

压缩原理
    数据压缩依靠的是数据本身是有冗余信息的。当输入是完全随机,相互独立同分布的时候,网络将很难习得一个有效的压缩模型,然而现实中的数据(自然图像、语言、声音)总是存在不同程度的冗余性。自编码网络通过学习发现并去掉了这些冗余信息。实际上,自编码网络学习出的低维数据表示十分类似于PCA(主成分分析)学习出的主成分。

 

压缩:限制隐藏层的稀疏性
    另一种方式是限制隐藏层的稀疏性。首先定义稀疏性:

    稀疏性--- 神经元总是使用一个激活函数,通常使用Sigmoid或者tanh函数,它们在输入很大的时候,趋于正无穷输出接近1的数,称该神经元为“激活状态”;在输入很小,趋于负无穷的时候分别输出0和-1,称该神经元为“非激活状态”。稀疏性要求隐藏层中的激活神经元是“稀疏”的——即大部分神经元处于非激活状态。

$$ 在神经网络中,常用 a_j^{(2)} 表示第2层第j个神经元的输出,为表示输出和某个输入相关,记为a_j^{(2)}(x^{(i)})$$

$$ hat{ ho}_j = frac{1}{m}sum_{i=1}^m[a_j^{(2)}(x^{(i)})] quad 为隐藏层第j个单元对所有输入样本的输出的平均值$$

那么稀疏性限制可以限制:
$$ hat{ ho} = ho 此处 ho 为稀疏参数,通常用一个接近于0的常数代替(例如 ho=0.05)$$

为了保证ρj不偏离ρ,需要设置惩罚函数。
$$J(W,b) = frac{1}{m} sum_{i=1}^m{(hat{x} - x)^2} + PenalTerm$$

$$PenalTerm = sum_{j=1}^{s_2} ho·logfrac{ ho}{ ho_j}+(1- ho)logfrac{1- ho}{1- ho_j}$$

惩罚函数以相对熵(K-L Divergence)的形式给出。

注:K-L Divergence用于表示两个函数的差别,其定义为
$$ KL(f(x)||g(x))= sum_{xin X}f(x)cdot log frac{f(x)}{g(x)}$$

相对熵的性质:ρ与ρj相等时为0,随着偏差增大,相对熵增大,其图像如下图:

训练的注意事项

在BP步骤中,对隐藏层进行权值更新需要计算:
$$delta_i^{(2)} = (sum_{j=1}^{s_2} W_{ji}^{(2)} delta_j^{(3)})f`(z_i^{(2)})$$

事实上可以用下式计算:
$$delta_i^{(2)} = ((sum_{j=1}^{s_2} W_{ji}^{(2)} delta_j^{(3)}) + eta(frac{ ho}{ ho_j}+frac{1- ho}{1- ho_j})) f`(z_i^{(2)})$$

注意:在网络训练中,前向传播步骤应同时计算ρ,然后在后向传播步骤时做相应的修改。这样,每次前向传播的步骤计算量就增大了一倍。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20099.html

相关文章

  • 编码网络AutoEncoder原理

    摘要:自编码网络模型自编码网络的结构如下图所示网络中最左侧蓝色的节点是输入层,最右侧黄色的一列神经元是输出层。输出层的神经元数量完全等于输入层神经元的数量。自编码网络的作用是,将输入样本压缩到隐藏层,再在输出端重建样本。 本文参考自:http://ufldl.stanford.edu/wiki/index.php...     原翻译版本有些不易理解的地方,用自己的语言写了一次。     ...

    Loong_T 评论0 收藏0
  • Sparse Autoencoder

    摘要:稀疏编码是对网络的隐藏层的输出有了约束,即隐藏层神经元输出的平均值应尽量为。也就是说,大部分的隐藏层神经元都处于非状态。为了满足这一条件,隐藏层神经元的活跃度必须接近于。 作者:chen_h微信号 & QQ:862251340微信公众号:coderpai简书地址:https://www.jianshu.com/p/5f3... 自编码器 Autoencoder 稀疏自编码器 Spa...

    harryhappy 评论0 收藏0
  • 人工智能术语表

    摘要:如果你对算法实战感兴趣,请快快关注我们吧。加入实战微信群,实战群,算法微信群,算法群。 作者:chen_h微信号 & QQ:862251340微信公众号:coderpai简书地址:https://www.jianshu.com/p/b5c... 介绍一些人工智能技术的术语,如果你还有术语补充,请访问 Github English Terminology 中文术语 neur...

    pingan8787 评论0 收藏0
  • Stacked Autoencoder

    摘要:等训练结束后,输出层就可以去掉了,因为我们只关心的是从到的变换。需要注意的是,整个网络的训练不是一蹴而就的,而是逐层进行的。加入实战微信群,实战群,算法微信群,算法群。 作者:chen_h微信号 & QQ:862251340微信公众号:coderpai简书地址:https://www.jianshu.com/p/51d... 自编码器 Autoencoder 稀疏自编码器 Spa...

    张率功 评论0 收藏0
  • Autoencoder

    摘要:简单来说是一个压缩编码器,也就是对的一坨东西通过变换,输出和一样的东西。例如是一个鸡,也是一个鸡,是一个鸭,也是一个鸭。学术一点说就是找到一个函数能够使得,叫做。加入实战微信群,实战群,算法微信群,算法群。 作者:chen_h微信号 & QQ:862251340微信公众号:coderpai简书地址:https://www.jianshu.com/p/fd3... 自编码器 Auto...

    GitChat 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<