CS231N - Assignment1 - Q3 - Softmax exercise
编写:郭承坤 观自在降魔 Fanli SlyneD
校对:毛丽
总校对与审核:寒小阳
1. 任务
这次练习跟SVM练习类似。你将完成下面的任务:
- 通过矩阵运算为Softmax分类器实现一个损失函数
- 为这个损失函数的分析梯度实现一个完全矢量化的表达式
- 用数值梯度检查上面的分析梯度的值
- 使用验证集找到最好的学习率和正则化强度
- 用随机梯度下降法优化损失函数
- 可视化最终学习到的权重
2 知识点
2.1 Softmax分类器
Softmax分类器也叫多项Logistic回归(Multinomial Logistic Regression),它是二项Logistic回归在多分类问题上的推广。它和SVM构成了两类最常用的分类器。但跟SVM不同的是,Softmax分类器输出的结果是输入样本在不同类别上的概率值大小。我们用CS231n课件上的一张图来说明它们两者在计算上的区别:
图中的 W W 为权重矩阵,假设它的大小为K*D,那么K就是类别个数,D为图像像素值大小。 为图像向量, b b 为偏置向量。计算
而SVM和Softmax的一个区别在于,Softmax在得到分值向量之后还要对分值向量进行再处理,第一步是通过指数函数将分值向量映射得到新向量,第二步是对新向量进行归一化。最终得到的向量上的数值可以诠释为该图像为某类别的概率大小,而SVM得到的向量仅仅是图像在不同类别上的分值大小,没有概率的含义。
这个对分值向量处理的过程,可以用下面的函数来表示
k为某个特定的类别,f为分值向量,j为任意的类别, pk p k 表示k类别上的概率值大小。
2.2 Softmax分类器的损失函数
既然Softmax分类器得到的输出向量为每个类别的概率值大小,我们希望正确类别对应概率值(也就是概率的对数值)越大越好,那么也就是希望概率对数值的负数,越小越好。而这个概率对数值的负数也就是我们的损失函数。下图给出了损失函数的计算公式:
虽然课件上并没说明,但Softmax的这个损失函数还有一个非常fancy的名字:交叉熵损失函数(Cross Entroy Loss),它跟最大似然估计的思想很接近。为了不增加大家的学习负担,这里就不多解释了。^_^
以上是Softmax分类器对单个图像的损失函数定义,但在实际模型的训练过程中,我们会有很多的图像,所以我们会对所有图像的损失函数求均值得到一个数据损失(data loss)。然后,为了避免出现过拟合的问题,减少模型的复杂度,我们还在损失值里加了正则项,也叫正则损失(regularization loss)。这两个损失值加起来就是训练图像的损失值: