sigmoid作为激活函数时使用交叉熵损失函数cross-entropy原由

在大多数使用sigmoid作为激活函数时,神经网络中通过使用交叉熵损失函数cross-entropy可使网络参数能够快速的从错误中学习问题,使梯度下降中权值w以及偏秩b的下降速率得以提升,即可较为快速的得出网络结果。

在下方图示中,我们给出神经网络中对于使用sigmoid作为激活函数,在使用二次代价函数(quadratic cost)时产生的一种下降速率缓慢的数据图像。

图1-1

对于上图两神经网络中,使用quadratic cost损失函数,并分别使用输入数据1.0,1.0,输出数据要求为0.09,0.20,通过查看其w,b值的计算速度,可以得出对于图二情况下,对于前150个左右的学习时期,权重和偏秩根本没有太大变化。为什么会发生如此变化?

其根本原因在于对于权值w和偏秩b,其下降速率由其偏导数 ∂C/∂w 和 ∂C/∂b 决定。

当其偏导数大时,w与b的下降速率快,最终形成神经网络结果时间短。

对于权值w的偏导数,可根据反向传播过程中的4个基本公式

\delta ^{L}=\bigtriangledown_{a}C\bigodot \sigma ^{'}\left ( z^{L} \right )                                                  (1)

\delta ^{l}=\left ( \left ( w^{l+1} \right )^{T}\delta ^{l+1} \right )\bigodot \sigma ^{'}\left ( z^{L} \right )                                  (2)

\frac{\partial C}{\partial b_{l}^{j}}=\delta_{j}^{l}                                                                         (3)

\frac{\partial C}{\partial w_{jk}^{l}}=a_{k}^{l-1}\delta_{j}^{l}                                                                (4)

其中a=\sigma \left ( x \right )=\frac{1}{1+e^{-z}}z=\sum _{j}w_{j}x_{j}+b

对于公式(1)其内涵为,\bigtriangledown _{a}C为损失函数C对于a的偏导(a为神经网络中输入值通过计算到某一神经元时该神经元的值z,经过激活函数优化后的结果)\sigma ^{'}\left ( z^{L} \right )为激活函数的对于z的偏导数。

即对于反向传播中公式(1)对于某L层中第j个神经元。

\delta_{j}^{L}=\bigtriangledown_{a}C\bigodot \sigma ^{'}\left ( z_{j}^{L} \right )=\frac{\partial C}{\partial a_{j}^{L}}\sigma ^{'}\left ( z_{j}^{L} \right )

公式(3)推导过程如下:

\frac{\partial C}{\partial w_{jk}^{l}}=\frac{\partial C}{\partial z_{j}^{l}}\frac{\partial z_{j}^{l}}{\partial w_{jk}^{l}}=\delta _{j}^{l}\frac{\partial (w_{jk}^{l}a_{k}^{l-1}+b_{j}^{l})}{\partial w_{jk}^{l}}=a_{k}^{l-1}\delta _{j}^{l}                 (5)

因此下降速率大小收到偏导数的影响(公式3,4)。

 

接下来回答为什么对于使用二次代价函数quadratic cost会产生梯度下降缓慢?

对于第l-1层到l层,第l-1层第k个神经元到第l层中第j个神经元。其梯度值:

\frac{\partial C}{\partial w_{jk}^{l}}=\frac{\partial C}{\partial z_{j}^{l}}\frac{\partial z_{j}^{l}}{\partial w_{jk}^{l}}=\frac{\partial C}{\partial a_{j}^{l}}\frac{\partial a_{j}^{l}}{\partial z_{j}^{l}}\frac{\partial z_{j}^{l}}{\partial w_{jk}^{l}}=\frac{\partial C}{\partial a_{j}^{l}}\sigma ^{'}(z^{_{j}^{l}})\frac{\partial z_{j}^{l}}{\partial w_{jk}^{l}}=(a_{j}^{l}-y)\sigma ^{'}(z^{_{j}^{l}})a_{k}^{l-1}                 (6)

即对于当使用quadratic cost函数时,其结果会收到sigmoid的影响。从而导致当z接近于1或0时,其sigmoid梯度值接近于0从而导致公式(3)下降速率为0;

为解决其学习速度缓慢问题,通过使用交叉熵损失函数cross-entropy替换原有的quadratic cost损失函数来解决此问题。

交叉熵损失函数

相较于cross-entropy函数,交叉熵损失函数为:

使用交叉熵损失函数可确保下降速率缓慢公式推导

根据图上公式6,通过使用cross-entropy替代quadratic cost导致其\frac{\partial C}{\partial a_{j}^{l}}改变

以下为改变后推导:

\frac{\partial C}{\partial w_{jk}^{l}}=\frac{\partial C}{\partial z_{j}^{l}}\frac{\partial z_{j}^{l}}{\partial w_{jk}^{l}}=\frac{\partial C}{\partial a_{j}^{l}}\frac{\partial a_{j}^{l}}{\partial z_{j}^{l}}\frac{\partial z_{j}^{l}}{\partial w_{jk}^{l}}=\frac{\partial C}{\partial a_{j}^{l}}\sigma ^{'}(z^{_{j}^{l}})\frac{\partial z_{j}^{l}}{\partial w_{jk}^{l}}=-\frac{1}{n}\sum _{x} [\frac{y}{a^{_{k}^{l}}}-\frac{1-y}{1-a_{k}^{l}}]\sigma ^{'}(z^{_{j}^{l}})a_{k}^{l-1}=-\frac{1}{n}\sum _{x} [\frac{y-a_{k}^{l}}{a_{k}^{l}(1-a_{k}^{l})}]\sigma ^{'}(z^{_{j}^{l}})a_{k}^{l-1}

根据\sigma ^{'}(z)=\sigma (z)\sigma (1-\sigma (z))将其带入,化简后可得:

-\frac{1}{n}\sum _{x} [\frac{y-a_{k}^{l}}{a_{k}^{l}(1-a_{k}^{l})}]\sigma ^{'}(z^{_{j}^{l}})a_{k}^{l-1}=-\frac{1}{n}\sum _{x}a_{k}^{l-1}(y-a_{k}^{l})

由此其梯度值不受sigmoid函数影响,减少了出现梯度下降缓慢的情况。

下图为更改损失函数后的几个测试图像。

 

参考

http://neuralnetworksanddeeplearning.com/chap3.html

优快云:https://www.cnblogs.com/wlzy/p/7751297.html

 

不是数学系,没那么严谨,可能有地方是错的,但个人理解大概意思是这样。

### 交叉熵损失概述 #### 概念 交叉熵损失是一种衡量模型预测概率分布与真实标签之间差异的方法。对于正确的类别,当模型的预测概率越接近1,损失越小;如果预测概率接近0,则损失会变得非常大。相反,对于错误的类别,当模型的预测概率越接近0,损失越小;而较大的预测概率则会使损失增加[^1]。 #### 公式 在二分类问题中,交叉熵损失可表示为: \[ L(y, \hat{y}) = -\left[y \cdot \log(\hat{y}) + (1-y)\cdot\log(1-\hat{y})\right] \] 其中 \( y \in {0, 1} \) 是真实的标签,\( \hat{y} \in [0, 1] \) 表示模型预测的概率值。此公式适用于神经网络输出层采用sigmoid激活函数的情况[^2]。 而在多分类情况下,假设共有C类,则交叉熵损失定义如下: \[ L(Y,\hat{Y})=-\sum_{i=1}^{C}{Y_i}\log{\hat{Y}_i} \] 这里 \( Y=[Y_1,Y_2,...,Y_C]^T \) 和 \( \hat{Y}=[\hat{Y}_1,\hat{Y}_2,...,\hat{Y}_C]^T \) 分别代表实际标签向量和预测概率向量,且满足 \(\sum_{i=1}^CY_i=\sum_{i=1}^C\hat{Y}_i=1\) 。此通常配合Softmax作为最后一层激活函数来计算最终输出[^3]。 #### 应用场景 该方法常被应用于各种类型的监督学习任务中的分类器训练过程里,尤其是在涉及大量数据集以及复杂特征空间的任务上表现优异。具体来说,在图像识别、自然语言处理等领域内广泛应用着基于深度学习框架下的卷积神经网路(CNNs),循环神经网络(RNNs)等架构,并通过引入交叉熵损失来进行有效的参数调整以提高泛化能力。 ```python import torch.nn as nn criterion = nn.CrossEntropyLoss() output = model(input_data) loss = criterion(output, target_labels) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值