self-paced learning 是基于curriculum learning发展而来的.相比于curriculum learning中需要将所有的样本人为的进行”难易”程度的排序,* self-paced learning更进一步的通过添加一个正则项(SP-regularizer),来实现模型自动挑选简单的,也就是易于分类的样本(high-confidence samples) * 本篇博文就是类似翻译孟老师这篇论文的部分证明内容,记录一下自己对SPL的理解,当然也有一些不理解的.
Loss Function
其中 L 函数是传统的损失函数,
SP-regularizer
可以看出在SPL中最重要的就是SP-regularizer的设计.当然论文中也提到了SP-regularizer需要满足的约束条件:
首先定义:
1. f(v,λ) is convex with v∈[0,1] ,凸函数,优化方便
2. v∗(l,λ) 关于 l 递减,并且满足
3. v∗(l,λ) 关于 λ 递增,并且满足
解释一下为什么这样约束:第一点:
v∗
表达的意思对于该样本是否选择(0:不选择,1:选择).而它的取值是最小化损失函数得到的.
第二点:明白了
v∗
的含义就应该明白条件二表达的意思是如果某个样本的损失
λ
小,那么就选择该样本,high-confidence samples,也就是损失较小的样本.而条件三表达的意思就是,随着
λ
(“age”)的增大,会有更多的样本被选入到训练中.
而目前的研究中有几种提出的regularizer分别是,Hard,Linear,Mixture.
optimizer
Majorization Minimization Algorithm(MM)
方法:将一个复杂的优化目标,通过迭代,不断的替换成一个简单的优化目标,进行优化.
Problems Description:a minimization problem with objective
F(w)
, given an estimate
wk
at the
kth
iteration
Two Steps:
1.Majorization step:
2.Minimum step:
SPL
定义
v∗(l,λ)
的积分:
首先要明白这个积分就是v*l,也就是损失函数E的前一半(去掉SP-regularizer)
然后因为
v∗(l,λ)
关于l是递减的,所以它的积分
Fλ(l)
关于l是凹的.所以:
优化的过程即为:
1.优化v
2.优化loss
因为对于第k次迭代的时候 w∗ 是已知的,所以
整个过程也就是先优化sp-regularizer,求出权值,然后再优化带权损失函数,求出参数.然后一直迭代.
论文中提到SPL的优化和MM的优化很像,其实在我看来,这种优化方式更像是EM,将 v 作为隐变量,先优化v,然后再优化带权值(v)的loss function,然后一直迭代
代码实现SPL
上面的优化过程就是代码实现的过程.虽然看起来比较繁琐,但是实现起来是很简单的.要明确一点的是,SPL不是模型,只是一种不同的带权loss函数,所以在实现之前你需要选择一个model
在spl的原始论文中,作者就提到了一个简单的实现办法,也就是hard-regularizer.
while(true):
#首先计算所有样本的v
l =[l(xi) for i in sample]
"""
if l<=k:
v = 1
else:
v = 0
"""
v = torch.le(l,k)
#计算损失函数,
loss = -torch.mean(v*l)
#更新模型参数
...
#模型稳定时,更新k
if loss < update_threhold:
k = update(k)