在线学习算法FTRL基本原理

article/2025/9/26 16:19:59

文章目录

  • 相关介绍
    • SGD: Stochastic Gradient Descent
    • TG
      • 简单加入L1范数
      • 简单截断法
      • 梯度截断法
    • FOBOS: Forward Backward Splitting[^4]
      • RDA: Regularized dual averaging[^5]
  • FTRL: Follow-the-Regularized-Leader
  • 总结

相关介绍

SGD: Stochastic Gradient Descent

由于批量梯度下降法在更新每一个参数时,都需要所有的训练样本,所以训练过程会随着样本数量的加大而变得异常的缓慢。 与SGD比较,GD需要每次扫描所有的样本以计算一个全局梯度,SGD则每次只针对一个观测到的样本进行更新。通常情况下SGD可以更快的逼近最优值,而且SGD每次更新只需要一个样本,使得它很适合进行增量或者在线计算(也就是所谓的Online learning)。权重更新方式如下:

Δ ω t = − η g t \Delta {\omega_t} = - \eta {g_t} Δωt=ηgt

ω t + 1 = ω t + Δ ω t {\omega_{t + 1}} = {\omega_t} + \Delta {\omega_t} ωt+1=ωt+Δωt

特别的,迭代和选取模型的时候我们经常希望得到更加稀疏的模型,这不仅仅起到了特征选择的作用,也降低了预测计算的复杂度。在实际使用LR的时候我们会使用L1或者L2正则,避免模型过拟合和增加模型的鲁棒性。在GD算法下,L1正则化通常能得到更加稀疏的解;可是在SGD算法下模型迭代并不是沿着全局梯度下降,而是沿着某个样本的梯度进行下降,这样即使是L1正则也不一定能得到稀疏解1

TG

简单加入L1范数

如上所说,在GD算法下,L1正则化通常能得到更加稀疏的解;可是在SGD算法下模型迭代并不是沿着全局梯度下降,而是沿着某个样本的梯度进行下降,这样即使是L1正则也不一定能得到稀疏解。a+b两个float数很难绝对等于零,无法产生真正稀疏的特征权重。权重更新方式如下:

Δ ω t = − g t − λ s g n ( ω t ) \Delta {\omega _t} = - {g_t} - \lambda {\mathop{\rm sgn}} ({\omega _t}) Δωt=gtλsgn(ωt)

ω t + 1 = ω t + η Δ ω t {\omega _{t + 1}} = {\omega _t} + \eta \Delta {\omega _t} ωt+1=ωt+ηΔωt

简单截断法

既然L1正则化在Online模式下也不能产生更好的稀疏性,而稀疏性对于高维特征向量以及大数据集又特别的重要,我们应该如何处理的呢?

简单粗暴的方法是设置一个阀值,当W的某纬度的系数小于这个阀值的时候,将其直接设置为0。这样我们就得到了简单截断法。简单截断法以 k k k为窗口,当 t k {t \over k} kt不为整数时采用标准的SGD进行迭代,当 t k {t \over k} kt为整数时,权重更新方式如下:

ω t + 1 = T 0 ( ω t + η Δ ω t , θ ) {\omega _{t + 1}} = {T_0}({\omega _t} + \eta \Delta {\omega _t},\theta ) ωt+1=T0(ωt+ηΔωt,θ)

