参考文献
DeepFM: A Factorization-Machine based Neural Network for CTR Prediction
前情提要
FM
FFM
前面我们说过FFM,比FM整整多了一个F!而今天的主角,DeepFM,整整比FM多了一个Deep!谁更牛逼已经无须多言,下面具体分解。
Deep是什么?眼下人工智能异军突起,要问眼下谁是最靓的仔?神经网络啊!那谁比神经网络(别名NN)还要靓?深度神经网络(别名DNN)啊!那这个Deep说的就是那个深度神经网络啊!那DeepFM自然是不屑地将FM,FFM抛在身后,昂首挺胸地走在时代的最前沿啊!
那为什么有了Deep后,DeepFM就能走在最前沿了呢?我们知道FM跟FFM比起弱智的线性模型多考虑了特征的交叉项。那为什么要考虑特征的交叉项呢?据研究表明,一到饭点时有关外卖的APP就被点击得很频繁,那这里饭点,也即时间是一个特征,APP的类别,这里是外卖类也是一个特征,这两个特征就经常发生些关系,所以考虑他们的交叉项实在是很有必要啊。
那再据研究表明,男性青年大都喜欢玩射击游戏!那这里,男性之于性别,青年之于年龄,射击游戏之于APP类别,竟同时出现了三个特征!该怎么办才好?FM跟FFM不是说好了只考虑两个特征的交叉么?那三个特征交叉实在搞不了啊!!!这时,有人就问了,FM不是有一个 d-way Factorization Machine的推广么,那个可以弄三个特征的交叉呀!well,其实那个推广只是看上去很美,实则运算复杂度极高,不实用,一般也不用,再说了,如果其实还有四个特征的交叉,五个特征的交叉!那个复杂度就膨胀得没边了!
那此时此刻,怎么办?感觉世界陷入了一片黑暗,在这无边的黑暗中有一个声音响起,“交叉?我神经网络啥都不会,就特么会穿插分割,合纵连横,鳞次栉比,美轮美奂呀?我全身就长满了交叉啊!叉多到我都不知道是怎么交的了!所以人家叫我网呀!”
Well,好的很,那把多个特征交叉的问题交给DNN,两个特征交叉的问题交给FM,问题不就解决了么!于是乎就有DeepFM横空出世!那有人就问了,DNN那么牛逼,干嘛不统统交给他得了?搞得那么麻烦。其实DNN自己也说了,叉多到他自己也不知道是怎么交的!如此不靠谱!而两个特征间的交叉是我们的基本盘!这个不能丢!所以还是交给FM比较好。
那我们具体来看这个融合了FM与DNN的模型长成什么样。
见到这个,你或许理解了为什么连DNN自己都搞不清它那么多的叉都怎么交的。来,让我们一步一步来。
先说FM的部分,看这图这么复杂,其实人家一共就表达了一件事,就是以下这个公式,关于这公式的含义,详参我在最上面给出的FM的链接
<w,x>是表示的线性拟合的部分,是参数向量与特征向量间的点积,右边那一堆就是表示两个特征交叉的部分,Vi,Vj是特征xj1,xj2对应的隐向量,FM利用两个特征对应的隐向量间的点积来作为这两个特征交叉项的参数。上面图的第一层(标有Sparse Features)的小圆就表示一个个特征,它们一起汇聚到第三层(标有FM Layer)的一个带+号的小圆上,这整个的含义就是<w,x>,一个线性拟合!关于第一层的小圆下面标的field的含义,可以详参我在最上面给出的FFM的链接,其实就是将同属一个类别的特征归属到同一个field下而已,field里的特征采用独热编码,一个field里只有一个特征会出现1,其余全0,像那些数值特征就通常一个特征独占一个field,这也是为什么图中每个field都只有一根线伸出来的原因,因为只有一个特征会为1!
然后我们看到第一层里每个field的小圆还会伸出一根蓝线连到第二层(标有Dense Embeddings),其实第二层就是上面那个公式中的V,代表特征对应的隐向量,每个特征都会对应一个隐向量,那根蓝线就代表着特征与其隐向量间的映射!第一层的特征映射到第二层的隐向量后,就又两两汇聚到第三层标有×号的小圆上,这就一一对应于上面那个公式的右半部分。
最后线性拟合部分与两两特征交叉部分汇聚到最后的output units上,其会跟来自Deep部分的结果融合后再经过一个sigmoid函数得到最终的结果。那为什么最后跟了个sigmoid?因为通常使用DeepFM都是CTR场景,对应一个二分类问题。
我们再看Deep部分
呀!这个Deep部分的最下面两层怎么那么像FM部分的最下面两层?没错,其实它们就是同一份!FM部分与Deep部分共享底下两层,要么怎么叫DeepFM呢?Deep部分上面的那些层想必大家都清楚是怎么回事了,毕竟DNN是眼下最靓的仔,这点牌面还是有的,最后Deep部分的结果与FM部分的结果汇聚到Output Units上,就完事了!
大家要是看过我附在最上面的FM的链接,就知道FM中的参数是用SGD算的,了解DNN这眼下最靓的仔的人也知道DNN中的参数是用SGD算的,那么DeepFM中的参数该怎么算?一起SGD就完事了!
至此DeepFM介绍完毕,DeepFM是由华为提出,在原论文中不经意间也略不好意思地提到,至少在DeepFM出世的那一刻,在CTR领域中吊打当时所有模型!不过我还是要说,你可知道DNN其实至少20前就现世了,为何这些年才靓起来?其实是因为经过多年的发展,有了大数据和强算力的支持。换句话说,要是数据没那么大,DeepFM就未必能恰好地展现出它本该有的吊打一切的王者风范了 !
到这里,可能有人被DeepFM恰如其分地将低阶特征交叉和高阶特征交叉融汇到一起的精妙思想感动得泪流满面,Well,但其实这样的思想在wide & deep中已经有了,只是可能还没DeepFM那般优秀,到底是怎么回事呢?我将在合适的时机介绍wide & deep。