谈谈对Gentle Adaboost的一点理解~

基于非度量特征的Gentle Adaboost

之前看过一些关于Gentle Adaboost的文献,尤其是那几篇经典的文献,但是有几处当时一直没有彻底理解,比如说文献《Face Detection Based onMBLBPRepresentation》中的第3小节,我开始就比较糊涂,于是借着这篇文献的内容,把基于可度量特征与非可度量特征的Gentle Adaboost之间的区别和联系介绍一番,同样,这对于另外几种Adaboost也同样适用,希望对同样困惑的童鞋有所帮助。文献内容如下,这一段文字介绍的是如何设计基于MBLBP特征的Gentle Adaboost:

图1 文献内容

问题提出

其中,我最初对这段介绍Gentle Adaboost的文字有几处疑惑的地方:

1. 弱分类器f的返回值应该是置信度,也就是a,那弱分类器的阈值究竟又是谁?或者说,根本就不需要阈值?

2. 上面说置信度a,还有k都是学习出来的,k指的又是什么?

3. 说置信度a是通过最小化均方误差求解出来的,究竟是怎么求解的?

4. 文献只说了如何构造弱分类器,那怎么确定最优弱分类器的?

5. 上面说求若分类器的过程,就相当于一个自适应牛顿法,这是为何?

自问自答

关于上面几个问题,我的回答如下:

1. 基于MBLBP特征的弱分类器的确不需要阈值,这是由于MBLBP特征不具备度量性质,啥叫度量性质?就是说,谁大谁小一点意义都没有,大的不能说明比小的更好或者更坏,所以阈值也就失去了价值。所以,弱分类器干脆来了个“狠招”,虽然不具备可度量性,但是取值却一定在【0,255】之间,弱分类器不是一定要输出置信度吗,那就设置256个afa,也就是256个置信度。你算出来的特征值等于200,那就取afa200为你的输出置信度。于是下一问的答案显而易见。

2. k就是第k个MBLBP特征(MBLBP特征可能有1万多个),而xk就是训练样本对应第k个特征的特征值。

图 2 文献参数关系说明

3. 解法很简单,将J对a求偏导,并令其等于0即可,但事先需将Jwse根据公式(3)变为其等价形式:

这里是符号函数,当基于第k个特征计算的训练样本特征值等于j时,返回1,否则,返回0。然后,对aj求偏导并令其等于0,即可得到解(4),偏导形式如下:

4. 这点文献没有详细的说,并且有点令人迷惑,最优弱分类器是最小error对应的弱分离器,文献里面介绍的内容是:如何计算第k个MBLBP特征所对应的弱分离器。明确了这一点,答案就显而易见:先计算D个特征对应的弱分类器,,然后再比较各自的error(也就是文献中的公式2),取最小error的弱分类器的就OK。

基于可度量特征的Gentle Adaboost

下面的图,我在我的另外一篇博客里面也提到过,是基于可度量特征的Gentle Adaboost,大家也看看有啥区别。

图 3 创建弱分类器的算法流程

图 4, 创建强分类器的算法流程

上面给出的流程基于的特征是可度量的,所以要先对样本特征进行排序,然后计算置信度,就是所谓的基于阈值的弱分类器计算方式(stump),置信度的计算方式和上述文献是一样的,也是一样的公式推导过程。当置信度计算好之后(leftvalue和rightvalue),当前弱分类器的总体误差是error = lefterror + righterror,然后去最小的error所对应的弱分类器为最优弱分类器。

在Adaboost中,“过拟合”的主要原因是由于对于错分样本的权重过度地增加,导致分类器对于错分样本过于关注,于是虽然训练误差很小,但是测试误差(泛化性能的体现)就会高的离谱,进一步表现为,对于难以分类的样本表现很好,可以准确的分类,但反倒对较为容易分类的样本,表现欠佳,整体分类水平不高,要这样的只关注特权利益的分类器又有何用?Gentle Adaboost的权重更新方式更加平滑,并不激烈,大家可以画画权重更新的函数就明白了,于是可以有效的避免“过拟合”现象的发生,它更加民主,照顾的是寻常百姓。一句话,Gentle Adaboost是个好算法!!

其他

opencv中的Haartraining就提供了Gentle Adaboost的算法代码,代码的具体注释可以看看我的博客

命运如同手中的掌纹,无论多曲折,终掌握在自己手中。

谈谈对Gentle Adaboost的一点理解~

相关文章:

你感兴趣的文章:

标签云: