网络的参数进行”惩罚”,以便使每个参数不要太大),同时也能够求出损失函数偏导函数的表达式,然后利用优化算法求出网络最优的参数。应该清楚的是,损失函数的表达式中,需要用到有标注值的样本。那么这里的sparse autoencoder为什么能够无监督学习呢?难道它的损失函数的表达式中不需要标注的样本值(即通常所说的y值)么?其实在稀疏编码中”标注值”也是需要的,只不过它的输出理论值是本身输入的特征值x,其实这里的标注值y=x。这样做的好处是,网络的隐含层能够很好的代替输入的特征,因为它能够比较准确的还原出那些输入特征值。Sparse autoencoder的一个网络结构图如下所示:
2.2 损失函数
无稀疏约束时网络的损失函数表达式如下:
稀疏编码是对网络的隐含层的输出有了约束,即隐含层节点输出的平均值应尽量为0,这样的话,大部分的隐含层节点都处于非激活状态。因此,此时的sparse autoencoder损失函数表达式为:
后面那项为KL距离,其表达式如下:
隐含层节点输出平均值求法如下:
其中的参数一般取很小,比如说0.05,也就是小概率发生事件的概率。这说明要求隐含层的每一个节点的输出均值接近0.05(其实就是接近0,因为网络中激活函数为sigmoid函数),这样就达到稀疏的目的了。KL距离在这里表示的是两个向量之间的差异值。从约束函数表达式中可以看出,差异越大则”惩罚越大”,因此最终的隐含层节点的输出会接近0.05。
假设我们有一个固定样本集
,它包含
个样例。我们可以用批量梯度下降法来求解神经网络。具体来讲,对于单个样例
,其代价函数为:
这是一个(二分之一的)方差代价函数。给定一个包含 我们可以定义整体代价函数为:
个样例的数据集,
以上公式中的第一项
是一个均方差项。第二项是一个规则化项
(也叫权重衰减项),其目的是减小权重的幅度,防止过度拟合。
权重衰减参数 用于控制公式中两项的相对重要性。在此重申一下这两个复杂函数的含义:
是针对单个样例计算得到的方差代价函数;
是整体样本代价函数,它包含权重衰减项。
以上的代价函数经常被用于分类和回归问题。在分类问题中,我们用 或 ,来代表两种类型的标签,这是因为 sigmoid激活函数的值域为
;如
果我们使用双曲正切型激活函数,那么应该选用 -1 和 +1 作为标签。对于回归问题,我们首先要变换输出值域 ,以保证其范围为 们使用双曲正切型激活函数,要使输出值域为 我们的目标是针对参数
和 来求其函数
和
)。
的最小值。为了求
初始化为一个很小的、接近 生成的随机值,其中 设
(同样地,如果我
解神经网络,我们需要将每一个参数 零的随机值(比如说,使用正态分布 置为
),之后对目标函数使用诸如批量梯度下降法的最优化算法。因为 是一个非凸函数,梯度下降法很可能会收敛到局部最优解;但是在实
际应用中,梯度下降法通常能得到令人满意的结果。最后,需要再次强调的是,要将参数进行随机初始化,而不是全部置为 。如果所有参数都用相同的值作为初始值,那么所有隐藏层单元最终会得到与输入值有关的、相同的函数(也就是说,对于所有 ,
都会取相同的值,那么对于任何输入 )。随机初始化的目的是使对称失效。
都会有:
2.3 反向传播算法
梯度下降法中每一次迭代都按照如下公式对参数
和 进行更新:
其中
是学习速率。其中关键步骤是计算偏导数。我们现在来讲一下反向
传播算法,它是计算偏导数的一种有效方法。
我们首先来讲一下如何使用反向传播算法来计算
,这两项是单个样例
的代价函数
和 的偏 的偏导数:
导数。一旦我们求出该偏导数,就可以推导出整体代价函数
以上两行公式稍有不同,第一行比第二行多出一项,是因为权重衰减是作用于
而不是 。反向传播算法的思路如下:给定一个样例
,我们首先 的输出值。,该残差表明了该
进行“前向传导”运算,计算出网络中所有的激活值,包括 之后,针对第 层的每一个节点 ,我们计算出其“残差”
节点对最终输出值的残差产生了多少影响。对于最终的输出节点,我们可以直接算出网络产生的激活值与实际值之间的差距,我们将这个差距定义为
(第
层表示输出层)。对于隐藏单元我们如何处理呢?我们将基于节点(译者注:第
层节点)残差的加权平均值计算
,这些节点以
作为输入。下
面将给出反向传导算法的细节:
进行前馈传导计算,利用前向传导公式,得到 的激活值。
对于第
直到输出层
层(输出层)的每个输出单元 ,我们根据以下公式计算残差:
对
的残差计算方法如下:
的各个层,第 层的第 个节点
将上式中的
与
的关系替换为与
的关系,就可以得到: