FTRL算法

article/2025/9/27 10:06:16

概述

GBDT算法是业界比较好用筛选特征的算法,在线学习考虑效率和数据量,经常用GBDT离线筛选特征,输入到在线模型进行实时训练,如今比较好用的方法是GBDT+LR,而FTRL是另外一种很高效的算法,与其类似的有OGD,FOBOS,RDA等,下面将逐一介绍原理以及应用的案例。

线上模型

点击率预估(CTR)问题是计算广告中非常重要的模块,通过预估用户对广告的点击概率来对广告进行排序,进而提升广告效果和收益效率。对于大规模的在线预测模型,不仅要考虑大的数据量带来的处理效率的问题,还要考虑数据的稀疏性对于模型拟合带来的影响。
经典的LR模型主要通过sigmoid函数,将线性拟合结果转化为概率,通过梯度下降(GD)对最大似然概率(loss函数)的求解最终得到参数的估计值。梯度下降法能够保证精度,要想预防过拟合问题一般会加上正则项,L1相对于L2正则能够产生更系数的参数(why?)

在线优化算法

在线学习算法的特点是:每来一个训练样本,就用该样本产生的loss和梯度对模型迭代一次,在线学习算法需要特殊关注模型鲁棒性和稀疏性,由于样本是一个一个到来,参数可能会因为训练样本不足导致过拟合,因此需要算法重点解决模型系数性的问题。对此,业界有以下几种算法从不同角度解决系数问题:

L1正则法

对于L1正则(正则推导),模型权重更新方式为

Wt+1=WtηtGtηtλsgn(ωt) W t + 1 = W t − η t G t − η t λ s g n ( ω t )

模型稀疏性控制参数 λ λ 会将接近0的参数趋近于0

简单截断法

相对于L1正则,属于简单粗暴的方法,直接将不满足阈值的系数设置为0,。以k为窗口,如果t/k不为整数时,采用标准的SGD进行优化,否则采用如下方法:

Wt+1=T0(WtηtGt,θ)T0(vi,θ)={0,  if viθvi,  others W t + 1 = T 0 ( W t − η t G t , θ ) T 0 ( v i , θ ) = { 0 , i f | v i | ≤ θ v i , o t h e r s

通过参数 θ θ 控制模型稀疏性( define)

梯度截断法TG

在简单截断法的基础上提出了改进:

Wt+1=T1(WtηtGt,ηtλt,θ)T1(vi,α,θ)=max(0,viα),  if vi[0,θ]min(0,vi+α),  if vi[θ,0]vi,  others W t + 1 = T 1 ( W t − η t G t , η t λ t , θ ) T 1 ( v i , α , θ ) = { m a x ( 0 , v i − α ) , i f | v i | ∈ [ 0 , θ ] m i n ( 0 , v i + α ) , i f | v i | ∈ [ − θ , 0 ] v i , o t h e r s

参数 λ λ θ θ 控制模型稀疏,值越大越稀疏,写入为简单截断法与TG的区别


这里写图片描述

在线梯度下降OGD(Online gradient descent)

线下GDs

GD算法:


这里写图片描述

SGD算法:


这里写图片描述

与SGD比较,GD需要每次扫描所有的样本以计算一个全局梯度,SGD则随机抽几个数据进行训练,通常SGD可以更快的逼近最优值,效率会高很多

线上GD

OGD:


这里写图片描述

online learning强调学习的实时性,流式的,每次训练不用全部样本,而是根据训练好的模型,每来一个样本更新一次模型,这种方法叫做OGD(Online Gradient Descent)
目标函数:

minw=1Tt=1Tf(w,zt)+ψ(w) m i n w = 1 T ∑ t = 1 T f ( w , z t ) + ψ ( w )

其中使用了混合正则化项: ψ(w)=λ||w||1+(σ/2)||w||22 ψ ( w ) = λ | | w | | 1 + ( σ / 2 ) | | w | | 2 2

我们将online learning中的累计损失记为 Tt=1lt(ht) ∑ t = 1 T l t ( h t ) ,如果挑选 ht h t 的策略集H是凸的,而且随时函数 lt(ht) l t ( h t ) 关于 ht h t 是凸的,那么我们称这个问题为OCP(Oline Convex Optimization)。通常我们将 ht h t 表示为一个向量。

在线梯度下降算法在t时刻做两步操作:

  • 利用当前得到数据对 ht h t 进行一次梯度下降得到 ht+1 h t + 1
  • 投影操作:

    • 如果新的 ht+1 h t + 1 在H中,则将其投影:

      ht+1=H(htηtlt(ht)) h t + 1 = ∏ H ( h t − η t ∇ l t ( h t ) )

      其中 lt(ht) ∇ l t ( h t ) lt(ht) l t ( h t ) 关于 ht h t 的导数, ηt η t 是学习率, H(.) ∏ H ( . ) 是投影子,公式为 H(x)=argminyH||xy|| ∏ H ( x ) = a r g m i n y ∈ H | | x − y | | ,表示向量x投影成与x最近的但在H中的向量。因此算法的目的在于通过投影寻找最优的 ht h t

    • 否则不做任何处理

在线梯度下降只知道当前一个数据所得到的有偏差的梯度,能保证减少 lt(ht) l t ( h t ) ,对别的项的减少程度是未知的,可能会走点弯路。其优势在于每步是需要看一下当前的一个数据,代价很小。

论文:http://www0.cs.ucl.ac.uk/staff/M.Pontil/reading/lsqonline280406.pdf


这里写图片描述

AOGD:


这里写图片描述

具体推导见论文:https://papers.nips.cc/paper/3319-adaptive-online-gradient-descent.pdf

FOBOS(Forward-Backward Splitting)

FOBOS称为前后项算法,其权重的更新方式分为两个部分:


这里写图片描述

第一步为标准的梯度下降,然后将结果进行正则化的微调,满足最速下降切保证了一定的稀疏性。其中 ψ(W) ψ ( W ) 是正则项可以对权重进行约束,常用的选择为L1,则对应的方法为L1-FOBOS

RDA

RDA(正则对偶平均)是微软的研究成果,其权重更新策略为:


这里写图片描述

权重更新包括三部分,一部分是线性加权,即对历史梯度进行加权平均;第二部分正则项部分对特征进行稀疏化;第三部分严格递增序列相当于额外的正则项。实验证明可以产生较好的稀疏和精度

FTRL(Follow-the-regularized-Leader)

FTRL是Google提出的在线算法,由于其在工程实现上进行了大量优化,在工业界应用非常广泛。主要思想概述如下图:


这里写图片描述

算法流程:


这里写图片描述

FTRL的权重更新策略为:


这里写图片描述

  • g1:t=ts1gt g 1 : t = ∑ s − 1 t g t 相当于新产生的权重验证所有样本的梯度并且和历史权重不偏离太远,通过L1正则进行稀疏性约束。这样既保证了权重更新的精度又保证了稀疏性。
  • 参数 σs σ s 是一个和学习率相关的参数 ts1σs=1ηt ∑ s − 1 t σ s = 1 η t ηt=1t η t = 1 t 是非增序列
  • 公式推导

工程优化:
1. 预测的内存方面:L1范式加策略,训练结果w很稀疏,在用w做predict的时候节省了内存,很直观
2. 训练的内存方面:
1)在线丢弃训练数据中很少出现的特征,即稀疏特征处理:

  • Possion Inclusion(通过一定概率扔掉特征,对某一维度特征所来的训练样本,以p的概率接受并更新模型)
  • BloomFilter Iclusion(通过碰撞优化特征,用bloom filter从概率上做某一特征出现k次才更新)

2)浮点数重新编码

  • 特征权重不需要用32bit或64bit的浮点数存储,存储浪费空间
  • 16bit encoding,但是要注意处理rounding技术对regret带来的影响

3)训练若干相似model

  • 对同一份数据序列,同时训练多个相似的model
  • 这些model有各自独享的一些feature,也有一些共享的feature
  • 出发点:有的特征维度可以是各个模型独享的,而有的各个模型共享的特征,可以用同样的数据训练

