softmax、cross entropy和softmax loss学习笔记

时间:2021-05-17 16:21:21

之前做手写数字识别时,接触到softmax网络,知道其是全连接层,但没有搞清楚它的实现方式,今天学习Alexnet网络,又接触到了softmax,果断仔细研究研究,有了softmax,损失函数自然不可少。一起学习记录一下。

主要参考的博文:http://blog.csdn.net/u014380165/article/details/77284921

侵删!

先讲softmax。

softmax是一个全连接层,功能是将卷积神经网络计算后的多个神经元输出,映射到(0,1)区间,给出每种分类的概率情况。下面主要记录全连接层到损失层是如何计算的。

softmax、cross entropy和softmax loss学习笔记

图的等号左边为全连接,w为权值,x是全连接层的输入(卷积运算激活池化后的特征向量,不一定为N*1,可以为S*P,这里只不过为了便于理解计算,把向量拉直为SP*1,即N*1,N=SP)假设全连接层前面连接的是一个卷积层,这个卷积层的输出是100个特征(也就是我们常说的feature map的channel为100),每个特征的大小是4*4,那么在将这些特征输入给全连接层之前会将这些特征flat成N*1的向量(这个时候N就是100*4*4=1600)。再看W,W是T*N的矩阵,其中N是由输入决定的,T是有网络输出的类别决定的,比如输出为10个类,则T=10.W和x运算后得到一个T*1的向量,向量大小没有限制。下一步就是softmax,softmax作用是将T个输入映射为概率,刚才打比方说有10个类别,则每个输出值就是每种类别的概率,显然概率之和为。分母为所有情况之和,分子为各种单一情况运算。

终于转化为概率了,那接下来为了衡量好坏,当然是选择误差函数了,因为是概率输入,当然理所当然使用交叉熵了,

Cross entropy

首先理一下熵的概念,现有关于样本集的2个概率分布p和q,其中p为真实分布,q非真实分布。按照真实分布p来衡量识别一个样本的所需要的编码长度的期望(即平均编码长度)为:

softmax、cross entropy和softmax loss学习笔记

如果使用错误分布q来表示来自真实分布p的平均编码长度,则应该是:

softmax、cross entropy和softmax loss学习笔记

其中第一个期望为信息熵,反应的是香农信息量的期望,第二个为交叉熵。信息熵代表的是随机变量或整个系统的不确定性,熵越大,随机变量或系统的不确定性就越大

交叉熵可在神经网络(机器学习)中作为损失函数,p表示真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量p与q的相似性。交叉熵作为损失函数还有一个好处是使用sigmoid函数在梯度下降时能避免均方误差损失函数学习速率降低的问题,因为学习速率可以被输出的误差所控制。
交叉熵越低,这个策略就越好,最低的交叉熵也就是使用了真实分布所计算出来的信息熵,因为此时 softmax、cross entropy和softmax loss学习笔记 ,交叉熵 = 信息熵。这也是为什么在机器学习中的分类算法中,我们总是最小化交叉熵,因为交叉熵越低,就证明由算法所产生的策略最接近最优策略,也间接证明我们算法所算出的非真实分布越接近真实分布。

链接:https://www.zhihu.com/question/41252833/answer/195901726

链接:https://www.zhihu.com/question/41252833/answer/108777563

softmax的损失函数叫做softmax loss,其定义为:

softmax、cross entropy和softmax loss学习笔记

首先L是损失。Sj是softmax的输出向量S的第j个值,前面已经介绍过了,表示的是这个样本属于第j个类别的概率。yj前面有个求和符号,j的范围也是1到类别数T,因此y是一个1*T的向量,里面的T个值,而且只有1个值是1,其他T-1个值都是0。那么哪个位置的值是1呢?答案是真实标签对应的位置的那个值是1,其他都是0。所以结果为:

softmax、cross entropy和softmax loss学习笔记

j指向当前样本的真是标签。假设一个5分类问题,然后一个样本I的标签y=[0,0,0,1,0],也就是说样本I的真实标签是4,假设模型预测的结果概率(softmax的输出)p=[0.2,0.3,0.4,0.6,0.5],可以看出这个预测是对的,那么对应的损失L=-log(0.6),也就是当这个样本经过这样的网络参数产生这样的预测p时,它的损失是-log(0.6)。那么假设p=[0.2,0.3,0.4,0.1,0.5],这个预测结果就很离谱了,因为真实标签是4,而你觉得这个样本是4的概率只有0.1(远不如其他概率高,如果是在测试阶段,那么模型就会预测该样本属于类别5),对应损失L=-log(0.1)。那么假设p=[0.2,0.3,0.4,0.3,0.5],这个预测结果虽然也错了,但是没有前面那个那么离谱,对应的损失L=-log(0.3)。我们知道log函数在输入小于1的时候是个负数,而且log函数是递增函数,所以-log(0.6) < -log(0.3) < -log(0.1)。简单讲就是你预测错比预测对的损失要大,预测错得离谱比预测错得轻微的损失要大。

这个过程也说明了softmax和max的区别。如我有两个数a和b,max选取ab中概率最大的那个数,没有第二种可能,但是对于b不公平啊,a的可能性比b大,但是不代表b不可能取不到,所以我想根据概率选取,概率大的多去,概率小的少取,这就是softmax。

softmax、cross entropy和softmax loss学习笔记softmax、cross entropy和softmax loss学习笔记

可见其实是一样的。感谢以上博主和知乎作者分享,理清了我的思路,谢谢。纪录下,由新发现再补充,有错请指教,谢谢