T 0 ( v i , θ ) = { 0 , i f ∣ v i ∣ ≤ 0 v i , o t h e r w i s e {T_0}({v_i},\theta )=\left\{\begin{array}{cc} 0, & {if \quad|{v_i}| \le 0}\\ {{v_i}}, & otherwise \end{array}\right. T0(vi,θ)={0,vi,ifvi0otherwise

θ \theta θ为一正数, v i v_i vi为一向量。

梯度截断法

简单截断法法简单且易于理解,但是在实际训练过程中的某一步, ω \omega ω的某个特征系数可能因为该特征训练不足引起的,简单的截断过于简单粗暴(too aggresive),会造成该特征的缺失。那么我们有没有其他的方法,使得权重的归零和截断处理稍微温柔一些呢?那就是梯度截断法。

ω t + 1 = T 0 ( ω t + η ∇ L ( ω t ) , η g i , θ ) {\omega _{t + 1}} = {T_0}({\omega _t} + \eta \nabla L({\omega _t}),\eta {g_i},\theta ) ωt+1=T0(ωt+ηL(ωt),ηgi,θ)

T 1 ( v i , α , θ ) = { max ⁡ ( 0 , v i − α ) , i f v i ∈ [ 0 , θ ] min ⁡ ( 0 , v i + α ) , i f v i ∈ [ − θ , 0 ] v i , o t h e r w i s e (1) {T_1}({v_i},\alpha ,\theta )=\left\{\begin{array}{cc} \max (0,{v_i} - \alpha ),&{\rm{ }}if\quad {v_i} \in [0,\theta ]\\ \min (0,{v_i} + \alpha ),&{\rm{ }}if\quad {v_i} \in [ - \theta ,0]\\ {v_i}, & otherwise \end{array}\right.\tag1 T1(vi,α,θ)=max(0,viα),min(0,vi+α),vi,ifvi[0,θ]ifvi[θ,0]otherwise(1)

同样的梯度截断法也是以 k k k为窗口,每 k k k步进行一次截断。当 t k {t \over k} kt不为整数时,当 t k {t \over k} kt为整数时 g i = k g {g_i}=kg gi=kg。从Eq.(1)可以看出 g g g θ \theta θ决定了截断的区域,也决定了 ω \omega ω的稀疏程度。这两个数值越大,截断区域越大,稀疏性也越强。尤其这两个值相等的时候,只需要调节一个参数就能控制稀疏性。

FOBOS: Forward Backward Splitting2

FOBOS将每一个数据的迭代过程,分解成一个经验损失梯度下降迭代Eq.(1)和一个最优化问题Eq.(2)。分解出的最优化问题Eq.(2),有两项:第一项l2范数表示不能离第一步loss损失迭代结果太远,第二项是正则化项,用来限定模型复杂度抑制过拟合和做稀疏化等3

ω t + 1 2 = ω t − η t g t f (1) {\omega _{t + {1 \over 2}}} = {\omega _t} - {\eta _t}{g_t}^f\tag1 ωt+21=ωtηtgtf(1)

ω t + 1 = arg ⁡ min ⁡ ω { 1 2 ∥ ω − ω t + 1 2 ∥ 2 + η t + 1 2 r ( ω t ) } (2) {\omega _{t + 1}} = \mathop {\arg \min }\limits_\omega \left\{ {{1 \over 2}{{\left\| {\omega - {\omega _{t + {1 \over 2}}}} \right\|}^2} + {\eta _{t + {1 \over 2}}}r({\omega _t})} \right\}\tag2 ωt+1=ωargmin{21ωωt+212+ηt+21r(ωt)}(2)

对Eq.(2)求 ω t + 1 {\omega _{t + 1}} ωt+1导数,我们可以得出一个结论: 0 0 0一定属于Eq.(2)等号右边的导数集!

0 ∈ ∂ { 1 2 ∥ ω − ω t + 1 2 ∥ 2 + η t + 1 2 ∂ r ( ω t + 1 ) } ∣ ω = ω t + 1 (3) 0 \in \partial {\left. {\left\{ {{1 \over 2}{{\left\| {\omega - {\omega _{t + {1 \over 2}}}} \right\|}^2} + {\eta _{t + {1 \over 2}}}\partial r({\omega _{t + 1}})} \right\}} \right|_{\omega = {\omega _{t + 1}}}}\tag3 0{21ωωt+212+ηt+21r(ωt+1)}ω=ωt+1(3)

由于 ω t + 1 = ω t − η t g t f {\omega _{t + 1}} = {\omega _t} - {\eta _t}{g_t}^f ωt+1=ωtηtgtf,可得

0 ∈ ω t + 1 − ω t + η t g t f + η t + 1 2 ∂ r ( ω t + 1 ) (4) 0 \in {\omega _{t + 1}} - {\omega _t} + {\eta _t}{g_t}^f + {\eta _{t + \frac{1}{2}}}\partial r({\omega _{t + 1}})\tag4 0ωt+1ωt+ηtgtf+ηt+21r(ωt+1)(4)

Eq.(4)意味着只要选择使得Eq.(3)最小的 ω t + 1 {\omega _{t + 1}} ωt+1,那么就保证可以获得向量 g t + 1 f ∈ ∂ r ( ω t + 1 ) {g_{t + 1}}^f \in \partial r({\omega _{t + 1}}) gt+1fr(ωt+1)使得:
0 = ω t + 1 − ω t + η t g t f + η t + 1 2 g t + 1 f (5) 0 = {\omega _{t + 1}} - {\omega _t} + {\eta _t}{g_t}^f + {\eta _{t + \frac{1}{2}}}{g_{t + 1}}^f\tag5 0=ωt+1ωt+ηtgtf+ηt+21gt+1f(5)

从而将 ω t + 1 {\omega _{t + 1}} ωt+1写成:

ω t + 1 = ω t − η t g t f − η t + 1 2 g t + 1 f (6) {\omega _{t + 1}} = {\omega _t} - {\eta _t}{g_t}^f - {\eta _{t + {1 \over 2}}}{g_{t + 1}}^f\tag6 ωt+1=ωtηtgtfηt+21gt+1f(6)

最后论文中推导了带L1正则的FOBOS算法。权重更新式为:

算法伪代码如下:

f_al

RDA: Regularized dual averaging4

之前的算法都是在SGD的基础上,属于梯度下降类型的方法,这类型的方法的优点是精度比较高,并且TG、FOBOS也能在稀疏性上得到提升。但是RDA却从另一个方面进行在线求解,并且有效提升了特征权重的稀疏性。

L1-RDA特征权重各个纬度更新方式为:

rda_l1

这里当某个纬度上累积梯度平均值小于阀值的时候,该纬度权重将被设置为0,特征稀疏性由此产生。

对比L1-FOBOS我们可以发现,L1-FOBOS是TG的一种特殊形式,在L1-FOBOS中,进行截断的判定条件是$|{\omega _t} - {\eta _t}{g_t}^f| \le {\lambda _{TG}} = {\eta _{t + {1 \over 2}}}\lambda 。 通 常 会 定 义 为 正 相 关 函 数 。通常会定义为正相关函数 \eta = \Theta \left( {{1 \over {\sqrt t }}} \right) 。 因 此 L 1 − F O B O S 的 截 断 阀 值 为 。因此L1-FOBOS的截断阀值为 L1FOBOS\Theta \left( {{1 \over {\sqrt t }}} \right)\lambda , 随 着 ,随着 t$增加,这个阀值会逐渐降低。而相比较而言L1-RDA的截断阀值为,是一个固定的常数,因此可以认定L1-RDA比L1-FOBOS更加aggressive。此外L1-FOBOS判定是针对单次梯度计算进行判定,避免由于训练不足导致的截断问题。并且通过调节一个参数,很容易在精度和稀疏性上进行权衡。

给出其两种实现的伪代码:

rad1

rda2

FTRL: Follow-the-Regularized-Leader

有实验证明,L1-FOBOS这一类基于梯度下降的方法有较高的精度,但是L1-RDA却能在损失一定精度的情况下产生更好的稀疏性。如何能把这两者的优点同时体现出来的呢?这就是FTRL,L1-FOBOS与L1-RDA在形式上的统一。这里有张来自引用[3]的图:

f

FTRL综合考虑了FOBOS和RDA对于正则项和W的限制,其特征权重为:

ftrl_w

而后可导出更新式为:

ftrl_update

具体的变换推导,请参考2013年发表的FTRL工程化实现的论文5

其采用L1和L2混合正则的FTRL的伪代码如下:

ftrl_algorithm

上面所谓的per-coordinate,其意思是FTRL是对 w w w每一维分开训练更新的,每一维使用的是不同的学习速率,也是上面代码中 λ 2 \lambda_2 λ2之前的那一项。与 w w w所有特征维度使用统一的学习速率相比,这种方法考虑了训练样本本身在不同特征上分布的不均匀性,如果包含 w w w某一个维度特征的训练样本很少,每一个样本都很珍贵,那么该特征维度对应的训练速率可以独自保持比较大的值,每来一个包含该特征的样本,就可以在该样本的梯度上前进一大步,而不需要与其他特征维度的前进步调强行保持一致。

总结

从类型上来看,简单截断法、TG、FOBOS属于同一类,都是梯度下降类的算法,并且TG在特定条件可以转换成简单截断法和FOBOS;RDA属于简单对偶平均的扩展应用;FTRL6可以视作RDA和FOBOS的结合,同时具备二者的优点。目前来看,RDA和FTRL是最好的稀疏模型Online Training的算法。FTRL并行化处理,一方面可以参考ParallelSGD,另一方面可以使用高维向量点乘,及梯度分量并行计算的思路。


  1. 机器学习(五)— FTRL一路走来,从LR -> SGD -> TG -> FOBOS -> RDA -> FTRL ↩︎

  2. Efficient Online and Batch Learning Using Forward Backward Splitting ↩︎

  3. 各大公司广泛使用的在线学习算法FTRL详解 ↩︎

  4. Dual Averaging Methods for Regularized Stochastic Learning and Online Optimization ↩︎

  5. Ad Click Prediction: a View from the Trenches ↩︎

  6. Follow-the-Regularized-Leader and Mirror Descent: Equivalence Theorems and L1 Regularization ↩︎


http://chatgpt.dhexx.cn/article/x82ueiYF.shtml

相关文章

Lr

二、 逻辑回归 言归正传,因为广告大部分是按照CPC计费的,而我们手里的流量是固定的,因此对每条广告请求我们就需要保证这条广告的展示收益更大。而广告收益是可以根据点击率、广告计费价格、广告质量度均衡决定的,所以我们就需要评…

在线学习FTRL介绍及基于Flink实现在线学习流程

背景 目前互联网已经进入了AI驱动业务发展的阶段,传统的机器学习开发流程基本是以下步骤: 数据收集->特征工程->训练模型->评估模型效果->保存模型,并在线上使用训练的有效模型进行预测。 这种方式主要存在两个瓶颈&#xff1…

FTRL的理解

个人理解:FTRL是针对LR学习器,设计了一种独特的梯度下降更新方法 从Logistic Regression到FTRL Logistic Regression在Linear Regression的基础上,使用sigmoid函数将yθxb的输出值映射到0到1之间,且log(P(y1)/P(y0)) θxb。并且…

2021-09-08FTRL 跟随正确的领导者

2.2.3 FTRL FTRL(Follow the Regularized Leader)是一种优化算法,在处理诸如逻辑回归 之类的带非光滑正则化项的凸优化问题上性能出色,自 2013 年谷歌发表 FTRL 算 法的工程性实现论文后[17],业界纷纷上线该算法&…

python编程之np.argmin()用法解析

疑惑 np.argmin()究竟是干嘛用的? 解惑 给出水平方向最小值的下标; list最小的值是3,对应的下标是2; list1展平是9,8,7,66,23,55,4,23,33;最小的值是4,对应的下标是6

关于argmin和argmax的一点说明

一、定义 首先我们应该知道,arg是元素(变元)argument的英文缩写。 在数学中,arg max的参数是指使函数值最大化的某个函数域的点。与全局最大值相反,其指的是函数的最大输出 ,同理,arg min指的是…

clickhouse的argMin()和argMax()函数

1.语法规则 函数语法argMin(arg,val)计算最小值的arg值。如果val的最小值有几个不同的arg值,则遇到的第一个值是输出。argMax(arg,val)计算最大值的参数值。如果存在多个不同的arg值来表示val的最大值,则遇到的第一个…

LaTeX 书写 argmax and argmin 公式

LaTeX 书写 argmax and argmin 公式 1. arg max or argmax For a real-valued function f f f with domain S S S, arg ⁡ max ⁡ f ( x ) x ∈ S \underset{x\in S}{{\arg\max} \, f(x)} x∈Sargmaxf(x)​ is the set of elements in S S S that achieve the global maxi…

torch.argmin()的使用举例

参考链接: argmin(dimNone, keepdimFalse) → LongTensor 参考链接: torch.argmin() 代码实验举例: Microsoft Windows [版本 10.0.18363.1256] (c) 2019 Microsoft Corporation。保留所有权利。C:\Users\chenxuqi>conda activate ssd4pytorch1_2_0(ssd4pytorch1_2_0) C:\U…

numpy.argmin()||argmax()结构及用法||详解axis

numpy.argmin(a, axisNone, outNone)官方文档 参数详解 a : array_like 输入数组 axis : int, optional 默认输入数组展平,否则,按照指定的axis方向 按照指定轴,可以理解为将数据投影到这个轴上。 out : array, optional如果设置了某个数…

ARG MIN的含义是什么?

ARG MIN的含义是什么? 最通俗的理解:表示使目标函数取最小值时的变量值 From Wikipedia In mathematics, arg max (or argmax) stands for the argument of the maximum, that is to say, the set of points of the given argument for which the value…

Matlab中关于argmax、argmin函数的使用

1、在matlab的现有函数中,并没有argmax,argmin函数可以直接调用,要根据这两个函数的实际意义,自己编写程序进行计算 2、我要求解的函数是下式: 其中mad(theta)和amd(theta)两个均为1 * 11的double型向量 括号里得到一…

argmax和argmin的理解

1、符号 :argmax: 2、符号 :argmin:

argmin ,argmax函数

在数学中,ARG MAX(或ARGMAX)代表最大值,即给定参数的点集,给定表达式的值达到其最大值: 换一种说法, 是f(x)具有最大值M的x的值的集合。例如,如果f&#xff0…

全网最详细numpy的argmin与argmax解析(一次性理解np.argmin)

本文以np.argmin()进行讲解,np.argmax()与之类似,np.argmin()求最小值对应的索引,np.argmax()求最大值对应的索引 首先看一下官方注释 def argmin(a, axisNone, outNone):"""Returns the indices of the minimum values alo…

矩阵的内积和外积,三向量混合积

矩阵的内积指的是矩阵点乘,即矩阵的对应元素相乘;矩阵的外积指的是矩阵的叉乘,即矩阵相乘,比如CA*B,则A的列数要与B的行数一致,例如A为[m,n], B 为[n,k], 则C为 [m,k].三向量混合积的…

矩阵与向量的乘积

下面是定义: Ax的结果会让我们想起之前的线性系统和多元一次方程组 也就是说,向量x在经过矩阵A的变换后,得到了向量B 下面以两种观点来看矩阵与向量的乘积。 row aspect 矩阵的第n行与向量做内积,然后将结果放在第n行 2.colum…

【矩阵论】内积空间与等距变换(2)

内积空间与等距变换之正交补空间与等距变换 一. 正交补空间的定义及概念 1. 正交关系的定义 (1)向量正交于子空间 若某空间V中的向量α垂直于V的子空间W中的任意一个向量,就说该向量α垂直于子空间W。 (2)子空间正交…

【矩阵论】内积空间与等距变换(1)

内积空间与等距变换之基本概念 前面有关于“线性空间与线性变换”的概念主要是对几何空间中的线性运算(数乘和加法运算)进行了推广; 不论我们讨论线性空间的什么性质和定义,其本质都是围绕着线性运算进行展开的。 但是在几何空间…

矩阵分析L3内积空间

一、内积空间的概念 1.概念 两个向量的点乘操作应该算内积空间 2.性质 3.类型 Rn上的标准内积 因为要对应位置相乘,所以后一个转置了一下 Rnn上的内积 同样也是对应位置相乘 Rmn上的内积 转置后再相乘,因为对应 二、向量的长度及夹角 1.向量长度 …