softmax(二):softmax交叉熵不是真正的目标函数

最近一直在消化、吸收大神的输出,在这里主要把思路捋顺,试着增加自己的理解和扩展。
首先,上链接,还有我的膝盖,拜王峰大神,可以直接看大神的文字!
从最优化的角度看待Softmax损失函数
Softmax理解之Smooth程度控制

一、优化的目标函数

做分类的都知道,softmax交叉熵,是常用的分类损失函数,那么,它是怎么来的呢?
用CNN提取n维特征之后,我们想要拿这个n维特征,去预测,是狗,是猫,还是人?怎么预测呢,总不能直接拿n维特征吧,我们想要只想知道,是狗,是猫,还是人。为了解决这个问题,我们将n维特征经过一个线性变换,让cnn网络输出3分数,论文里面常叫做logit,来告诉我们,是猫多少分,是狗多少分,是人多少分。如果真实类别是狗,那么我们的目标函数希望,狗的分数,要比猫和人的分数都高,可以这么说,输出C个分数,时目标分数比最大的非目标分数更大:
l o s s = max ⁡ ( max ⁡ i ≠ y z i − z y , 0 ) (1) loss = \max(\max_{i \neq y}{z_i} - z_y, 0)\tag{1} loss=max(i=ymaxzizy,0)(1)
其中, z y z_y zy是我们的目标分数,即是狗的分数。当然,这个目标函数之前,还有一些其他的,可自己去看王峰大神的博客。
注意看,公式(1),每次都从非目标中挑出一个最大值参与目标函数,那么,也就是说,每次,最多只有一个正梯度(因为只有一个非目标分数)和一个负梯度(只有一个目标分数),那这优化起来也太慢了吧,于是,max的smooth版本就出来了。

二、目标函数的第一次smooth:LogSumExp

LogSumExp函数如下:
L S E = l o g ∑ i n e x p ( x i ) LSE = log \sum_{i}^nexp(x_i) LSE=loginexp(xi)
二者的关系是:
L S E > = m a x LSE >= max LSE>=max
至于为啥,这个真的是非常数学的东西了,感兴趣的,可以自行去google,这里再次膜拜一下数学,学好数学,称霸天下!
用上LSE,就会发现,非目标分数的最大值,不管选择了谁,都和其他非目标分数扯上了关系,这样,其他非目标分数的分支,也会有梯度了。
smooth之后的目标函数如下:
l o s s l s e = max ⁡ ( l o g ∑ i = 1 , i ≠ y C e z i − z y , 0 ) loss_{lse} = \max(log \sum_{i=1,i \neq y}^Ce^{z_i} - z_y,0) losslse=max(logi=1,i=yCezizy,0)

不懂之处:峰神说,使用LogSumExp函数相当于变相地加了一定的m???

三、目标函数的第二次smooth:softmax交叉熵

峰神说了,接着smooth,Relu函数 max ⁡ ( x , 0 ) \max(x,0) max(x,0)也有一个smooth版本,即softplus函数, l o g ( 1 + e x ) log(1+e^x) log(1+ex),那么用这个函数,接着smooth
L s o f t m a x = l o g ( 1 + e l o g ( ∑ i = 1 , i ≠ y C e z i ) − z y ) = l o g ( 1 + ∑ i = 1 , i ≠ y C e z i e z y ) = l o g ∑ i = 1 C e z i e z y = − l o g e z y ∑ i = 1 C e z i \begin{aligned} L_{softmax} & = log(1 + e^{log (\sum_{i=1,i \neq y}^Ce^{z_i}) - z_y}) \\ &=log(1+ \frac{\sum_{i=1,i \neq y}^Ce^{z_i}}{e^{z_y}}) \\ &= log{\frac{\sum_{i=1}^Ce^{z_i}}{e^{z_y}}} \\ &= -log{\frac{e^{z_y}}{\sum_{i=1}^Ce^{z_i}}} \end{aligned} Lsoftmax=log(1+elog(i=1,i=yCezi)zy)=log(1+ezyi=1,i=yCezi)=logezyi=1Cezi=logi=1Ceziezy
这个就是我们熟知的softmax交叉熵。

所以我们常用的softmax,其实不是max的smooth版本,max函数输出的是一个最大值,而softmax更倾向的是argmax,类似[1,0,0]。

你可能感兴趣的:(深度学习算法,深度学习,机器学习,cnn)