FTRL公式推导
写在前面:
本文主要参考Online Learning算法理论与实践,但该文和网上找到的资料都没有很好的给出关于模型参数w的解析解的推导过程,甚至原论文http://www.eecs.tufts.edu/~dsculley/papers/ad-click-prediction.pdf还有一些符号错误。所以特此写个博文记录一下自己的推导过程。
一. 什么是FTRL
首先介绍一下FTL,FTL的思想是每次找到让之前所有样本的损失函数之和最小的参数。流程如下:
初始化w
for t = 1...n
损失函数 f_{t}
更新
w = argmin_{w}\sum_{i=1}^{t}{f_{i}(w)}
FTRL算法就是在FTL的优化目标的基础上,加入了正则化,防止过拟合:
w = argmin_{w}\sum_{i=1}^{t}{f_{i}(w)}+R(w)
其中R(w)是正则项。
二. 代理损失函数
FTRL的损失函数一般也不容易求解,这种情况下,一般需要找一个代理的损失函数。
代理损失函数需要满足以下条件:
- 代理损失函数比较容易求解,最好是有解析解。
- 代理损失函数求得的解,和原函数的解的差距越小越好
为了衡量条件2中的两个解的差距,引入regret的概念。
假设每一步用的代理函数是 h_{t}(w)
每次取:
w_{t}=argmin_{w}h_{t-1}(w)
而 w^{*}=argmin_{w}\sum_{i=1}^{t}{f_{i}(w)} 是原函数的最优解,则:
Regret_{t}=\sum_{t=1}^{T}{f_{t}(w_t)}-\sum_{t=1}^{T}{f_{t}(w^*)} 表示代理函数求出来的解离真正损失函数求出来的解的损失差距。
这个损失需要满足一定的条件,Online learning才可以有效,即:
\lim_{t \rightarrow \infty}{\frac{Regret_t}{t}}=0
即随着训练样本的增加,代理损失函数和原损失函数求出来的参数的实际损失值差距越来越小。
三. 代理损失函数怎么选
如果 f_t(w) 是凸函数,我们可以用下面的代理损失函数:
h_t=\sum_{i=1}^{t}{g_i*w}+\sum_{i=1}^{t}({\frac{1}{2\eta_i}-\frac{1}{2\eta_{i-1}})*||w-w_t||^2}
其中 g_i 是 f_i(w_i) 的次梯度(如果 f_i(w_i) 是可导的,次梯度就是梯度)。 \eta_t 满足:
\eta_t=\frac{\alpha}{\sqrt{\sum_{i=1}^{t}{{g_t}^2}}}
为了产生稀疏的解,我们可以加入L1正则项:
h_t=\sum_{i=1}^{t}{g_i*w}+\sum_{i=1}^{t}({\frac{1}{2\eta_i}-\frac{1}{2\eta_{i-1}})*||w-w_t||^2}+\lambda_1|w|
只要 f_t(w) 是凸函数,上面的代理函数一定满足:
\lim_{t \rightarrow \infty}{\frac{Regret_t}{t}}=0
四. 怎么得出w的解析解
h_t=\sum_{i=1}^{t}{g_i*w}+\sum_{i=1}^{t}({\frac{1}{2\eta_i}-\frac{1}{2\eta_{i-1}})*||w-w_t||^2}+\lambda_1|w|
h_t=\sum_{i=1}^{t}{[g_i-({\frac{1}{\eta_t}-\frac{1}{\eta_{t-1}}})*w_t]*w}+\frac{1}{2}\sum_{i=1}^{t}({\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}})*w^2+\frac{1}{2}\sum_{i=1}^{t}(\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}})*{w_t}^2}+\lambda_1|w|
取只和w相关的部分:
h_t=\sum_{i=1}^{t}{[g_i-({\frac{1}{\eta_t}-\frac{1}{\eta_{t-1}}})*w_t]*w}+\frac{1}{2}\sum_{i=1}^{t}({\frac{1}{\eta_t}-\frac{1}{\eta_{t-1}})*w^2}+\lambda_1|w|
1.当求得的w是大于等于0的时候:
h_t=\sum_{i=1}^{t}{[g_i-({\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}}})*w_t]*w}+\frac{1}{2}\sum_{i=1}^{t}({\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}})*w^2}+\lambda_1w
\frac{\partial{h_t}}{\partial{w}}=\sum_{i=1}^{t}{[g_i-(\frac{1}{\eta_t}-\frac{1}{\eta_{t-1}})w_t]}+\sum_{i=1}^{t}{(\frac{1}{\eta_t}-\frac{1}{\eta_{t-1}})}w+\lambda_1
其中 \sum_{i=1}^{t}{(\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}})}=\frac{1}{\eta_t} ,另上述偏导数等于0,可得:
\frac{1}{\eta_t}*w=-\sum_{i=1}^{t}{[g_i-(\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}})w_i]}-\lambda_1
所以:
w=-\eta_t*[\sum_{i=1}^{t}{[g_i-(\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}})w_i]}+\lambda_1]
因为我们现在是讨论w>=0的解,而 \eta_t=\frac{\alpha}{\sqrt{\sum_{i=1}^{t}{{g_t}^2}}} 大于0( \alpha 大于0),所以当:
\sum_{i=1}^{t}{[g_i-(\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}})w_i]}+\lambda_1<0 时,才符合我们的要求
而 \lambda_1 大于0。
令 z_t=\sum_{i=1}^{t}{[g_i-(\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}})w_i]} :
当 z_t >=0时, z_t+\lambda_1 是肯定大于0的,即不符合我们的要求。
当 z_t <0时,要满足 z_t+\lambda_1<0 ,即 -z_t>\lambda_1,即 |z_t|>\lambda_1 ,
所以有:
因为此时 sgn(z)=-1,w=-\eta_t*[\sum_{i=1}^{t}{[g_i-(\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}})w_i]}+\lambda_1]
2.当求得的w是小于0的时候:
h_t=\sum_{i=1}^{t}{[g_i-({\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}}})*w_t]*w}+\frac{1}{2}\sum_{i=1}^{t}({\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}})*w^2}-\lambda_1w
\frac{\partial{h_t}}{\partial{w}}=\sum_{i=1}^{t}{[g_i-(\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}})w_t]}+\sum_{i=1}^{t}{(\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}})}w-\lambda_1
令偏导数等于0,可得:
w=-\eta_t*[\sum_{i=1}^{t}{[g_i-(\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}})w_t]}-\lambda_1]
因为我们现在是讨论w<0的解,而 \eta_t=\frac{\alpha}{\sqrt{\sum_{i=1}^{t}{{g_t}^2}}} 大于0( \alpha 大于0),所以当:
\sum_{i=1}^{t}{[g_i-(\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}})w_i]}-\lambda_1>0 时,才符合我们的要求
而 \lambda_1 大于0。
令 z_t=\sum_{i=1}^{t}{[g_i-(\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}})w_i]} :
当 z_t <=0时, z_t-\lambda_1 是肯定小于0的,即不符合我们的要求。
当 z_t >0时,要满足 z_t-\lambda_1>0 ,即 z_t>\lambda_1,即 |z_t|>\lambda_1 ,
所以有:
因为此时 sgn(z)=1,w=-\eta_t*[\sum_{i=1}^{t}{[g_i-(\frac{1}{\eta_i}-\frac{1}{\eta_{i-1}})w_i]}-\lambda_1]
五. 为什么选择这个代理损失函数
参考在线学习算法FTRL-Proximal原理 - 雪伦的专栏 - CSDN博客
重点是为什么说第一项是对损失函数的一个估计呢:
本人暂时说一个牵强的解释(g是f的梯度):
根据泰勒展开公式: f(x)=f(x_0)+(x-x_0)*f^{'}(x_0) ,如果 f(x_0)=0且x_0=0 ,则:
f(x)=x*f^{'}(x_0)
就有了上述截图中类似的表达式子。
六. 遗留问题
- 如果 f_t(w) 不是凸函数,我们怎么选代理损失函数?
- 什么是次梯度
- 为什么只要 f_t(w) 是凸函数,上面的代理函数一定满足:
\lim_{t \rightarrow \infty}{\frac{Regret_t}{t}}=0
未完待续。。。。
参考链接: