Stanford cs231n 学习笔记(2)SVM、Loss Function、Optimization

##Loss Function

###什么是损失函数,损失函数的意义

应用于Supervised Learning Algorithms 中,用于衡量所学习的模型对待预测的输入样本的预测能力。

###损失函数的构成

-只考虑数据上的损失:

L = 1/N * sigma_i L_i(W;x^i,y^i);

其中,L_i为根据不同的方法来对训练样本进过模型得到的预测结果和训练样本本身带有的标记所存在的误差进行衡量的结果。例如L_i = square(model(x^i),y^i);

其中,这一项被称为数据损失(data loss)

-考虑加入正则化(Regularization)

正则化存在的意义:解决过拟合的现象;如果纯粹以数据损失作为Loss Function,即在模型的学习过程中仅仅考虑训练集中的数据带来的损失时,这样会使得学习得到的算法侧重关注训练集中的数据,使得学习得到的模型,或者说函数与训练集中的样本过度的拟合,从函数的角度上来看,例如一个线性模型,拓展后就是一个多项式函数模型,参数化学习的目标为W,也就是多项式函数各项之前的系数。可知这可能会影响模型的泛化能力:当模型与训练集中的训练样本越拟合时,模型对应的函数越复杂,同样拿多项式函数的例子来看,越复杂表示高次项前非零的系数越多。而通过加入正则化项,可以使学习倾向于得到更为简单的模型(这与Occam Razor 相符)。而正则化项为参数化学习的目标参数的函数,即R(W);例如以L2范数作为Regularization,W为向量时,w^T*w表示的是权重约束(?)。同时,正则化也可以这么理解:其就是一个惩罚项,用来表示对模型学习的偏好。

-Loss Function的最终形式

Loss Function  = Data Loss + Hyper-Parameter * Regularization Loss

Data Loss:模型预测应该和训练集中的样本数据相匹配;

Regularization:Penalty,即惩罚项,用于表达模型学习的偏好。

Hyper-Parameter:超参数,放在Regularization前表penalty的程度。

###正则化的拓展

正则化的形式可以有多种:L1,L2等等。W的值反映的是X的值对输出有多大的影响。

L1:更倾向于让模型获得更为稀疏的解。即倾向于让W的解更为稀疏,得到的模型则更为简单。

L2:更倾向于让W的值更为广泛地影响X。

例如L1更倾向于得到W=[1,0,0,0,0]的解,而L2更倾向于W=[0.2,0.2,0.2,0.2,0.2];

##多分类SVM(Support Vector Mechine)

###

待预测样本经过多分类SVM预测后得到的是一个向量s,向量s中的每个元素对应一个类别,元素值的大小对应这个类与待预测样本匹配的程度,即这个待预测样本在这个类别下的得分。

对于SVM,损失函数

L = 1/N * sigma_i Li;

L_i = sigma_j max{0,s_r - s_j + 1}

其中,s_r为该训练样本正确的类在预测得到的向量s中对应的分数。s_j为向量s中除去正确类的所有错误类别对应的各个元素值,这个1为安全边界。这个安全边界的取值是任意的,因为对矩阵各个元素乘以一个常数后,得到的向量s中的各个元素均乘以相应的常数,所以放大的情况是一致的,这时安全边界也放大相应的常数倍。总之,这里关心的只是超出边界的情况,并不关心具体边界值是多少。

在课程中,提到了几个问题,其中有一个问题是:当把L_i中的s_r - s_j + 1这个一次方项替换成(s_r - s_j + 1)^2这个二次方项是否还是同一个算法。回答为否。因为替换成二次方项之后,L_i(z)函数在z<0部分变成了二次方项,那么在靠近0部分具有很小的变化,而在远离0部分会有很大的变化。这会影响整个学习的过程和学习的偏好。

还有一个用于debug的问题:当初始时,向量s中的各个元素值都很接近并且接近0,此时对于某一个样本的初始损失函数是多少。答案是C-1,其中C为种类的数目。原因是,s_i都很接近并且均为0时,无论是分类正确与否,得到的相应的值均为1.因为s_r - s_j 近似为0,所以max{0,s_r - s_j +1}的值必为1,所以对于除去正确类别后得到的值为C-1。

###Softmax

对于SVM的输出结果,向量s,其中的值似乎并没有什么意义,纯粹是一个分数,但是这个分数只有相对比较上的意义,其绝对值并没有什么意义。所以想要赋予其含义,从概率的角度出发。利用softmax变换,能将值归一化到0和1之间,所以通过softmax能赋予其概率的含义。经过Softmax变换后的结果就是,输出的向量s中的元素不再是表示分数,而是表示为相应类别的概率。同时这和SVM输出的元素为分数的向量s的区别在于,SVM的训练结果是,只要得到了正确类别对应的分数大于错误类别对应的分数一个安全边际,就算训练完成了,至于错误类别对应的分数有多低、正确类别对应的分数有多高并不关心,只要高出一个安全边际即可,所以这也是相对的缺陷,分数不具有实际意义的缺陷。而经过Softmax变换处理过后的向量s,元素对应概率,则训练的方向就是正确类别对应的概率尽可能靠近1,错误类别对应的概率尽可能靠近0,这也是绝对的值的优势。也就是说,和SVM相比,经过Softmax变换以后,让转换成概率分布的各个部分都变得越来越好(正确的收敛至1,错误的收敛至0)。

关于Softmax得到的这个概率的想法:其实并不用去考虑太多为什么他能表示概率:首先,这是一个学习的过程,经过某种理论指导下的学习,能让最终的值收敛到真实概率分布上。所以初始的设置以及这个过程是如何进行的,并不需要过分的关心,关注的重点,应该是这种指导理论是什么,因为他可能和学习算法或者是代价函数的构成有关系(例如最大似然法)。

###Optimization

损失函数给出了模型好坏评价的依据,现在的问题就剩下如何优化这个模型以满足要求。因为是以损失函数作为模型好坏的评价依据,所以也不难想到应该要从损失函数入手进行模型的优化。

常见的优化方法有Gradient Descent、Stochastic Gradient Descent等等。因为这部分内容很熟悉了就不赘述了。关键是区分一点:随机梯度下降和梯度下降的区别在于后者是对训练集中的所有训练样本进行梯度的求解,这必然耗时耗力,而前者只对训练集中选取的的一部分训练样本进行相应的计算。

猜你喜欢

转载自blog.csdn.net/weixin_39721347/article/details/85128010