self paced learning(自步学习)

参考论文地址

self-paced learning 是基于curriculum learning发展而来的.相比于curriculum learning中需要将所有的样本人为的进行”难易”程度的排序,* self-paced learning更进一步的通过添加一个正则项(SP-regularizer),来实现模型自动挑选简单的,也就是易于分类的样本(high-confidence samples) * 本篇博文就是类似翻译孟老师这篇论文的部分证明内容,记录一下自己对SPL的理解,当然也有一些不理解的.

Loss Function

minw,v[0,1]nE(w,v,λ)=i=1m(viL(yi,h(xi,w))+f(vi,λ))

其中 L 函数是传统的损失函数,vi就是权值,其可能的取值为{0,1},也就是代表了是否选择该样本做训练;而 f(vi,λ) 就是SP-regularizer,通过这个regularizer来控制v的取值

SP-regularizer

可以看出在SPL中最重要的就是SP-regularizer的设计.当然论文中也提到了SP-regularizer需要满足的约束条件:
首先定义:

v(l,λ)=argminv[0,1](vl+f(v,λ))

1. f(v,λ) is convex with v[0,1] ,凸函数,优化方便
2. v(l,λ) 关于 l 递减,并且满足
liml0v(l,λ)=1;limlv(l,λ)=0

3. v(l,λ) 关于 λ 递增,并且满足
limλv(l,λ)1;limλ0v(l,λ)=0

解释一下为什么这样约束:第一点: 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:

F(w)Q(w|wk)

2.Minimum step:
wk+1=argminwQ(w|wk)

SPL

定义 v(l,λ) 的积分:

Fλ(l)=l0v(l,λ)dl

首先要明白这个积分就是v*l,也就是损失函数E的前一半(去掉SP-regularizer)

然后因为 v(l,λ) 关于l是递减的,所以它的积分 Fλ(l) 关于l是凹的.所以:

Fλ(l(w))Qλ(w|w)=Fλ(l(w))+Fλ(l(w))(l(w)l(w)).=Fλ(l(w))+v(l(w),λ)(l(w)l(w)).

优化的过程即为:
1.优化v

v(li(wk),λ)=minvi[0,1]vili(wk)+f(vi,λ)

2.优化loss
wk+1=argminwi=0mQλ(w|w)=argminwi=1mFλ(l(w))+v(l(w),λ)(l(w)l(w))

因为对于第k次迭代的时候 w 是已知的,所以
wk+1=argminwi=0mv(l(w),λ)l(w)

整个过程也就是先优化sp-regularizer,求出权值,然后再优化带权损失函数,求出参数.然后一直迭代.

论文中提到SPL的优化和MM的优化很像,其实在我看来,这种优化方式更像是EM,将 v 作为隐变量,先优化v,然后再优化带权值(v)的loss function,然后一直迭代

代码实现SPL

上面的优化过程就是代码实现的过程.虽然看起来比较繁琐,但是实现起来是很简单的.要明确一点的是,SPL不是模型,只是一种不同的带权loss函数,所以在实现之前你需要选择一个model
在spl的原始论文中,作者就提到了一个简单的实现办法,也就是hard-regularizer.
λ=k


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)
  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值