CS231n 2017 学习笔记03——损失函数与参数优化 Loss Functions and Optimization

Posted Irran

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CS231n 2017 学习笔记03——损失函数与参数优化 Loss Functions and Optimization相关的知识,希望对你有一定的参考价值。

本博客内容来自 Stanford University CS231N 2017 Lecture 3 - Loss Functions and Optimization

课程官网:http://cs231n.stanford.edu/syllabus.html

从课程官网可以查询到更详细的信息,查看视频需要FQ上YouTube,如果不能FQ或觉得比较麻烦,也可以从我给出的百度云链接中下载。

课程视频&讲义下载:http://pan.baidu.com/s/1gfu51KJ

 


 

损失函数 Loss Function

损失函数就是用来衡量一组参数W的好坏程度的,通常损失函数的最低值为0,没有最高值,可以无穷大。

在计算的时候,一般会遵循这样的公式

技术分享

 

在这里 Li 是在某一个样本 xi 的损失,N 是样本总数,也就是说总损失是每个样本损失的平均值,而根据对 Li 不同的定义就有了不同的损失函数。


 

 

Hinge Loss

技术分享

首先解释一下 s 的含义,s 是 score 的首字母,也就是上一讲中,线性模型给某一个样本的分数,事实上s不是一个数字,而是一组数字,因为每个类别都有一个分数。而 sj 就代表对第 j 个类别的分数,这个分数越高就代表样本 xi 越可能属于这个类别。yi 则代表了正确的类别编号,比方说我们有10个类别,在实际计算的时候,我们会给每个类别一个编号,也就对应了 1-10 或者 0-9。yi 就是这其中的一个数字。

从直观上理解,Hinge Loss 样本 xi 得分 s 的每一个错误类别的分量,如果正确类别的得分比错误类别的得分高出一定的安全距离(这里就是公式中的1),那么就认为在这个得分的小分量中,损失函数为0,而如果没有达到这个条件,还差多少损失就是多少。

特别要注意的是,1这个安全距离其实是无所谓的,可以定义为任意数值。因为我们事实上只关心样本有没有被正确的分类,而这些得分的绝对大小其实并没有太大意义,我们更关心的是他们之间的相对大小。也就是说,如果把权重W的数值整体放大为原来的两倍,那么得分s也会随之变为原来的两倍,但他们之间的相对大小关系是没有改变的,这个时候就相当于把安全距离从1变成了2。因此,不同的安全距离事实上只能产生一个放缩的作用,最后得出的分类器在本质上是一样的.

在实际计算的时候,最开始我们会给权重w初始化为一组随机数字,在这个时候得出的所有分数大小都是相近的, 这种情况下根据损失函数的定义,损失函数应该接近 C - 1(C是类别的数量)。这是一个很好的debug技巧,如果最开始的损失函数数值与之相差太远的话,很可能存在bug。


 

交叉熵损失 Cross-Entropy Loss

技术分享

交叉熵损失首先把得分s变成一个概率分布,即所有分量都在0到1之间,并且所有分量的和为1。

技术分享

然后根据得到的概率分布计算Li

技术分享

从直观上理解,交叉熵损失是把我们转化而来的概率分布与最理想的概率分布进行对比,衡量了二者之间的差距。最理想的概率分布就是正确的类别概率为1,其他所有类别的概率都是0。

在实际计算的时候,最开始我们会给权重w初始化为一组随机数字,在这个时候得出的所有分数大小都是相近的, 这种情况下根据损失函数的定义,损失函数应该接近 logC(C是类别的数量)。这是一个很好的debug技巧,如果最开始的损失函数数值与之相差太远的话,很可能存在bug。


 

Hinge Loss VS Cross-Entropy Loss

Hinge Loss 在正确类别的得分比错误类别得分高1之后就不进行优化了,因为此时的损失函数不会再减小了。

与之相对的是Cross-Entropy Loss,根据定义,想要得到理想的概率分布,势必要让正确类别的得分趋近于正无穷,错误类别的得分趋近于负无穷,所以模型会不断的优化参数,试图去迫近这个最理想的概率分布。

 


 

正则化 Regularization

技术分享

考虑如上几个数据点,根据损失函数的定义,我们很可能会最终拟合出这样一条非常曲折的线,而事实上这样是不好的。

技术分享

比方说我们有几个这样的测试点,这条曲线就会拟合的很差,这叫过拟合问题,即过度拟合于训练数据,而丧失了一般性。

技术分享

而事实上,可能这样的一条直线能够好的拟合所有的数据,为此我们要为我们的损失函数增加一项“正则化损失”,它是用来衡量模型的复杂程度的,强迫模型趋于更加简单。

技术分享

公式左侧的是已经讲过的,我们称之为数据损失,而右侧的是新加入的,称为正则化损失。

λ 是一个超参数,用来确定数据损失和正则化损失之间的相对权重,如果λ比较大,则说明我们更看重正则化损失,如果比较小,就说明更看重数据损失。λ 过大了会造成欠拟合问题,过小会造成过拟合问题。

而R(W)就是关于正则化损失具体的定义了,常用的有L1正则化和L2正则化。

技术分享

可以看出,L1正则化就是系数矩阵所有分量的绝对值之和,而L2正则化则是所有分量平方和。

他们之间还是有微妙的区别的。

L1正则化对于所有的损失是线性的,也就是说,10个数据点,每个点误差1个单位 和是完全等价的。

L2正则化由于平方的原因,对那些偏差特别大的点具有很大的惩罚,1个数据点,误差10单位的惩罚远远大于10个数据点,每个点误差1个单位。

正是由于这个原因,L2正则化倾向于把权重均匀分布在每一个分量上,而L1正则化则倾向于将更多的权重清零,只保留几个大权重,他们对于模型的“复杂度”的定义是不一样的。

 



以上是关于CS231n 2017 学习笔记03——损失函数与参数优化 Loss Functions and Optimization的主要内容,如果未能解决你的问题,请参考以下文章

斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时6

cs231n笔记:线性分类器

斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时12&&13

斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时8&&9

cs231n笔记 线性分类器

cs231n spring 2017 lecture13 听课笔记