4)Single Value Structure(据说有公司已经在实际中这么搞,大数据量下也能够保证不错的auc)

  • 多个model公用一个feature存储(例如放到cbase或redis中),各个model都更新这个共有的feature结构
  • 对于某一个model,对于他所训练的特征向量的某一维,直接计算一个迭代结果并与旧值做一个平均

5) 使用正负样本的数目来计算梯度的和(所有的model具有同样的N和P)

g2t,i=positiveevents(1pt)2+negativeeventsp2t P(1PN+P)2+N(PN+P)2=PNN+P ∑ g t , i 2 = ∑ p o s i t i v e e v e n t s ( 1 − p t ) 2 + ∑ n e g a t i v e e v e n t s p t 2 ≈ P ( 1 − P N + P ) 2 + N ( P N + P ) 2 = P N N + P

6) Subsampling Training Data

  • 在实际中,CTR远小于50%,所以正样本更加有价值。通过对训练数据集进行subsampling,可以大大减小训练数据集的大小
  • 正样本全部采(至少有一个广告被点击的query数据),负样本使用一个比例r采样(完全没有广告被点击的query数据)。但是直接在这种采样上进行训练,会导致比较大的biased prediction
  • 解决办法:训练的时候,对样本再乘一个权重。权重直接乘到loss上面,从而梯度也会乘以这个权重。
    wt={1 eventtisinaclickedquery1r eventtisinaquerywithnoclicks w t = { 1 e v e n t t i s i n a c l i c k e d q u e r y 1 r e v e n t t i s i n a q u e r y w i t h n o c l i c k s

应用:https://www.cnblogs.com/arachis/p/FTRL.html

算法对比:


这里写图片描述

不同的方法按照统一的描述形式,区别点主要在第二项和第三项:
- 第一项:梯度或累积梯度
- 第二项:L1正则化项的处理
- 第三项:这个累积家和限定了新的迭代结果x不要离已迭代过的解太远或者离0(center)太远,这一项其实也是low regret的需求

参考:
1. Ad Click Prediction: a View from the Trenches(2013)
2. https://blog.csdn.net/fangqingan_java/article/details/51020653
3. https://blog.csdn.net/fangqingan_java/article/details/48951191
4. https://blog.csdn.net/guohecang/article/details/52388970
5. https://wenku.baidu.com/view/e70abd03551810a6f52486eb.html
6. https://blog.csdn.net/Losteng/article/details/51119764


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

相关文章

FTRL-Proximal

Ad Click Prediction: a View from the Trenches ABSTRACT 广告点击率预测是一个大规模的学习问题,对数十亿美元的在线广告行业至关重要。我们从部署的CTR预测系统的设置中提供了一些案例研究和从最近的实验中提取的话题,包括基于FTRL-Proximal在线学习…

FTRL

一、算法原理 二、算法逻辑 三、个人理解 从loss function的形式来看:FTRL就是将RDA-L1的“梯度累加”思想应用在FOBOS-L1上,并施加一个L2正则项。【PS:paper上是没有加L2正则项的】 这样达到的效果是: 累积加和限定了新的迭代结果W**不要离“已迭代过的解”太远**; 因为…

在线学习算法FTRL基本原理

文章目录 相关介绍SGD: Stochastic Gradient DescentTG简单加入L1范数简单截断法梯度截断法 FOBOS: Forward Backward Splitting[^4]RDA: Regularized dual averaging[^5] FTRL: Follow-the-Regularized-Leader总结 相关介绍 SGD: Stochastic Gradient Descent 由于批量梯度下…

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…