此文章为罗周杨原创,转载请注明作者和出处
在前面的Linear Classify学习中,我们通过训练,可以得到参数 W WW,那么,我们怎么评价这个 W WW是否足够好呢?如果不好,我们该怎么调整呢?
这就需要我们定义一个损失函数(loss or cost function) 来度量,并且通过最小化损失函数,来调整 W WW,使我们的分类结果最准确。
对于每一对训练数据,我们可以定义一个损失函数,表示为: L i L_{i}Li,那么所有训练数据的损失,则表示成平均损失:
L = 1 N ∑ i = 1 N L i ( f ( x i , W ) , y i ) L = \frac{1}{N}\sum_{i=1}^{N}L_{i}(f(x_{i},W),y_{i}) L=N1i=1∑NLi(f(xi,W),yi)这个损失函数,表示了我们的 W WW的好坏程度。
Multiclass SVM Loss
对于每一对训练数据 x i x_{i}xi, y i y_{i}yi,我们可以定义一个分数函数,用来评价我们的模型好坏程度:
s = f ( x i , W ) s=f(x_{i},W) s=f(xi,W)那么我们的Multiclass SVM Loss 可以表示为:
L i = ∑ j ̸ = y i max ( 0 , s j − s y i + Δ ) L_{i}=\sum_{j\neq y_{i}}\max(0,s_{j}-s_{y_{i}}+\Delta) Li=j̸=yi∑maxmaxmax(0,sj−syi+Δ)注:
Multiclass SVM的核心思想就是:分类正确的分数s0必须比任何一个分类错误的分数s1高出 Δ \DeltaΔ,否则损失为0
那么,对于所有的训练样本,我们可以得到损失函数:
L = 1 N ∑ i = 1 N ∑ j ̸ = y i max ( 0 , s j − s y i + Δ ) L=\frac{1}{N}\sum_{i=1}^{N}\sum_{j\neq y_{i}}\max(0,s_{j}-s_{y_{i}}+\Delta) L=N1i=1∑Nj̸=yi∑maxmaxmax(0,sj−syi+Δ)又
s = f ( x i ; W ) s=f(x_{i};W) s=f(xi;W)所以可以得到损失函数:
L = 1 N ∑ i = 1 N ∑ j ̸ = y i max ( 0 , f ( x i ; W ) − f ( x y i ; W ) + Δ ) L=\frac{1}{N}\sum_{i=1}^{N}\sum_{j\neq y_{i}}\max(0,f(x_{i};W)-f(x_{y_{i};W})+\Delta) L=N1i=1∑Nj̸=yi∑maxmaxmax(0,f(xi;W)−f(xyi;W)+Δ)现在有一个问题,如果我们的损失函数max操作后,再平方一次,这样算是一个新的分类算法吗?是。平方有一个作用就是把差异放大。同理,还有其他类似的操作也可以达到类似的效果。
那么该如何选择呢?具体问题具体分析。
我们的Multiclass SVM的损失函数算是定义好了,但是上述损失函数存在一个问题 **这样训练出来的权重 W WW不唯一。
道理很简单,假设 W WW能够让我们的分类全部正确,那么 2 W 2W2W显然也可以让我们的分类全部正确,因为对于 2 W 2W2W和 W WW,我们的损失函数中的 Δ \DeltaΔ没有改变,如果 2 W 2W2W的分数函数是 W WW的2倍,那么他们的差值也变成2倍,那么如果原来的差值大于 Δ \DeltaΔ,那么2倍的差值显然大于 Δ \DeltaΔ,也就是说分类结果不会改变。
显然,把系数2 推广到其他数字,也是同样的道理。也就是说这种损失函数没办法确定一个唯一的 W WW,使我们的结果最准确。
那么怎么办呢?
Regularization Loss
为了解决这个问题,我在原来的损失后面加上一项损失叫做Regularization Loss。
我们前面的损失函数,是和数据有关的损失,叫做数据损失,我们加上的这一项损失,和数据无关,但是和权重 W WW有关,我们叫做Regularization,它表示成 λ R ( W ) \lambda R(W)λR(W)。
从数学上也很容易理解,加上一项约束,能够表示更复杂的关系。我们的Regularization算是一种惩罚措施,能够对突出的值进行惩罚,使我们的模型表现更好。
那么我们的Regularization函数是什么样子的呢?和损失函数自己一样,我们的Regularization loss函数也有很多种表达。但是最常见的一种是L2 Regularization:
R ( W ) = ∑ k ∑ l W k , l 2 R(W)=\sum_{k}\sum_{l}W_{k,l}^2 R(W)=k∑l∑Wk,l2意识很明确:对于权重的每一个值的平方和。
当然,还有其他的Regularization,例如:
L1:
R ( W ) = ∑ k ∑ l ∣ W k , l ∣ R(W)=\sum_{k}\sum_{l}|W_{k,l}| R(W)=k∑l∑∣Wk,l∣Elastic(L1+L2):
R ( W ) = ∑ k ∑ l β W k , l 2 + ∣ W k , l ∣ R(W)=\sum_{k}\sum_{l}\beta W_{k,l}^2+|W_{k,l}| R(W)=k∑l∑βWk,l2+∣Wk,l∣上面这几种不仅深度学习里面出现,一般的机器学习也很常见。当然常见的regularization除此之外,还有Max Norm Regularization和Dropout,以及Fancier:Batch normalization。
那么看看我们最终的损失函数吧:
L = 1 N ∑ i = 1 N ∑ j ̸ = y i [ max ( 0 , f ( x i ; W ) − f ( x y i ; W ) + Δ ) ] + λ ∑ k ∑ l W k , l 2 L=\frac{1}{N}\sum_{i=1}^{N}\sum_{j\neq y_{i}}[\max(0,f(x_{i};W)-f(x_{y_{i};W})+\Delta)]+\lambda\sum_{k}\sum_{l}W_{k,l}^2 L=N1i=1∑Nj̸=yi∑[maxmaxmax(0,f(xi;W)−f(xyi;W)+Δ)]+λk∑l∑Wk,l2联系我
- Email: stupidme.me.lzy@gmail.com
- WeChat: luozhouyang0528
个人公众号,你可能会感兴趣: