博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在线最优化求解(Online Optimization)之三:FOBOS
阅读量:6436 次
发布时间:2019-06-23

本文共 1678 字,大约阅读时间需要 5 分钟。

FOBOS (Forward-Backward Splitting)是由John Duchi和Yoram Singer提出的[11]。从全称上来看,该方法应该叫FOBAS,但是由于一开始作者管这种方法叫FOLOS(Forward Looking Subgradients),为了减少读者的困扰,作者干脆只修改一个字母,叫FOBOS。

1. 算法原理

在FOBOS中,将权重的更新分为两个步骤:

 

  公式 (1)

前一个步骤实际上是一个标准的梯度下降步骤,后一个步骤可以理解为对梯度下降的结果进行微调。

 

观察第二个步骤,发现对的微调也分为两部分:(1) 前一部分保证微调发生在梯度下降结果的附近;(2)后一部分则用于处理正则化,产生稀疏性。

如果将公式(1)中的两个步骤合二为一,即将代入中,有:

 

,如果存在一个最优解,那么可以推断向量一定属于的次梯度集合:

 

 

由于,那么有:

 

 

上式实际上给出了FOBOS中权重更新的另一种形式:

 

 

 

我们这里可以看到不仅仅与迭代前的状态有关,而且与迭代后的有关。可能这就是FOBOS名称的由来。

 

2. L1-FOBOS

关于FOBOS的收敛性和Regret就不在此讨论了,详情可参见论文[1]。这里我们来看看FOBOS如何在L1正则化下取得比较好的稀疏性。

在L1正则化下,有为了简化描述,用向量来表示用标量来表示并将公式(1)等号右边按维度展开:

 

   公式(2)

我们可以看到,在求和公式中的每一项都是大于等于的,所以公式(2)可以拆解成对特征权重 每一维度单独求解:

 

 

首先,假设的最优解,则有,这是因为:

 

--------------------------------------------------------------------

反证法:
          假设成立,那么有

 

          这与的最优解相矛盾,故假设不成立,成立。

---------------------------------------------------------------------

 

既然有,那么我们可以分两种情况来进行讨论:

---------------------------------------------------------------------
(1) 当时:
由于,所以,相当于对引入了不等式条件;
为了求解这个含不等式约束的最优化问题,引入拉格朗日乘子,由KKT条件,有:以及
根据上面的求导等式可得:

再次分为两种情况:

(a)

由于,所以;这时有:;又由于,所以

(b)

这时有;又由于,所以
综合(a)(b)的结论,当时,
(2) 当时:
采用相同的分析方法可得,在时有:
---------------------------------------------------------------------

综合上面的分析,可以得到在FOBOS在L1正则化条件下,特征权重的各个维度更新的方式为:

 

     公式(3)

其中,为梯度在维度i上的取值。

 

根据公式(3),我们很容易就可以设计出L1-FOBOS的算法逻辑:

3. L1-FOBOS与TG的关系

公式3)可以看出,L1-FOBOS在每次更新的时候,对的每个维度都会进行判定,当满足时对该维度进行“截断”,这个判定条件的含义是当一条样本产生的梯度不足以令对应维度上的权重值发生足够大的变化时,认为在本次更新过程中该维度不够重要,应当令其权重为0。

对于L1-FOBOS特征权重的各个维度更新公式(3),也可以写作如下形式:

 

 比较上式与TG的特征权重维度更新公式,可以发现如果令,L1-FOBOS与TG完全一致。我们可以认为L1-FOBOS是TG在特定条件下的特殊形式。

 

参考文献

[1]  John Duchi & Yoram Singer. Efficient Online and Batch Learning using Forward Backward Splitting. Journal of Machine Learning Research, 2009

转载地址:http://toqga.baihongyu.com/

你可能感兴趣的文章
使用 Content-Encoding: br 替换 Content-Encoding: gzip
查看>>
【Linux】cp命令
查看>>
基于matplotlib的数据可视化 - 热图imshow
查看>>
linux编译安装mysql5.1.x
查看>>
Tensorflow get_variable和Varialbe的区别
查看>>
CSS魔法堂:那个被我们忽略的outline
查看>>
学习ASP.NET Core Razor 编程系列十八——并发解决方案
查看>>
[翻译]pytest测试框架(二):使用
查看>>
Java-线程间通信小结
查看>>
PHPUnit简介及使用(thinkphp5的单元测试安装及使用)
查看>>
人工智能热门图书(深度学习、TensorFlow)免费送!
查看>>
照片与本人严重不符
查看>>
编码(2)从字节理解Unicode(UTF8/UTF16)
查看>>
(轉貼) Jolt 2007得獎名單 (News) (.NET)
查看>>
(轉貼) ThinkPad鍵盤設計原理和哲學 (NB) (ThinkPad)
查看>>
Left 4 Dead升级补丁总汇(3663-3986)
查看>>
Delphi的System.Str - 将数字格式化为字符串
查看>>
Jlink无法识别CPU/lpc2103/lpc2131
查看>>
GridView里面嵌套RadioButton
查看>>
纯css制作带三角(兼容所有浏览器)
查看>>