Cross-entropy
神经网络的学习行为和人脑差的很多, 开始学习很慢, 后来逐渐增快
为什么?
学习慢 => 偏导数 ∂C/∂w 和 ∂C/∂b 值小
回顾之前学习的Cost函数:
回顾sigmoid函数:
如何增快学习?
为此神经网络引入交叉熵代价函数cross-entropy函数
弥补 sigmoid 型函数的导数形式易发生饱和(saturate,梯度更新的较慢)的缺陷
-
首先来看平方误差函数(squared-loss function),对于一个神经元(单输入单输出),定义其代价函数:
其中 a=σ(z),z=wx+b
-
然后根据对权值(w)和偏置(b)的偏导(为说明问题的需要,不妨将 x=1,y=0):
根据偏导计算权值和偏置的更新:
无论如何简化,sigmoid 型函数的导数形式 σ′(z) 始终阴魂不散
上文说了 σ′(z) 较容易达到饱和,这会严重降低参数更新的效率。
交叉熵代价函数
对于多输入单输出的神经元结构而言,如下图所示:
我们将其损失函数定义为:
其中:
最终求导得:
- 学习的快慢取决于σ(z) - y,也就是输出的error
好处:错误大时,更新多,学的快
错误小时,学习慢
避免了 σ′(z) 参与参数更新、影响更新效率的问题;
总结:
cross-entropy cost几乎总是比二次cost函数好
如果神经元的方程是线性的, 用二次cost函数 (不会有学习慢的问题)
softmax和overfitting
- 下面介绍另外一种类型的输出层函数:
softmax
第一步:和sigmoid一样
第二步:softmax函数
(分母是将每层所有的神经元的输出值加起来)
(分子是指第L层第J个神经元的输出)
由上可得:
当最后一行z增大时,a也随之增大,其他a随之减小
事实上, 其他a减小的值总是刚好等于a4增加的值, 总和为1不变,Softmax的输出每个值都是大于等于0, 而且总和等于1
所以, 可以认为是概率分布,也可以认为输出的是每个可能分类标签的概率
如果输出层是sigmod层, 不能默认输出总和为1, 所以不能轻易描述为概率分布
- 介绍一种代价函数
log-likelyhood函数
假设输入的是手写数字7的图片,输出比较确定接近7,对于对应的输出7的神经元,概率a接近1,对数C接近0,反之,对数C比较大,所有适合做Cost
是否存在学习慢的问题取决于:
求偏导数,得到:
对比之前用的cross-entropy得到的偏导公式