损失函数和优化-损失函数(2)

引言 这一节的笔记,主要讲解除了SVM以外的另一种损失函数——softmax损失函数。
softmax损失函数 如上一小节的最后所言,在softmax损失函数中,我们将赋予这些得分一些额外的含义,并且会用这些分数针对我们的类别计算概率分布。
在谈论softmax损失函数之前,我们先简单说明一下它的由来,它是由逻辑斯谛函数推广得到的。逻辑斯谛函数主要用来处理二分类的问题,而softmax则适用于处理多分类的问题。
选择使用softmax分类器或者多个逻辑斯谛分类器取决于所有类别之间是否互斥。互斥选择前者,不互斥有交叉则选择后者。
损失函数和优化-损失函数(2)
文章图片
softmax损失函数 我们将用softmax损失函数处理分数,即先进行指数化处理以使它们转化为正数,然后用这些指数的和对分数进行归一化处理。
这些分数经过softmax损失函数处理后,我们能得到所有类别的相应的概率分布(介于0-1),而所有类别的概率和相加为1。
比较由这个函数推导出的概率分布和真实的概率分布(目标概率分布)。如对猫的图片来说,猫这一类别的目标概率应该为1,其他类别的目标概率应该都是0。
我们需要做的,就是尽量使我们通过softmax损失函数计算出的概率分布匹配上述的目标概率分布,即正确的类别应该具有几乎全部的概率。
我们可以用多种方式来列这个方程,可以在目标概率分布与计算出的概率分布间计算KL散度以比较它们的差异,或可以做最大似然估计。
【损失函数和优化-损失函数(2)】而在此处,我们希望正确类别的概率应该比较高并接近1,即损失函数的计算结果为真实类别概率的对数再取负数。
因为log函数单调,所以当我们针对正确类别最大化log P,即希望函数值增大,但损失函数是用来度量坏的程度而非好的程度,所以增加一个负号,使它更加符合预设。即针对正确类别的SVM损失函数将会变成-log P。(此处的log实际为ln)
损失函数和优化-损失函数(2)
文章图片
使用softmax对分数进行转化处理,并得到正确类别的损失函数是-log P 实例说明 损失函数和优化-损失函数(2)
文章图片
以猫类别为例的softmax回归 将使用线性分类器后得到的3个类别分数,先进行指数化处理得到正数,再进行归一化处理,三个类别的概率分布相加为1,此时我们可以得到Li=-log(P),其中P为猫这一正确分类的分数,即0.13,计算得到结果:0.89。
softmax回归问题集

  1. softmax损失函数的最小值和最大值是多少?
  • 答案:最小值为0,最大值为无穷大。
  • 解释:概率P的取值范围为0-1。
  • 拓展:在实际操作中,如果想要让正确分类的概率为1,需要使正确分类的分数趋近于无穷大,而其他分类的分数趋近于无穷小。计算机并不擅长∞操作,因此损失函数为0,只能是理论上的最小损失,而最大损失为无穷大。
  1. 如果所有的S都很小,近乎于0,损失值是多少?
  • 答案:-ln(1/C) = lnC。
  • 解释:如果分数都很小,且接近于0,那么经过指数化和归一化处理后,所有类别得到的概率分布几乎相等,为1/C,其中C为类别数。
两种损失函数的比较 损失函数和优化-损失函数(2)
文章图片
损失函数间的比较 在线性分类上面,二者的设置看起来是相等的,我们将W和输入向量相乘得到分值向量。二者的区别就在于,如何解释这些分值进而量化度量到底有多坏。
所以对于SVM来说,是要深入研究并观察正确分类的分值和不正确分类的分值的边距。
而对于softmax或交叉熵损失,我们计算概率分布,以得到正确分类的负对数概率。
损失函数和优化-损失函数(2)
文章图片
Softmax vs. SVM
  • 在SVM损失函数中,正确类别(如车)的分数会比其他类别的分数高很多,即使改变了这个分数,也不会改变结果。因为SVM只关心正确的分值要比不正确的分值高出一个安全边际。
  • softmax损失函数的目标是使概率质量函数(离散分布值)等于1,所以,即使给正确分类很高的分数,同时给不正确的分类很低的分数,softmax依然会在正确分类上积累越来越多的概率质量,从而继续使正确分类的分数逼近无穷大,使不正确分类的分值逼近负无穷。
在实际应用中:
  • SVM在当数据点超过阈值成为正确分类后即停止,不再关心该数据点。
  • softmax总是试图不断提高每个数据点,使他们的表现越来越好。
在实践中选择哪个函数并不会造成很大影响,至少在很多深度学习的应用中他们的执行很相似,但我们还是应该记住这些差异。
概括 损失函数和优化-损失函数(2)
文章图片
概括
  • 我们有一些xs和ys的数据集。
  • 用线性分类器得到了一个分数函数,根据我们的输入x计算分数S。
  • 用损失函数(softmax或SVM或其他)来定量计算我们的预测跟实际目标y相比有多糟糕。
  • 我们会给损失函数增加一个正则项,试图在匹配训练数据和更简单的模型间进行权衡。
    以上过程我们通常称之为监督学习。
在我们接下来的学习中,将需要指定
  • 结构上可能很复杂的函数f
  • 衡量算法做得如何的损失函数
  • 给定任意值的参数
  • 惩罚模型的复杂性的正则项
    将这些结合起来找到最终令损失函数最小化的参数W。
问题在于,我们如何才能发现这个使损失函数最小化的参数W?
这就引导出我们下一节的主题——优化。

    推荐阅读