深度学习笔记:稀疏自编码器(3)——稀疏自编码算法

  有了神经网络和反向传播的基础,我们就可以将其应用到稀疏自编码器中了。稀疏自编码器属于非监督学习,主要通过尝试学习一个 hW,b(x)x 的函数,来提取输入值 x 中的特征。

0.本文中使用的符号

  本文中使用的符号大体与上一篇文章相同,在此仅列出一些新增加的符号和需要注意的符号

符号 描述
m 样本总数
a(2)j 第2层第 j 个神经元的激活度
a(2)j(x) 在给定输入值为 x 的情况下,第2层第 j 个神经元的激活度
ρj^ ρj^=1mmi=1[a(2)j(x(i))] 表示第2层第 j 个隐藏神经元在训练集上的平均活跃度
ρ 表示稀疏性参数,通常是一个接近0的值(如 ρ=0.05 ),可以令 ρj^=ρ ,来对神经元 a(2)j 的稀疏度进行限制
s2 第2层(隐藏层)神经元的数量
hW,b(x) 输入值为 x ,神经网络中权值和偏置项分别为 W,b 的情况下的输出值

1.什么是稀疏自编码器

  先上图:

  上图为有一个隐藏层的稀疏自编码器示意图。稀疏自编码器为非监督学习,其所使用的样本集 {x(1),x(2),...,x(m)} 为没有类别标记的样本,我们希望令输出值 hW,b(x) 与输入值 x 近似相等。

2.为什么要用稀疏自编码器

  由于为数据人工增加类别标记是一个非常麻烦的过程,我们希望机器能够自己学习到样本中的一些重要特征。通过对隐藏层施加一些限制,能够使得它在恶劣的环境下学习到能最好表达样本的特征,并能有效地对样本进行降维。这种限制可以是对隐藏层稀疏性的限制。

3.稀疏性限制

3.1稀疏性

  当使用sigmoid函数作为激活函数时,若神经元输出值为1,则可认为其被激活,若神经元输出值为0,则可认为其被抑制(使用tanh函数时,代表激活和抑制的值分别为1和-1)。稀疏性限制就是要保证大多数神经元输出为0,即被抑制的状态。

3.2如何限制隐藏层稀疏性

  在本文开始所给出的稀疏自编码网络中,为了限制隐藏结点稀疏性,可以进行如下表示:
1. 使用 a(2)j 表示第2层第 j 个神经元的激活度。
2. 使用 a(2)j(x) 表示在给定输入值为 x 的情况下,第2层第 j 个神经元的激活度。
3. 使用 ρj^=1mmi=1[a(2)j(x(i))] 表示第2层第 j 个隐藏神经元在训练集上的平均活跃度。
4. 使用 ρ 表示稀疏性参数,通常是一个接近0的值(如 ρ=0.05 ),可以令 ρj^=ρ ,来对神经元 a(2)j 的稀疏度进行限制。
  我们希望 ρj^ ρ 越接近越好,因此我们要对这两者有显著差异的情况进行惩罚,惩罚使用KL散度。


PS. 什么是KL散度?
  KL散度又称相对熵,是对两个概率分布P和Q差异的非对称性度量,非对称性意味着 D(PQ)D(QP) D(PQ) 表示用概率分布 Q 来拟合概率分布 P 时所产生的信息损耗。其定义为:
给定随机变量 s ,若为
离散型随机变量: D(PQ)=(p(i)log(p(i)q(i))) ,此处p和q表示随机变量的分布律, p(i) 表示随机变量 s i 的概率
连续型随机变量: D(PQ)=p(s)log(p(s)q(s))d(s) ,此处 p q 表示随机变量 s 的概率密度
  KL散度的性质是,当 P=Q 时值为0,随着 P Q 差异增大而递增。


  在这里,我们是要用 ρj^ 去逼近 ρ ,这里的KL散度是:
s2j=1KL(ρρ^j)=s2j=1ρlogρρ^j+(1ρ)log1ρ1ρ^j
  于是我们在代价函数中加入这一惩罚因子,代价函数就变成:
Jsparse(W,b)=J(W,b)+βs2j=1KL(ρρ^j)
  代价函数改变了,在反向传导时残差公式也要做出相应的改变,之前隐藏层第 i 个结点残差为:
δ(2)i=(s3j=1W(2)jiδ(3)j)f(z(2)i)
现在应该将其换成:
δ(2)i=(s3j=1W(2)jiδ(3)j+β(ρρ^i+1ρ1ρ^i))f(z(2)i)


注意:在ufldl的自编码算法和稀疏性中的后向传播算法里,提到隐藏层第 i 个结点残差为:

但根据ufldl教程反向传导算法一节的推导,残差递推公式为:

笔者自己根据公式推了一遍,同时加上自己的理解,笔者认为在中,累加的上限应该是 s3 而不是 s2 ,因此在本文最后处的公式里写的是 s3 ,但笔者由于还是在校学生,知识有限,此处还是存在疑问,恳请看到本文的同学能在这里指点一二,感激不尽!

你可能感兴趣的:(深度学习,神经网络)