sigmoid、softmax函数/交叉熵损失函数/二分类、多分类详细推导过程

一、交叉熵损失函数

1、离散变量 i i i的概率分布为 P ( i ) P(i) P(i),熵的公式: E n t r o p y = − ∑ i P ( i ) l o g P ( i ) Entropy=-\sum_iP(i)logP(i) Entropy=iP(i)logP(i)
2、连续变量 x x x的概率分布为 P ( x ) P(x) P(x),熵的公式: E n t r o p y = − ∫ P ( x ) l o g P ( x ) d x Entropy=-\int P(x)logP(x)dx Entropy=P(x)logP(x)dx
3、交叉熵:主要度量两个概率分布间的差异性信息: H ( P , Q ) = − ∑ i = 0 N P ( x ) l o g Q ( x ) H(P,Q)=-\sum_{i=0}^NP(x)logQ(x) H(P,Q)=i=0NP(x)logQ(x)

1)二分类

N N N个样本,总 L o s s Loss Loss值为所有样本的 L o s s ( i ) Loss^{(i)} Loss(i)均值: L o s s = 1 N ∑ i = 1 N L o s s ( i ) Loss=\frac{1}{N}\sum_{i=1}^NLoss^{(i)} Loss=N1i=1NLoss(i) L o s s ( i ) = − [ y ( i ) ∗ l o g ( y ^ ( i ) ) + ( 1 − y ( i ) ) ∗ l o g ( 1 − y ^ ( i ) ) ] Loss^{(i)}=-[y^{(i)}*log(\hat y^{(i)})+(1-y^{(i)})*log(1-\hat y^{(i)})] Loss(i)=[y(i)log(y^(i))+(1y(i))log(1y^(i))]单个样本 L o s s ( i ) Loss^{(i)} Loss(i)计算过程如上所示。要注意区分 y ( i ) y^{(i)} y(i)以及 y ^ ( i ) \hat y^{(i)} y^(i) y ( i ) y^{(i)} y(i)是真实的标签,只能取值0或1。 y ^ ( i ) \hat y^{(i)} y^(i)是经过 s i g m o i d sigmoid sigmoid函数预测出的概率。

2)多分类

N N N个样本,总 L o s s Loss Loss值为所有样本的 L o s s ( i ) Loss^{(i)} Loss(i)均值: L o s s = 1 N ∑ i = 1 N L o s s ( i ) Loss=\frac{1}{N}\sum_{i=1}^NLoss^{(i)} Loss=N1i=1NLoss(i) L o s s ( i ) = − ∑ k = 1 q y k ( i ) ∗ l o g ( y ^ k ( i ) ) Loss^{(i)}=-\sum_{k=1}^{q}y_k^{(i)}*log(\hat y_k^{(i)}) Loss(i)=k=1qyk(i)log(y^k(i))单个样本 L o s s ( i ) Loss^{(i)} Loss(i)计算过程如上所示。要注意区分 y k ( i ) y_k^{(i)} yk(i)以及 y ^ k ( i ) \hat y_k^{(i)} y^k(i) y k ( i ) y_k^{(i)} yk(i)是真实的标签对应类别,是第 k k k类就取值为1,否则为0,会有很多项为0被屏蔽掉不参与计算。
y ^ k ( i ) \hat y_k^{(i)} y^k(i)是经过 s o f t m a x softmax softmax函数预测出的概率。也就是说,交叉熵损失函数只关心正确标签对应的概率取值为多少,这个概率值越大,就越能保证能够正确分类结果。

3)分类问题为什么用交叉熵损失函数而不是MSE?

1、MSE无差别地关注全部类别上预测概率和真实概率的差;交叉熵关注的是正确类别的预测概率
2、涉及反向求导过程。
MSE因为线性变换之后要套一层sigmoid激活函数,反向求导的时候,开始回趋于0,学习速率非常慢,甚至可能梯度消失。
交叉熵损失函数最后参数求导结果只与(预测值-真实值)*样本值有关。
在这里插入图片描述

4)MSE和交叉熵损失函数分别适合什么场景?

MSE:适合输出为连续、并且最后一层不含Sigmoid、Softmax激活函数的神经网络。
交叉熵损失函数:适合二分类、多分类的场景。

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
交叉熵损失函数是深度学习中常用的一个损失函数,它是用来衡量实际输出与期望输出之间的差异的。在分类问题中,如果使用softmax作为输出层的激活函数,那么就可以使用交叉熵损失函数来计算误差。因此,采用softmax交叉熵损失函数是指在使用softmax作为输出层激活函数时所使用的损失函数。 而交叉熵损失函数是一种广义的损失函数,它可以用于多种深度学习任务,不仅仅局限于分类任务。在分类问题中,我们通常使用softmax作为输出层的激活函数,从而使得交叉熵损失函数成为了常用的损失函数之一。但是,在其他任务中,我们可能需要使用其他的输出层激活函数,例如sigmoid、tanh等,这时候我们仍然可以使用交叉熵损失函数来计算误差。 下面是使用Python实现采用softmax交叉熵损失函数交叉熵损失函数的代码: ``` import numpy as np # 采用softmax交叉熵损失函数 def softmax_cross_entropy_loss(y, y_hat): n = y.shape loss = -np.sum(y * np.log(y_hat + 1e-12)) / n return loss # 交叉熵损失函数 def cross_entropy_loss(y, y_hat): n = y.shape loss = -np.sum(y * np.log(y_hat + 1e-12) + (1 - y) * np.log(1 - y_hat + 1e-12)) / n return loss # 测试代码 y = np.array([0, 1, 0, 0]) y_hat = np.array([0.1, 0.7, 0.1, 0.1]) print("采用softmax交叉熵损失函数:", softmax_cross_entropy_loss(y, y_hat)) print("交叉熵损失函数:", cross_entropy_loss(y, y_hat)) ``` 其中,y表示实际输出,y_hat表示模型预测输出。采用softmax交叉熵损失函数只需要计算实际输出和预测输出之间的差异,而交叉熵损失函数还需要考虑实际输出和预测输出都为0或1时的情况。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值