深度学习(一) cross-entropy和sofrmax

Cross-entropy

神经网络的学习行为和人脑差的很多, 开始学习很慢, 后来逐渐增快

为什么?
学习慢 => 偏导数 ∂C/∂w 和 ∂C/∂b 值小

回顾之前学习的Cost函数:



回顾sigmoid函数:


深度学习(一) cross-entropy和sofrmax_第1张图片
当神经元的输出接近1或0时,曲线很平缓,因而会使偏导数 ∂C/∂w 和 ∂C/∂b 值小,致使学习很慢

如何增快学习?
为此神经网络引入交叉熵代价函数cross-entropy函数
弥补 sigmoid 型函数的导数形式易发生饱和(saturate,梯度更新的较慢)的缺陷

  • 首先来看平方误差函数(squared-loss function),对于一个神经元(单输入单输出),定义其代价函数:



    其中 a=σ(z),z=wx+b

  • 然后根据对权值(w)和偏置(b)的偏导(为说明问题的需要,不妨将 x=1,y=0):



    根据偏导计算权值和偏置的更新:


    深度学习(一) cross-entropy和sofrmax_第2张图片

    无论如何简化,sigmoid 型函数的导数形式 σ′(z) 始终阴魂不散
    上文说了 σ′(z) 较容易达到饱和,这会严重降低参数更新的效率。

交叉熵代价函数

对于多输入单输出的神经元结构而言,如下图所示:


深度学习(一) cross-entropy和sofrmax_第3张图片

我们将其损失函数定义为:

                

其中:

    

最终求导得:
    
深度学习(一) cross-entropy和sofrmax_第4张图片
  • 学习的快慢取决于σ(z) - y,也就是输出的error

好处:错误大时,更新多,学的快
    错误小时,学习慢
   避免了 σ′(z) 参与参数更新、影响更新效率的问题;
总结:
cross-entropy cost几乎总是比二次cost函数好
如果神经元的方程是线性的, 用二次cost函数 (不会有学习慢的问题)

softmax和overfitting

  • 下面介绍另外一种类型的输出层函数:

softmax

第一步:和sigmoid一样

      

第二步:softmax函数

      

    (分母是将每层所有的神经元的输出值加起来)
    (分子是指第L层第J个神经元的输出)
深度学习(一) cross-entropy和sofrmax_第5张图片

由上可得:

当最后一行z增大时,a也随之增大,其他a随之减小
事实上, 其他a减小的值总是刚好等于a4增加的值, 总和为1不变,Softmax的输出每个值都是大于等于0, 而且总和等于1
所以, 可以认为是概率分布,也可以认为输出的是每个可能分类标签的概率
如果输出层是sigmod层, 不能默认输出总和为1, 所以不能轻易描述为概率分布

  • 介绍一种代价函数

log-likelyhood函数


假设输入的是手写数字7的图片,输出比较确定接近7,对于对应的输出7的神经元,概率a接近1,对数C接近0,反之,对数C比较大,所有适合做Cost
 是否存在学习慢的问题取决于:

    

    求偏导数,得到:

        
深度学习(一) cross-entropy和sofrmax_第6张图片

    对比之前用的cross-entropy得到的偏导公式
     

你可能感兴趣的:(深度学习(一) cross-entropy和sofrmax)