深度CTR预估模型中的特征自动组合机制演化简史 zz

栏目: 数据库 · 发布时间: 5年前

内容简介:在完成一个特征交叉f后,每个cross layer会将它的输入加回去,对应的mapping function,这里借鉴了残差网络的思想。
  • )层cross layers的输出;
  • ,
是第
  • 层layer的weight和bias参数。

在完成一个特征交叉f后,每个cross layer会将它的输入加回去,对应的mapping function

,刚好等于残差 + 1

,这里借鉴了残差网络的思想。

深度CTR预估模型中的特征自动组合机制演化简史 zz

特征的高阶交叉(high-degree interaction):cross network的独特结构使得交叉特征的阶(the degress of cross features)随着layer的深度而增长。对于第

层layer,它的最高多项式阶(在输入 0 上)是 + 1 。 实际上,cross network由这些交叉项 组成,对应的阶从 1 + 1

复杂度分析:假设

表示cross layers的数目, 表示输入 0 的维度。那么,在该cross network中涉及的参数数目为:

一个cross network的时间和空间复杂度对于输入维度是线性关系。因而,比起它的deep部分,一个cross network引入的复杂度微不足道,DCN的整体复杂度与传统的DNN在同一水平线上。如此高效(efficiency)是受益于 0

的rank-one特性(两个向量的叉积),它可以使我们生成所有的交叉项,无需计算或存储整个matrix。

关于DCN模型的实现,有一个重要的技巧可以节省大量的内存空间和训练时间,就是在计算cross layer的时候需要利用矩阵乘法的结合律,优先计算

,而不是 ,这是因为

的计算结果是一个标量,几乎不占用存储空间,具体请参考《 玩转企业级Deep&Cross Network模型你只差一步 》。

亲爱的读者们,你们脑中的那根弦还在吗?DCN是如何有效压缩高维特征空间的呢?其实,对于cross layer可以换一种理解方式:假设 ̃ 

是一个cross layer的输入,cross layer首先构建 个关于 的pairwise交叉,接着以一种内存高效的方式将它们投影到维度 上。如果采用全连接Layer那样直接投影的方式会带来3次方的开销。Cross layer提供了一种有效的解决方式,将开销减小到维度 的量级上:考虑到

等价于:

其中,行向量包含了所有 2

维的空间上。

DCN模型中使用的这种“压缩”机制是完美的吗,有没有什么局限性?实际上这种“压缩”方式把特征交互关系限定在一种特殊的形式上。我们再来看看cross layer的计算公式,为了简化,以便说明问题,下面去掉偏置项。

=

对于 1

,有如下公式:

1 =

合并可得到:

1 =

其中 1 = 0

的线性回归函数,也就是一个标量。

根据数学归纳法,当 =

时,我们可以得到

+ 1

实际上, + 1

高度相关的。

因此,我们可以总结出DCN模型的两个主要的不足:

  1. CrossNet的输出被限定在一种特殊的形式上
  2. 特征交叉还是以bit-wise的方式构建的

让我们回到最初的那个问题, 有没有可能引入更高阶的vector-wise的交叉特征,同时又能控制模型的复杂度,避免产生过多的无效交叉特征呢?

极深因子分解机模型(xDeepFM)

xDeepFM 模型是自动构建交叉特征且能够端到端学习的集大成者,它很好的回答了上一小节末提出的问题。让我们来看看它是如何做到的。

为了实现自动学习显式的高阶特征交互,同时使得交互发生在向量级上,xDeepFM首先提出了一种新的名为 压缩交互网络 (Compressed Interaction Network,简称CIN)的模型。

CIN的输入是所有field的embedding向量构成的矩阵 0 ×

CIN中第

行的计算公式如下:

, = =

其中,

上述计算公式可能不是很好理解,论文作者给出了另一种更加方便理解的视角。在计算 + 1

沿着各自embedding向量的方向计算外积的过程。

深度CTR预估模型中的特征自动组合机制演化简史 zz

+ 1

