2017CS231n笔记3.损失函数和优化
文章目录
概述
Previous on CS231n
偷懒直接copy一下:
Challenges of recognition
data-driven approach, kNN
Linear Classifier
留下的坑(TODO):
- Define a loss function that quantifies our unhappiness with the scores across the training data.
- Come up with a way of efficiently finding the arameters that minimize the loss function.(optimization)
上次讲到W可以用来计算输出分类,但不知道怎么找到一个W,使得分类的效果最好。
损失函数
损失函数的意思应该不用多说了,就是goodness of function(台大:李宏毅)。
A loss function tells how good our current classifier is.
Given a dataset of examples
Where is image and is (integer) label
Loss over the dataset is a average of loss over examples:
多分类 SVM损失函数
给定一个样本,是输入的图像是输出的图像所属标签(整形数字)
用s来表示正确分类或错误分类的分数
则SVM的损失函数可以表示为:
要命,谁知道上面等号如何对齐?不等于号如何正常显示?
解释一下:如果正确分类所获分数要比其他分类的分数要高一个安全距离(这里为1),那么损失函数取值为1;否则损失函数按错误分类的距离取值。
其形状为合页损失函数,和relu要区分开
上图中1是安全距离,不明白的话看栗子。。。
这个2.9咋来的?
把青蛙和汽车的score带入Li 即可,最后的结果2.9表示分类器对于这个训练样本训练得多好的一个量化衡量指标。
接下来:
可以看到青蛙的损失值最大。
最后,整个训练集样本的损失函数L的值就是每个样本的损失值求平均:
**问题1:**如果把第二个样本中的汽车的分类值改变一点,下面的损失值会不会变化?答案见文后
**问题2:**单个样本的损失值取值范围是多少?
**问题3:**初始化时,W取值较小,分数score值s也很小,这个时候的损失值是多少?
**问题4:**这里单个样本的损失值是把与目标分类不同的其他分类进行计算,例如算猫咪的时候,累加的是汽车和青蛙,如果在计算的时候把猫咪也算上,单个样本的损失值会如何变化?
**问题5:**如果把整个训练集样本的损失函数求和改为求平均会有何变化?
**问题6:**如果把整个训练集样本的损失函数求和后求平方会有何变化?
重要思想:使用合页损失函数和使用平方差损失函数有什么不一样,老师在这里讲的观点是对于损失函数理解比较深的解释,是在其他课程里面没有看到的,开篇说损失函数的含义用来衡量分类器的好坏,如果用平方差来衡量,那么如果本来一个分类器是不好的,经过平方就变成了,如果是合页损失函数,则说明我们对于这个不好还有一个容忍范围,所以我们应该根据应用来选择损失函数
参数W是否唯一?
当我们找到一个w,使得总体的损失值为0,那么W是不是唯一的?不是,例如:2w也可以使得总体的损失值为0,再次以第二个样本为例:
因此,我们的目标不是说找到一个W,并且能够分割(分类)我们的training data(这里应该讲的是过拟合),而是要使得找到的W能够去分类test set。
正则化
正则化在其他课程里面讲了很多了,不写太多,其中有一点是ng和李宏毅的课里面没有提到的(只看了这两位的),也可能是我看漏了。
某大牛文章里面提到:当我们有很多个模型可以选择时,选择简单的,这个也是正则化的思想,惩罚高次项,防止过拟合。
老师还对L2和L1正则化的意义进行了说明:
L2,倾向于W各个维度更加均匀分布
L2,倾向于W各个维度更加趋向于0
Softmax 分类器
第一次听估计会懵逼,这里说了是从逻辑斯蒂回归演变过来的,李宏毅学习笔记里面有这个玩意,李宏毅的逻辑斯蒂回归
对比李宏毅的ppt
**问题7:**Li的取值范围是什么?
**问题8:**初始化时,s基本相等,这个时候的损失值是多少?
Softmax vs SVM
按老师的解释,对于相同的一个样本,SVM只要这个样本正确分类的分数大于我们设置的安全距离就认为任务完成,而Softmax函数则要求更加的高,会想方设法让正确分类的概率无限大(这里是原话,是不是应该理解为接近1?或者后面还有求对数,所以值是无限大)
汗,看到这里才看出来score function应该是对应ng经常讲的cost function。
优化
上小节给出了损失函数的模样,接下来要求参数W了。
方法1:随机猜,然后根据L的值看哪个W好
方法2:根据斜率(梯度下降)
计算斜率(梯度)有两种方式:
注意:
关于Gradient Check参考ng的深度学习课程1.13,直接贴上我看这节的笔记:
**重要:**和ng一样,提到了最最最重要的超参数就是learning rate(第一个要调的就是你拉)。
Stochastic Gradient Descent (SGD)
这里和别的课讲的有点不一样,ng的课里面:SGD是mini batch中batch size=1的情况,其他的都一样。
斯坦福在线线性分类器
其他知识
里面提到了图像特征的提取方式,这个思路在李宏毅的第五课里面也有提到,例如:逻辑斯蒂回归无法解决与非门问题,但是把左边进行transformation后,就变成线性可分了,图像也是一样,但是问题是我们如何找到transformation 的方法?就是用反向传播去调整,多个隐藏层,多个神经元做的事情实际上就是把输入数据进行transformation,直到输出层进行最后的分类。
答案区
答案1:不会,由于SVM算法中的合页函数对于样本分类值计算时是有一个安全距离的,所以只要你在安全距离之外,样本的损失值仍然为0.
答案2:0到无穷大
答案3:类别数量C-1,原因是由于分数score值s很小,所以每个分类都在安全距离1之类,循环比较C-1次,每次都约为1,求和则得到答案,单个如果在初期不等于这个值,程序估计有bug。
答案4:单个样本的损失值会加1,因为猫咪的值带入,这里,忽略正确分类的值,会使得最小损失值为0.
答案5:无变化,对于总体损失函数来说,前面除以或乘以常数并不会影响求解参数W
答案6:有变化,这种改变和上面不一样,是非线性的改变函数形态,当然这种对合页函数进行平方也是损失函数的一种。
答案7:最小值为0,最大值为无穷,最小值为0好理解,最大值这里还没怎么听懂,先留着。欢迎小伙伴评论
答案8:应该是C取自然对数,如果在第一次迭代不是这个值,程序有bug