LR
优点:
1.是一个很好的baseline,效果不错,当然因为效果不错,所以后续的版本想超过它,真的还是很难的。
2.实际简单,有开源的工具可以直接用来训练,在线的代码也写起来比较容易。
缺点:
1.因为是线性模型,所以有选择交叉特征的工作,这部分工作消耗大量的精力,但往往没什么效果。一般都是wrapper方法选择,每轮可能都要进行小时级的运算,理论上要进行2^n轮(n是特征数),但因为离线分析的指标和线上效果不一定是强相关的,所以分析起来更痛苦。更令人崩溃的是点击率预估的数据变化是比较大的,离线选出来的特征,参数都不一定适用于未来。
2.因为广告位对点击率有着决定性的影响,所以几乎所有的特征都会交叉广告位,这样广告位间的信息是无法共享的,比如广告A在广告位x上点击率很高,但如果广告A在广告位y上没有曝光过,那对广告位y来讲,广告A是一个全新的广告。
3.实践中交叉特征还会导致模型非常大,我们也使用了FTRL,但实践中它并不能非常有效的产生稀疏模型,如果模型非常大,会导致同步模型变慢,一样会严重影响效果。
4.在线预测时,因为大量的特征都要与广告ID交叉,所以在线拼装特征的成本很高,性能可能也会成为问题。
GBDT +LR
优点:
思路很好
缺点:
1.离线处理和在线处理都复杂。不同于比赛,在实践中ID类特征还是非常重要的,广告ID可能就有几十万个,深度怎么控制呢?把那么多棵树丢到线上去,然后遍历,拼装特征,想想都难搞。
2.要调的参数很多,人生苦短,为什么要搞这么多参数折磨自己。另外再重复一遍:在点击率预估这个问题上,离线效果好往往只能说是模型基本没问题,不能说上线后就效果好。
3.GDBT+LR本身是想解决特征选择的问题,但现实中也没那么多特征可以用吧?另外没发现点击率预估中如果特征本身没问题,加上去一般都不会降效果吗?
4.性能问题怎么解决呢?如果GBDT+LR是不是只能batch方式训练了?如果batch更新速度比FTRL会慢不少,效果又怎么保证呢?想不通。
FM
优点
1.它可以自动学习两个特征间的关系,可以减少一部分的交叉特征选择工作,而且参数也不算多,调起来不会太痛苦。
2.因为不需要输入那么多的交叉特征,所以产生的模型相对LR的模型会小很多。
3.在线计算时减小了交叉特征的拼装,在线计算的速度基本和LR持平(虽然两个向量的点积的计算看上去会导致计算量翻了几倍)
缺点:
1.无法学习三个及以上的特征间的关系,所以交叉特征选择的工作仍然无法避免。
2.虽然从原理上好像FM学习能力更强,但在实践中超过LR的效果也要凭实力(运气?)
3.从功利的角度看,FM是非常不值得尝试的,它的工作量没比神经网络小多少,在这个不说深度学习都好像不懂机器的环境下,用FM算法,所能得到的资源,支持和收获,远比不上神经网络,所以建议做完LR后,就直接换神经网络吧,别搞FM了。
神经网络:
优点:
1.可以直接输入原始的特征,减少了交叉特征的选择工作,并且可以支持大量的特征输入,相比因为LR要考虑交叉特征,所以交叉特征比较多的时候,模型会非常大,可能会有一些工程问题。
2. 如果输入的是原始特征,结构是用embedding layer + fc layer,产生的模型非常小,远小于LR。
3.在线计算因为使用是大量的用户特征,所以一次请求中,用户特征和第一层隐层之间的计算只用计算一次(这是运算量最大的一部分),只有广告维度的特征需要计算多次(以及第一层隐层和之后的隐层也要多次计算),而广告维度的embedding向量和第一层隐层的计算可以预先算好,并且在线完全没有交叉特征的拼装工作,所以在线计算速度还好,实测比LR速度竟然还快了。
4.神经网络对外宣传效果会好很多,虽然大部分时间也没什么必要搞神经网络。