本来是想通过学习别人的博客,来了解FTRL,但是对于经典之作还是想通读一遍;本文介绍Google在2013年发布在KDD的《Ad Click Prediction: a View from the Trenches》;
摘要
文章针对CTR且基于FTRL-Proximal,改善了传统的CTR方法,并且对于特征的每一维使用不同的学习率;还提出了一些其他的技巧:比如节约内存、可视化表示、评估方法、校准方法等等;
一、介绍
对于机器学习来说,在线广告是一个几十亿美元的工业,而其中CTR问题至关重要,一个典型的工业模型可能每天预测几十亿个事件并使用很大的特征空间,所以这篇文章提出了很多方法,具体下面一一介绍;
二、BRIEF SYSTEM OVERVIEW
当一个用户搜寻q,那么匹配q的候选广告集合将被提供给该用户;一种拍卖机制决定了是否这些广告会被展示给用户,并且以什么样的顺序和价格;除了广告主竞价的方式以外,另外一种方式比如对于每个广告a,确定 p(click|q,a) ,即这个广告将被点击的概率;
而这些系统对应的特征是稀疏的,一般使用正则化的LR模型,并且需要实时更新,因为数据是以一种streaming(流)的方式提供的;
三、 ONLINE LEARNING AND SPARSITY
在线学习对于一些泛化线性模型(如LR)有许多优势;尽管数据维度有可能是几十亿维,但是每个实例通常仅有几百个非0值,所以这确保了在大规模数据集上通过streaming的有效的学习,因为每个训练样本只需要被使用一次;
说明一下文中所用的符号表示: g 1 : t = ∑ s = 1 t g s {
{\rm{g}}_{1:t}} = \sum\nolimits_{s = 1}^t {
{g_s}} g1:t=∑s=1tgs,且 g s g_s gs是一个向量;
如果希望用LR建模问题,那么使用下面的在线学习框架:在第 t t t轮,给定输入 x t ∈ R d x_t \in R^d xt∈Rd,那么预测 p t = σ ( w t x t ) p_t=\sigma(w_tx_t) pt=σ(wtxt),然后通过Logloss损失函数并反向传播做出参数实时更新;
上面的便是OGD(Online gradient descent)算法,但是需要考虑一个问题:因为模型是稀疏存储的,所以参数 w w w的非零数量决定了内存使用的量级;不幸的是,OGD并不是一个有效的产生稀疏模型的方法;实际上,通过增加一个L1的次梯度到loss的梯度中永远得不到精确的0;更复杂的方法如FOBOS和truncated gradient在引入稀疏性方面很好,RDA(Regularized Dual Averaging)在稀疏性和精确性之间衡量;FTRL中,L1正则化以一种更有效的方式得以实现;
给定一个序列梯度 g t ∈ R d g_t\in R^d gt∈Rd,OGD的做法是: w t + 1 = w t − η t g t