个feature map堆叠而成,如下图所示。

深度CTR预估模型中的特征自动组合机制演化简史 zz

正是通过卷积操作,CIN把第 + 1

个向量,起到了防止维数灾难的效果。

CIN的宏观框架如下图所示,它的特点是,最终学习出的特征交互的阶数是由网络的层数决定的,每一层隐层都通过一个池化操作连接到输出层,从而保证了输出单元可以见到不同阶数的特征交互模式。同时不难看出,CIN的结构与循环神经网络RNN是很类似的,即每一层的状态是由前一层隐层的值与一个额外的输入数据计算所得。不同的是,CIN中不同层的参数是不一样的,而在RNN中是相同的;RNN中每次额外的输入数据是不一样的,而CIN中额外的输入数据是固定的,始终是 0

深度CTR预估模型中的特征自动组合机制演化简史 zz

有了基础结构CIN之后,借鉴Wide&Deep和DeepFM等模型的设计,将CIN与线性回归单元、全连接神经网络单元组合在一起,得到最终的模型并命名为极深因子分解机xDeepFM,其结构如下图所示。同时包含多种不同的结构成分可以提升模型的表达能力。

深度CTR预估模型中的特征自动组合机制演化简史 zz

集成的CIN和DNN两个模块能够帮助模型同时以显式和隐式的方式学习高阶的特征交互,而集成的线性模块和深度神经模块也让模型兼具记忆与泛化的学习能力。值得一提的是,为了提高模型的通用性,xDeepFM中不同的模块共享相同的输入数据。而在具体的应用场景下,不同的模块也可以接入各自不同的输入数据,例如,线性模块中依旧可以接入很多根据先验知识提取的交叉特征来提高记忆能力,而在CIN或者DNN中,为了减少模型的计算复杂度,可以只导入一部分稀疏的特征子集。

总结

特征交叉组合作为一种常用的特征工程方法,可以有效地提升模型的效果。特征交叉组合从人工方式开始,经历了模型辅助的阶段,最后发展到各种端到端模型的阶段。端到端模型从建模二阶交叉关系向构建高阶交叉关系的方向发展,同时建模方式也从bit-wise向vector-wise发展。

深度CTR预估模型中的特征自动组合机制演化简史 zz

本文总结了FM家族的一系列深度学习模型,这些模型有一个共同的强制要求:所有field的embedding向量的维数是相同的。这个要求是合理的吗?我们知道不同的field对应的值空间大小是不一样的,比如淘宝商品ID的量级在十亿级,类目的量级在万级,用户年龄段的量级在十级,在如此巨大的差异的情况下,embedding向量的维数只能取得尽可能的大,这大大增加了模型的参数量级和网络的收敛时间。所以我认为本文提及的FM家族模型有两个主要缺点:

  1. 强制要求所有field的embedding向量的维数,增加了网络复杂度;
  2. 对连续值特征不友好。

大家对此有什么看法呢?欢迎在评论区留言。

部分模型的tensorflow源代码 可以在此找到 ,实现不一定完全正确,欢迎批评指正。

推荐阅读

主流CTR预估模型的演化及对比
玩转企业级Deep&Cross Network模型你只差一步


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

与孩子一起学编程

与孩子一起学编程

[美] 桑德Warren Sande、Carter Sande / 苏金国、姚曜 等 / 人民邮电出版社 / 2010-11 / 65.00元

一本老少咸宜的编程入门奇书!一册在手,你完全可以带着自己的孩子,跟随Sande父子组合在轻松的氛围中熟悉那些编程概念,如内存、循环、输入和输出、数据结构和图形用户界面等。这些知识一点儿也不高深,听起来备感亲切,书中言语幽默风趣而不失真义,让学习过程充满乐趣。细心的作者还配上了孩子们都喜欢的可爱漫画和经过运行测试的程序示例,教你用最易编写和最易理解的Python语言,写出你梦想中的游戏程序。 ......一起来看看 《与孩子一起学编程》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具