成本函数(Cost function)和学习机制

成本函数主要是应用于有导师学习机制中(supervised learning)。成本函数主要衡量神经网络的输出和正确输出的差值(Error)。神经网络输出的误差越大,其成本函数值也就越大。以下面两个成本函数作为例子,进行说明。

首先,先看一下sum of squared error的成本函数,其图形为:

可以看出,当神经网络输出值和正确值相差很小的时候,成本函数的输出接近于零。当两者值不断增大时,其成本函数值以指数进行增长。这个成本函数是早期神经网络最流行的一个成本函数。

对于cross entropy成本函数的理解没有sum of squared error那么直观。Cross Entropy函数可以表示为:

由于logarithm函数的定义,y的值在(0,1)之间,所以Cross Entropy函数和Sigmoid或者Softmax函数进行搭配。

当d = 1 时,可以得出如下图形:

可以看出,当y=1 时,误差为零,Cross Entropy成本函数输出的E也为零。当y偏离1的时候,则Cross Entropy函数的输出也是不断增大。

当d = 0 时,可以得出如下图形:

可以看出,当y=0时候,误差为零,Cross Entropy的输出值E也为零。当y偏离0时,则Cross Entropy的输出函数也是不断增加。

从上面两个图形可以看出,Cross Entropy函数也是和输出的误差有一定的函数关系的。并且Cross Entropy函数对误差的敏感度要高于Sum of Squared Error函数。因此,现在流行的搭配为Cross Entropy成本函数配置Sigmoid的激活函数。

下面,用Cross Entropy + Sigmoid 函数推到反向传播算法,其步骤为:

以上的步骤和《多层神经网络训练MATLAB实现》文章中的最大的区别是:

这张图显示了神经网络输出层和隐含层利用不同的Delta 法则。

此外,为了避免神经网络的过拟合,通常在成本函数中加入regularization,这样成本函数可以表达为:

其中lambda参数是反映了权重函数在成本函数中的比重。从上面公式可以看出,单纯的降低神经网络的误差并不能降低成本函数的数值。要降低成本函数的输出必须同时降低神经网络的输出误差以及连接神经网络的权重参数值。如果权重参数足够的小,则在神经网络中有一些神经元几乎是不连接的,从而简化了神经网络的结构,消除过拟合现象。这个和深度学习的drop out操作是一个道理。

下面用MATLAB实现在Cross Entropy的成本函数的情况下对权重参数的修正程序。

神经网络的架构为两层神经网络包含一层输出层和一个隐含层,其结构图如下:

MATLAB主程序为:

将Cross Entropy 和Sum of Squared Sum的成本函数进行对比,其结果如下:

可以看出,Cross Entropy函数的表现要好于Sum of Squared Error.

(0)

相关推荐