softmax(一):从梯度的角度分析,softmax与sigmoid在损失函数中的不同

面试的时候讨论过这个问题,我觉得这个问题可以深度思考一下,顺便回顾一下梯度的计算方法

1、softmax+cross_entroy

这里只考虑后面的损失函数,前面的卷积输出,由模拟数据代替,这里 z 1 , z 2 , z 3 z_1, z_2,z_3 z1,z2,z3是网络最后一层的输出,这里我给出了虚假数据 z 1 = − 1.4694 , z 2 = − 2.2030 , z 3 = 2.4750 z_1= -1.4694,z_2 = -2.2030,z_3 = 2.4750 z1=1.4694z2=2.2030z3=2.4750 z 1 , z 2 , z 3 z_1, z_2,z_3 z1,z2,z3经过softmax之后得到概率值 p 1 = 0.0188 , p 2 = 0.0090 , p 3 = 0.9721 p_1=0.0188,p_2 = 0.0090,p_3 = 0.9721 p1=0.0188p2=0.0090p3=0.9721,得到的概率,在进入到cross_entroy,计算得到loss值,loss的计算公式如下:
L o s s = − ∑ i 3 y i ∗ l o g ( p i ) Loss = -\sum_i^3{y_i*log(p_i)} Loss=i3yilog(pi)
其中,输入标签y=0类别,因此转换为one_hot y = [1,0,0]
在这里插入图片描述

1.2、softmax+cross_entroy下,计算 z i z_i zi处的梯度值

