赞
踩
神经网络中采用了与逻辑回归类似的代价函数,逻辑回归的代价函数如下图所示:
而神经网络中因为加入了隐藏层,不再只有一个逻辑单元,而是有k个,所以代价函数也发生了变化:
这里的k表示输出单元的个数,加号后面的式子即我们在逻辑回归中添加的正则化项,对象是每一层的权重矩阵,同样的,对于每一层中的偏置项不做正则化处理。为了使这个式子最小化,我们要使用梯度下降法或其他优化算法,多次计算 的偏导数项,而这个偏导数项可以使用反向传播算法来计算。
反向传播算法,其实质就是要对神经网络中的每个结点计算一个值: ,与前向传播中的 类似,这个值表示第L 层第j 个结点的误差。以下面这个四层神经网络为例:
对于第四层输出单元,其误差的计算方法为: ,即用预测的结果减去真实结果。如果从整层的角度来看,这个式子可以转换为向量运算: 。现在我们得到了 ,就可以用它来计算出、 。其计算方法为:
输入层不用进行反向传播计算,输入层本身就是准确的值,我们不需要改变这些值。反向传播这个算法源自于我们从输出层开始计算得到,用向后推导出其他各层的误差值 和。就像是第四层的误差传播到了第三层,然后又传播到了第二层上。
在最小化代价函数过程中所要计算的那些偏导数项,可以通过反向传播算法计算得到,其计算过程大致如下:
假设某个神经网络有L 层,训练集中有m个样本,设置 (for all i,j,l),这个三角形符号是δ的大写形式。然后遍历每个样本,做如下操作:
1、对于遍历到的第i 个样本,设置
2、运用正向传播,计算得出所有层的激活项,这里的是一个向量。
3、使用样本的y值,计算出输出层的误差项:
4、运用反向传播,计算出除输入层外所有层的误差项、、......、。
5、计算
6、计算 和
7、最后,。然后就可以使用梯度下降等优化算法来寻找最后的参数θ了。
直观地看,反向传播是在计算每个单元的误差项。但实际上,是代价函数关于的偏导数。而代价函数可以看作是一个样本观测值 和预测结果 的函数,所以当我们改变了神经网络中的,那么 和代价函数都会随着改变。所以误差项所衡量的就是,为了影响这些中间项,我们需要改变神经网络权重的程度。
假设代价函数为 ,函数在一点θ出的导数值就是函数在该点处切线的斜率。我们在点θ附近再寻找两个点和,函数在这两点处函数值的连线斜率也可以近似认为是θ点出切线的斜率。如下图所示:
所以函数在点θ出的导数值可以近似认为是:。当 足够小时,该近似值就可以代替真正的导数值,但如果 太小的话,可能在计算机的计算过程中发生一些数值错误,所以一般设置为左右即可。
如果θ是一个向量的话,同样可以套用上面的原理进行导数的估计:
接下来我们使用上述式子得到的结果,与使用反向传播算法计算得到的导数值D相比较,如果二者相等或者非常接近,那么我们就可以确定反向传播的实现是正确的。确认正确后,往后不再进行梯度检测。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。