CTR模型越来越深,如何让它变轻?

DeepLight: Deep Lightweight Feature Interactions for Accelerating CTR Predictions in Ad Serving

v2-071e132c7353c2be34deb925be1bf617_b.jpg
十方@炼丹笔记

看了那么多点击率相关模型论文,就会发现模型越来越深,越来越复杂,目标都是为了显式或隐式的挖掘交互特征。然而,复杂的模型会减慢预测推理的速度,提高了服务延迟和高内存使用率,对整个系统而言极不友好。《DeepLight: Deep Lightweight Feature Interactions for Accelerating CTR Predictions in Ad Serving》这篇论文提出了一种面向真实环境的DeepLight框架加速CTR预测。该框架下模型不仅能加速显式特征的挖掘,还能修剪冗余参数。在Criteo数据集上有46倍的加速,在Avazu数据集上有27倍的加速,却没有任何预测精度上的损失。

简单回顾

预估CTR不仅需要一个良好的模型 还需要设计良好的特征作为输入。以前很多研究挖掘了大量特征,例如文本特征,单击“反馈特征”、“上下文特征”和“心理学”特征。为了避免复杂的特征工程,我们需要构建端到端模型,自动挖掘交互特征。

如一个用二阶特征+一个正则化的的简单模型:

v2-505d3120cdf6cd7f399922641eab52a9_b.jpg

v2-b1600cf7f63611d6d63a4c5eabbb860b_b.jpg

考虑到m可能较大,xi xj会很稀疏,Wi,j难以学习,于是就有了FM模型,把参数数量从m*m降到了mk:

v2-63817e347cf63a6089d2df886668225a_b.jpg

由于FM只考虑了二阶,后面又出现了很多更高阶的模型,如DCN:

v2-fbf0e1e4f58a1a3f1aae2f97184db4a2_b.jpg

DeepFwFM

v2-58999840952d1ab47b83d7b1aeb13750_b.jpg

如何基于DeepFM做改造,达到xDeepFM的效果呢?DeepFwFM就这样诞生了:

v2-8f6f38920810023d78c07e833368f6a4_b.jpg

其中w是DNN的参数和偏置,v是n*k的参数矩阵,e是embedding向量集合,R是n*n的矩阵,表示交互特征的强度,Deep层没啥变化,关键看FwFM层:

v2-3852cac831925723b31f335885b3287a_b.jpg

F(i)表示特征i,VF(i)表示特征i的线性向量表达,RF(i),F(j)表示F(i)和F(j)特征交互权重。

所以这个模型到底有什么优势呢?

1) DeepFwFM比xDeepFM快得多,因为我们没有在浅层网络(FM)中挖掘超过2阶的特征。而xDeepFM包含一个强大的压缩交互网络(CIN)可以逼近任意多项式,CIN的主要缺点就是时间复杂度远高于DNN,导致在生产环境中非常高的计算复杂度。

2) DeepFwFM比DeepFM更精确,因为它克服了矩阵分解中的稳定性问题。该模型通过考虑交互特征的权重,提高预测的准确度。

通过对比计算复杂度,我们发现DeepFwFM是远优于xDeepFM的:

v2-bc43e552503f67adbcd8ceada6438bae_b.jpg

然而这样也只能比xDeepFm快18倍,说好的46倍呢?由于DNN的存在,在预估时还是慢。然后就来到本篇重点,结构修剪。

结构修剪

看到修剪,就想到剪枝。DeepFwFM如何修剪呢?

  • 删减DNN组件的权重(不包括偏差)以移除神经连接;
  • 修剪特征交互矩阵R以去除冗余的相互作用;
  • 删减嵌入向量中的元素,使用稀疏嵌入向量。

通过这3步修剪,模型就会身轻如燕了,如下图所示:

v2-791448a371dfc70da5a127715be970c3_b.jpg

稀疏DNN的计算复杂度比原来小很多,稀疏的矩阵R也使得FwFM加速,修剪R其实就是做特征选择,不仅提升性能还能提高准确率,稀疏的embedding能极大的降低内存的使用。

所以应该如何修剪?修剪网络参数是个np-hard的问题,没有任何方法能保证找到最优解。在这篇论文,我们使用的修剪算法如下:

v2-273c003f3352391380552fb7a1fa97dc_b.jpg

我们首先训练几个epoch得到一个较优的模型,然后进行剪枝,去除冗余权重。在每次剪枝之后,我们通过fine-tune重新训练模型,这样错误的剪枝就可以被修复。我们不断重复这个修剪过程并设置自适应稀疏速率,早期阶段使速率较快的增加,后期阶段,网络稳定且变得敏感时,降低速率。有点类似贪心算法,但它也带来了一些额外的不确定性,在修剪过程中,这可能不会给模型带来损失。

实验

没有剪枝前,如下图所示我们可以看到交叉特征会带来精度上很大的提升,但是同时也会导致很高的延迟:

v2-94759798fc83a20f87c4dcf6220ecb7a_b.jpg

然后我们看剪枝后的DeepLight:

v2-29b2979765f3e1cc41c06e2776ff1bf0_b.jpg

v2-a022145b2ce45055779f67d95d5b1424_b.jpg

v2-ebcdd37decb5a838dfa431f671a4e944_b.jpg

我们发现剪枝后不仅快了很多,还能带来AUC的略微提升。最后对比下剪枝后各个模型的对比,DeepLight无论是性能还是准确率都是最优的。

v2-00902a39f27a20081ce9599d20ba17f7_b.jpg

v2-071e132c7353c2be34deb925be1bf617_b.jpg
更多干货,请关注公众号:炼丹笔记


mp.weixin.qq.com/s/Q0Cd


CTR模型越来越"深",如何让它变"轻"?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值