下图是计算 z 1 , z 2 , z 3 z_1, z_2, z_3 z1z2,z3处的梯度值,梯度计算完,总结下来是:
φ L o s s φ z i = { p i − 1 , i = y p i , i  ≠ y \frac{\varphi Loss}{\varphi z_i} = \begin{cases} p_i - 1, & \text {i = y} \\ p_i, & \text{i $\neq$y} \end{cases} φziφLoss={pi1,pi,i = y=y
这里关于梯度值性质的分析,请看这里王峰大神的知乎Softmax理解之二分类与多分类,超级醍醐灌顶,需要反复去看,理解!
在这里插入图片描述

2、sigmoid + binary_cross_entroy

这里我们用三个sigmoid + binary_cross_entroy来替换softmax,输入数据 z 1 = − 1.4694 , z 2 = − 2.2030 , z 3 = 2.4750 z_1= -1.4694,z_2 = -2.2030,z_3 = 2.4750 z1=1.4694z2=2.2030z3=2.4750是一样的,经过sigmoid之后,得到的概率,变为 p 1 = 0.1870 , p 2 = 0.0995 , p 3 = 0.9224 p_1=0.1870,p_2 = 0.0995,p_3 = 0.9224 p1=0.1870p2=0.0995p3=0.9224,binary_cross_entroy的公式为 − [ y ∗ l o g ( p ) + ( 1 − y ) ∗ l o g ( 1 − p ) ] -[y*log(p)+(1-y)*log(1-p)] [ylog(p)+(1y)log(1p)],最后loss的是三个loss求平均值:
L o s s = − 1 3 ∑ i 3 − [ y i ∗ l o g ( p i ) + ( 1 − y i ) ∗ l o g ( 1 − p i ) ] Loss = -\frac{1}{3}\sum_i^3{-[y_i*log(p_i)+(1-y_i)*log(1-p_i)]} Loss=31i3[yilog(pi)+(1yi)log(1pi)]
在这里插入图片描述

2.2、sigmoid+binary_cross_entroy下,计算 z i z_i zi处的梯度值

下图是计算 z 1 , z 2 , z 3 z_1, z_2, z_3 z1z2,z3处的梯度值,梯度计算完,总结下来是:
φ L o s s φ z i = { ( p i − 1 ) / 3 , i = y p i / 3 , i  ≠ y \frac{\varphi Loss}{\varphi z_i} = \begin{cases} (p_i - 1)/3, & \text {i = y} \\ p_i /3, & \text{i $\neq$y} \end{cases} φziφLoss={(pi1)/3,pi/3,i = y=y
在这里插入图片描述
上面计算时,发现梯度都除以了3,为了和softmax + cross_entroy的梯度做比较,那么我们可以把loss值由平均值改为求和:
L o s s = − ∑ i 3 − [ y i ∗ l o g ( p i ) + ( 1 − y i ) ∗ l o g ( 1 − p i ) ] Loss = -\sum_i^3{-[y_i*log(p_i)+(1-y_i)*log(1-p_i)]} Loss=i3[yilog(pi)+(1yi)log(1pi)]

3、两种方式的计算梯度的公式

那么我们计算的sigmoid + binary_cross_entroy的梯度如下:

φ L o s s φ z i = { p i − 1 , i = y p i , i  ≠ y \frac{\varphi Loss}{\varphi z_i} = \begin{cases} p_i - 1, & \text {i = y} \\ p_i , & \text{i $\neq$y} \end{cases} φziφLoss={pi1,pi,i = y=y
φ L o s s φ z 1 = − 0.813 , φ L o s s φ z 2 = 0.0995 , φ L o s s φ z 3 = 0.9224 \frac{\varphi Loss}{\varphi z_1} = -0.813, \frac{\varphi Loss}{\varphi z_2} = 0.0995, \frac{\varphi Loss}{\varphi z_3} = 0.9224 φz1φLoss=0.813φz2φLoss=0.0995φz3φLoss=0.9224

我们也得到了softmax + cross_entroy计算的梯度如下:

φ L o s s φ z i = { p i − 1 , i = y p i , i  ≠ y \frac{\varphi Loss}{\varphi z_i} = \begin{cases} p_i - 1, & \text {i = y} \\ p_i , & \text{i $\neq$y} \end{cases} φziφLoss={pi1,pi,i = y=y
φ L o s s φ z 1 = − 0.9812 , φ L o s s φ z 2 = 0.0090 , φ L o s s φ z 3 = 0.9721 \frac{\varphi Loss}{\varphi z_1} = -0.9812, \frac{\varphi Loss}{\varphi z_2} = 0.0090, \frac{\varphi Loss}{\varphi z_3} = 0.9721 φz1φLoss=0.9812φz2φLoss=0.0090φz3φLoss=0.9721

可以看到,两种方法,计算梯度的方式都是一样的,那么唯一影响梯度的值,输入的网络估计值 z i z_i zi是一样的,那么,二者唯一的区别点就是softmax和sigmoid这两个函数了。

3.2、softmax和sigmoid

softmax函数如下:
s o f t m a x ( z i ) = e z i ∑ i k e z k \begin{aligned} softmax(z_i) & = \frac{e^{z_i}}{\sum_i^k{e^{z_k}}} \end{aligned} softmax(zi)=ikezkezi

sigmoid函数如下:
s i g m o i d ( z i ) = 1 1 + e − z i sigmoid(z_i) = \frac{1}{1 + e^{-z_i}} sigmoid(zi)=1+ezi1

3.2、两类时,softmax和sigmoid完全等价

当softmax为二类时,softmax公式可以简化为:
s o f t m a x ( z 1 ) = 1 1 + e z 2 − z 1 softmax(z_1) = \frac{1}{1 + e^{z_2-z_1}} softmax(z1)=1+ez2z11
s i g m o i d ( z 1 ) = 1 1 + e − z 1 sigmoid(z_1) = \frac{1}{1 + e^{-z_1}} sigmoid(z1)=1+ez11

可以看到,二者的不同是在 − z 1 和 z 2 − z 1 -z1和z_2-z_1 z1z2z1,二者是一种线性变换,-z1完全可以替代z2-z1,完全可以由z1替代,因此,softmax为二类时,softmax和sigmoid是完全相同的。

3.3、两类时,softmax的梯度关系

那么我们来计算一下softmax二分类时的梯度值:
我们知道,不管是softmax还是sigmoid,梯度的计算方式都是一样的,即
φ L o s s φ z i = { p i − 1 , i = y p i , i  ≠ y \frac{\varphi Loss}{\varphi z_i} = \begin{cases} p_i - 1, & \text {i = y} \\ p_i , & \text{i $\neq$y} \end{cases} φziφLoss={pi1,pi,i = y=y
当y = [1, 0]

φ L o s s φ z 1 = p 1 − 1 , φ L o s s φ z 2 = p 2 \frac{\varphi Loss}{\varphi z_1} = p_1 - 1, \frac{\varphi Loss}{\varphi z_2} = p_2 φz1φLoss=p11φz2φLoss=p2

因为softmax中 p 2 + p 1 = 1 , 即 p 2 = 1 − p 1 p_2 + p_1 = 1,即 p_2 = 1 - p_1 p2+p1=1p2=1p1,因此:

φ L o s s φ z 1 = p 1 − 1 , φ L o s s φ z 2 = 1 − p 1 \frac{\varphi Loss}{\varphi z_1} = p_1 - 1, \frac{\varphi Loss}{\varphi z_2} = 1 - p_1 φz1φLoss=p11φz2φLoss=1p1
所以,softmax二分类时 z 1 z_1 z1 z 2 z_2 z2处的导数是梯度方向相反,幅度相等。

3.4、多类时,softmax其实是多个二分类器的线性组合

请看这里王峰大神的知乎Softmax理解之二分类与多分类

从上面的例子可以得到:

φ L o s s φ z 1 = − 0.9812 , φ L o s s φ z 2 = 0.0090 , φ L o s s φ z 3 = 0.9721 \frac{\varphi Loss}{\varphi z_1} = -0.9812, \frac{\varphi Loss}{\varphi z_2} = 0.0090, \frac{\varphi Loss}{\varphi z_3} = 0.9721 φz1φLoss=0.9812φz2φLoss=0.0090φz3φLoss=0.9721

发现目标分数 z 1 z_1 z1可以拆分为:
− 0.9812 = − 0.0090 − 0.9721 -0.9812 = -0.0090 - 0.9721 0.9812=0.00900.9721

-0.0090与 z 2 z_2 z2处的梯度是一对正负梯度, - 0.9721与 z 3 z_3 z3处的梯度是一对正负梯度,我们上面说过,二分类时, z 1 和 z 2 z_1和z_2 z1z2处的梯度是正负梯度,因此我们可以这样理解,对于每一个类别,Softmax实际上是训练了C-1个二分类器的线性组合,而这 C-1个二分类器的权重恰好等于非目标概率 ,那么对于这个类别来说,只需要训练 C ∗ ( C − 1 ) 2 \frac{C*(C-1)}{2} 2C(C1)个分类器,对于3个类别来说,是三个分类器,即1vs2,2vs3,3vs1。

3.5、多类时,softmax与sigmoid的区别

例如3类时,softmax其实是3个二元分类器的线性组合,即1vs2,2vs3,3vs1。
而3类时,sigmoid也是3个二元分类器,即1vs非1,2vs非2,3vs非3

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值