简述为什么输出层在使用sigmoid做激励函数时, 代价函数用交叉熵比平方差更好

符号:

 C : 代价函数

 w:weight

 b:bias

η:学习速率

 

在使用平方差作代价函数时:

 

                                                               

 其中a是预测结果     a = \sigma (z),  z = wx + b   即 a = \sigma (wx+b)

其用链式法则来求权重和偏置的偏导数就有(这里求导过程我就不写了,毕竟从 "宏观" 上来理解一个问题我觉得会更重要。如果想去了解完整的过程可以去参考其他资料,如这本书,有中文版的,可以在网上找到):

                                                       

sigmoid函数图像如下:

                                    简述为什么输出层在使用sigmoid做激励函数时, 代价函数用交叉熵比平方差更好_第1张图片

而梯度下降更新规则为:

                                简述为什么输出层在使用sigmoid做激励函数时, 代价函数用交叉熵比平方差更好_第2张图片

 

由 sigmoid 函数的图像我们可以知道,当 z 很小 ( 远小于0 ) 或者 z 很大 ( 远大于0 ) 时,σ′(z) 趋于 0,所以代价函数对于 w 和 b 的偏导数就会很小。所以 w 和 b 就会产生的变化很小,故,学习缓慢。

而使用交叉熵作代价函数时:

                                    

其用链式法则来求权重和偏置的偏导数就有:

                                    

                                        

式中没有 σ′(z) ,其实σ′(z) 在链式求导时被约去了,所以不会出现学习缓慢的问题 (除非在最后结果收敛的时候) 。它告诉我们权重学习的速度受到 σ(z) − y,也就是输出中的误差的控制。更大的误差,会有更快的学习速度。这是我们直觉上期待的结果。

注:使用平方差会出现这样的情况:在结果未收敛时就有一段 Epoch 学习缓慢,Cost 下降缓慢

 

                                    简述为什么输出层在使用sigmoid做激励函数时, 代价函数用交叉熵比平方差更好_第3张图片

        而对应使用交叉熵:不会出现上述情况

                                    简述为什么输出层在使用sigmoid做激励函数时, 代价函数用交叉熵比平方差更好_第4张图片

 

 

扩展一下:其实还有一种组合方式也可以防止我们遇到学习缓慢的问题: 

                                                             具有对数似然代价的柔性最大值输出层

具有对数似然代价的柔性最大值输出层和一个具有交叉熵代价的 S 型输出层效果差不多,有兴趣的朋友可以自己去了解一下,这里就不阐述了。

完!

 

你可能感兴趣的:(简述为什么输出层在使用sigmoid做激励函数时, 代价函数用交叉熵比平方差更好)