深度学习小白——线性分类(SVM)

一、评分函数

----f为评分函数,即Rd-->Rk的映射,d是特征维数,k是类别数


W是权重,b是偏差向量,W是k*d维的,每一行代表一个分类器



若b=0,则所有的分类器都不得不过原点,这样是不好的,所以要加上这个偏差b

一般实际操作中,将w和b放到一个矩阵中,所以就要向x中增加一个维度,设为常量1,这就是默认的偏差维度


深度学习小白——线性分类(SVM)_第1张图片

二、损失函数 Loss Function(代价函数 cost Function / 目标函数 objective )

用来衡量我们对结果的不满意程度。

针对第i个数据的多类SVM的损失函数定义如下:


‘  

从表达式中可以看出,当syi >= sj + Δ 时,Li = 0,这时候表示判断准确;反之,Li>0,这时候表示判断有误。

即SVM的损失函数想要SVM在正确分类上的得分始终比不正确分类上的得分高出一个边界值△


如若s=[13,-7,11] 共有3个分类,其中第一个类别是正确类别,即yi=0,假设△=0,则Li=max(0,-7-13+10)+max(0,11-13+10)=8

max(0,---)被称为hinge loss


若有很多相似的W都能正确地分类所有的数据,则当λ>1时,任何数乘λW都能使损失值为0,所以会把所有分值的大小都均等扩大了。

所以我们要加入正则化惩罚,一般采用L2范式,提高了W的泛化能力,避免过拟合


故完整的多类SVM Loss Function为:


【L关于W的偏导数】--反向传播会用到

Wyi Li = - xiT(∑j≠yi1(xiWj - xiWyi +1>0)) + 2λWyi 


Wj Li = xiT 1(xiWj - xiWyi +1>0) + 2λWj , (j≠yi

其中1(.)是指示函数,1(表达式为真)=1;1(表达式为假)=0


三、设置Delta

绝大多数情况下,设置为1.0,超参数△和λ一起控制同一权衡:即损失函数中的数据算是和正则化损失之间的权衡。


Vectorized form of loss function(without regularization term)

def L(X,y,W):
    delta=1.0
    scores=W.dot(X) #k*m维
    correct_scores=scores[y,range(0,X.shape[1])]
    margins=np.maximum(0,scores-correct_scores+delta)
    margins[y,range(0,X.shape[1])]=0
    loss=sum(sum(margins))
    return loss



你可能感兴趣的:(深度学习小白——线性分类(SVM))