作者:十方
看了那么多点击率相关模型论文,就会发现模型越来越深,越来越复杂,目标都是为了显式或隐式的挖掘交互特征。然而,复杂的模型会减慢预测推理的速度,提高了服务延迟和高内存使用率,对整个系统而言极不友好。《DeepLight: Deep Lightweight Feature Interactions for Accelerating CTR Predictions in Ad Serving》这篇论文提出了一种面向真实环境的DeepLight框架加速CTR预测。该框架下模型不仅能加速显式特征的挖掘,还能修剪冗余参数。在Criteo数据集上有46倍的加速,在Avazu数据集上有27倍的加速,却没有任何预测精度上的损失。
简单回顾
预估CTR不仅需要一个良好的模型 还需要设计良好的特征作为输入。以前很多研究挖掘了大量特征,例如文本特征,单击“反馈特征”、“上下文特征”和“心理学”特征。为了避免复杂的特征工程,我们需要构建端到端模型,自动挖掘交互特征。
如一个用二阶特征 一个正则化的的简单模型:
考虑到m可能较大,xi xj会很稀疏,Wi,j难以学习,于是就有了FM模型,把参数数量从m*m降到了mk:
由于FM只考虑了二阶,后面又出现了很多更高阶的模型,如DCN:
DeepFwFM
如何基于DeepFM做改造,达到xDeepFM的效果呢?DeepFwFM就这样诞生了:
其中w是DNN的参数和偏置,v是n*k的参数矩阵,e是embedding向量集合,R是n*n的矩阵,表示交互特征的强度,Deep层没啥变化,关键看FwFM层:
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的:
然而这样也只能比xDeepFm快18倍,说好的46倍呢?由于DNN的存在,在预估时还是慢。然后就来到本篇重点,结构修剪。
结构修剪
看到修剪,就想到剪枝。DeepFwFM如何修剪呢?
- 删减DNN组件的权重(不包括偏差)以移除神经连接;
- 修剪特征交互矩阵R以去除冗余的相互作用;
- 删减嵌入向量中的元素,使用稀疏嵌入向量。
通过这3步修剪,模型就会身轻如燕了,如下图所示:
稀疏DNN的计算复杂度比原来小很多,稀疏的矩阵R也使得FwFM加速,修剪R其实就是做特征选择,不仅提升性能还能提高准确率,稀疏的embedding能极大的降低内存的使用。
所以应该如何修剪?修剪网络参数是个np-hard的问题,没有任何方法能保证找到最优解。在这篇论文,我们使用的修剪算法如下:
我们首先训练几个epoch得到一个较优的模型,然后进行剪枝,去除冗余权重。在每次剪枝之后,我们通过fine-tune重新训练模型,这样错误的剪枝就可以被修复。我们不断重复这个修剪过程并设置自适应稀疏速率,早期阶段使速率较快的增加,后期阶段,网络稳定且变得敏感时,降低速率。有点类似贪心算法,但它也带来了一些额外的不确定性,在修剪过程中,这可能不会给模型带来损失。
实验
没有剪枝前,如下图所示我们可以看到交叉特征会带来精度上很大的提升,但是同时也会导致很高的延迟:
然后我们看剪枝后的DeepLight:
我们发现剪枝后不仅快了很多,还能带来AUC的略微提升。最后对比下剪枝后各个模型的对比,DeepLight无论是性能还是准确率都是最优的。