我们设计神经网络的目的是为了实现一种模型,这个模型能够对数据做出合适的处理。比如分类问题,网络能够 以尽可能高的准确率对样本分类。
那么如何评价网络的性能?
这就需要使用代价函数(Cost function)。代价函数能够体现网络的处理结果和实际数据差别程度。
下面介绍为什么现在的神经网络要使用交叉熵代价函数。
首先,先说一下MSE,均方误差函数,这个函数在很多地方(常见于线性回归问题上,针对不同的问题会使用不同的代价函数)都会用,用来评价算法性能。
MSE的表达式是
一般的神经网络结构如下
根据梯度下降算法更新网络权重的公式是
其中J代表代价函数,使用均方误差函数即
--------------------------------------------------------------------------------------下面符号进行统一
为了方便,仅看w1的更新,根据权值更新公式
代表α学习率, 代表J代价函数, 代表第k次更新后的第i个权值
a代表激活函数(一定记住,数据在经过每层输出时一般要经过一个激活函数)根据链式法则,偏微分表达式可以看成如下形式
第一部分是
第二部分是
第三部分是
整合三部分可得
观察(7),其大小与激活函数的导数有关
以sigmoid激活函数为例,演示为什么二次均方误差不用来当做代价函数
Sigmoid函数图像
Sigmoid函数的导数图像
解决这个问题的办法,可从以下几个方面入手
1.改变激活函数
2.改变代价函数
3.不使用上面那个权值更新公式
此处,只讨论2途径,即使用交叉熵代价函数。
交叉熵代价函数
利用
此时激活函数仍用sigmoid函数。
可见上面的表达式中,不含导数项,也就解决了梯度更新缓慢的问题。