交叉熵代价函数
改进神经网络学习方法——交叉熵代价函数
《Neural Networks and Deep Learning》 (Michael Nielsen) \text{(Michael Nielsen)} (Michael Nielsen) 笔记 (三)
对二次代价函数: C = ( y − a ) 2 2 ( 1 ) C=\frac{(y-a)^{2}}{2} \qquad(1) C=2(y−a)2(1) a a a是神经元的输出,训练输入为 x = 1 , y = 0 x=1,y=0 x=1,y=0我们有 a = σ ( z ) a=\sigma(z) a=σ(z),其中 z = w x + b z=wx+b z=wx+b,使用链式法则求权重和偏置的偏导数: ∂ C ∂ w = ( a − y ) σ ′ ( z ) x = a σ ′ ( z ) ( 2 ) ∂ C ∂ b = ( a − y ) σ ′ ( z ) = a σ ′ ( z ) ( 3 ) \begin{aligned} \frac{\partial C}{\partial w} &=(a-y) \sigma^{\prime}(z) x=a \sigma^{\prime}(z)\qquad(2) \\ \frac{\partial C}{\partial b} &=(a-y) \sigma^{\prime}(z)=a \sigma^{\prime}(z) \qquad(3)\end{aligned} ∂w∂C∂b∂C=(a−y)σ′(z)x=aσ′(z)(2)=(a−y)σ′(z)=aσ′(z)(3)
从上图可以看出,当神经元的输出接近 1 1 1时,曲线变得相当平,所以 σ ′ ( z ) \sigma^{\prime}(z) σ′(z)就很小,方程 ( 2 ) (2) (2)和 ( 3 ) (3) (3)也告诉我们 ∂ C ∂ w \frac{\partial C} { \partial w} ∂w∂C和 ∂ C ∂ b \frac{\partial C} { \partial b} ∂b∂C会非常小,这其实是学习缓慢的原因所在。
引入交叉熵代价函数
神经元的输出就是 a = σ ( z ) a=\sigma(z) a=σ(z), z = ∑ j w j x j + b z=\sum_{j} w_{j} x_{j}+b z=∑jwjxj+b
定义这个神经元的交叉熵代价函数:
C = − 1 n ∑ x [ y ln a + ( 1 − y ) ln ( 1 − a ) ] ( 4 ) C=-\frac{1}{n} \sum_{x}[y \ln a+(1-y) \ln (1-a)] \qquad(4) C=−n1x∑[ylna+(1−y)ln(1−a)](4)其中 n n n训练数据的总数,求和是在所有的训练输入 x x x上进行的, y y y是对应的目标输出。
将交叉熵看作是代价函数的两点原因:一、交叉熵是非负的。二、如果对于所有的训练输入 x x x,神经元实际的输出接近目标值,达到很好的正确率,那么交叉熵将接近 0 0 0。
交叉熵代价函数有一个比二次代价函数更好的特性是它避免了学习速度下降的问题。
我们将 a = σ ( z ) a=\sigma(z) a=σ(z)带入到 ( 4 ) (4) (4)中应用两次链式法则,得 ∂ C ∂ w j = − 1 n ∑ x ( y σ ( z ) − ( 1 − y ) 1 − σ ( z ) ) ∂ σ ∂ w j = − 1 n ∑ x ( y σ ( z ) − ( 1 − y ) 1 − σ ( z ) ) σ ′ ( z ) x j \begin{aligned} \frac{\partial C}{\partial w_{j}} &=-\frac{1}{n} \sum_{x}\left(\frac{y}{\sigma(z)}-\frac{(1-y)}{1-\sigma(z)}\right) \frac{\partial \sigma}{\partial w_{j}} \\ &=-\frac{1}{n} \sum_{x}\left(\frac{y}{\sigma(z)}-\frac{(1-y)}{1-\sigma(z)}\right) \sigma^{\prime}(z) x_{j} \end{aligned} ∂wj∂C=−n1x∑(σ(z)y−1−σ(z)(1−y))∂wj∂σ=−n1x∑(σ(z)y−1−σ(z)(1−y))σ′(z)xj注: ∂ C ∂ w j = − 1 n ∑ ∂ ∂ w j [ y ln a + ( 1 − y ) ln ( 1 − a ) ] = − 1 n ∑ ∂ ∂ a [ y ln a + ( 1 − y ) ln ( 1 − a ) ] ⋅ ∂ a ∂ w j = − 1 n ∑ ( y a − 1 − y 1 − a ) ⋅ ∂ a ∂ w j = − 1 n ∑ ( y s ( z ) − 1 − y 1 − s ( z ) ) ∂ ζ ( z ) ∂ w j = − 1 n ∑ ( y ζ ( z ) − 1 − y 1 − ζ ( z ) ) ζ ′ ( z ) x j \begin{aligned} \frac{\partial C}{\partial w_{j}} &=-\frac{1}{n} \sum \frac{\partial}{\partial w_{j}}[y \ln a+(1-y) \ln (1-a)] \\ &=-\frac{1}{n} \sum \frac{\partial}{\partial a}[y \ln a+(1-y) \ln (1-a)] \cdot \frac{\partial a}{\partial w_{j}} \\ &=-\frac{1}{n} \sum\left(\frac{y}{a}-\frac{1-y}{1-a}\right)\cdot \frac{\partial a}{\partial w_{j}} \\ &=-\frac{1}{n} \sum\left(\frac{y}{s(z)}-\frac{1-y}{1-s(z)}\right) \frac{\partial \zeta(z)}{\partial w_{j}} \\ &=-\frac{1}{n} \sum\left(\frac{y}{\zeta(z)}-\frac{1-y}{1-\zeta(z)}\right) \zeta^{\prime}(z) x_{j} \end{aligned} ∂wj∂C=−n1∑∂wj∂[ylna+(1−y)ln(1−a)]=−n1∑∂a∂[ylna+(1−y)ln(1−a)]⋅∂wj∂a=−n1∑(ay−1−a1−y)⋅∂wj∂a=−n1∑(s(z)y−1−s(z)1−y)∂wj∂ζ(z)=−n1∑(ζ(z)y−1−ζ(z)1−y)ζ′(z)xj合并结果简化成: ∂ C ∂ w j = 1 n ∑ x σ ′ ( z ) x j σ ( z ) ( 1 − σ ( z ) ) ( σ ( z ) − y ) \frac{\partial C}{\partial w_{j}}=\frac{1}{n} \sum_{x} \frac{\sigma^{\prime}(z) x_{j}}{\sigma(z)(1-\sigma(z))}(\sigma(z)-y) ∂wj∂C=n1x∑σ(z)(1−σ(z))σ′(