DCN网络浅析

12,029次阅读
没有评论

共计 1770 个字符,预计需要花费 5 分钟才能阅读完成。

在CTR预估领域出现了很多模型,之前看过一篇微信文章讲述十大经典CTR模型,DCN就是其中一个模型,估计很多公司都已经将其应用到自己的业务场景中了。

最早的wide&deep网络,对wide部分特征的要求是很高的,超高维特征加上线性模型是可以去的不错的效果,主要是模型会简单并且可解释性会很好,对于wide&deep其实对特征的数据依赖是很大的。可以这么说这个对专家经验以及领域知识要求是很高的,因此还是需要大量的人工参与才能起到很好的效果的。

后续的网络发展方向都是希望网络能够自动实现特征的构造部分,这个算法工程师会减少很多特征交叉构造的任务,早期也是依赖于于工程人员手动交叉部分业务特征。

DNN网络是对特征的不断抽象,获得更高的高阶特征,这个其实跟特征交叉是不一样的,为什么要进行特征交叉?

这个算是算法领域最基本的问题吧,现实场景中比如你要购买一个东西,肯定是很多因素综合起来你才决定下单购买商品,那么这种多种因素的综合就是特征的一种交叉过程,现在将多种因素放在一起刻画对象会起到更加精确描述的效果,在线上预测的时候,出现类似场景的时候你给某用户推荐相同的商品可能转化就很高了,因为你在大量的历史数据中学到了大量的经验知识,在具备这些特征的用户都会尝试去购买该类的东西,这样你训练的模型就很好了。

由此可见特征交叉的重要性,这也是大家一直在努力的一个点吧,从传统的多项式交叉开始,但是多项式交叉就有一个问题,如果某个特征在历史中没有出现,那么你的模型时学习不到对应的交叉信息的,因为该数据为0啊,后来再此基础上出现了FM,这个是对每一维特征学习一个隐向量,那么即使你历史没有出现,但是我还是学到一个向量可以去表示你,那么后续线上实际的情况遇到这种case出现其实也是可以hold住的,FM之后就是有FFM了,这个就不细描述的,因为这类的文章实在是太多了。

好吧,现在开始说说DCN吧,其实DNN部分就不打算讲了,这个是最基本的神经网络模型了。

下面先看看这个模型的基本情况吧

DCN网络浅析

网络左边的部分就是Cross部分

在上面的截图中其实你已经看到对应的计算公式了

x_1=x_0*x^{T}_{0}*w_{0}+b_{0}+x_{0}

上面的公式中\(w_{0}\)就是网络权重,\( b_{0}\)表示偏置,关键的一点是在最后加上了输入,有点resnet的味道,实际上是真的参考了残差网络,这样第l+1层与l层那么就是对应第l层的输出结果的了。是不是很有意思。。

cross部分就是这么简单的,没有太多的东西,重点就是提出了一种新的特征交叉组合的方式,并且取得不错的效果。

哈哈,这让我想到最近看的bert模型,模型本身“创新”就是集最近几年的模型之优势于一身,然后横扫 11 NLP任务,这也是很厉害的,想到这一点也不容易。

扯远了,跑到NLP那边去了

既然网络的结构出来,后面编码部分应该很简单了

按照正常的编码逻辑,先计算\(x_{0}*x^{T}_{0}\),然后balabala计算剩下的。。。

那么你中招了,如果你的业务不是很大,并且对性能要求不高,那么你发现没啥这样没啥问题,

但是如果你的输入\(x_{0}\)特征的维度很高,并且batchsize还不小,那么你在计算二者相乘的时候会不会发现这个缓存临时结果是会消耗很大的内存的,计算的代价也是很高的。所以这块是有优化的空间的。

def cross_layer(input):
    with tf.name_scope('cross') :
        dense_layer=tf.layers.Dense(1,kernel_initializer=tf.truncated_normal_initializer())
        layer_outout=dense_layer.apply(input)
        result=input*layer_outout+input

        return  result

代码中是先算后面乘积那一部分,其实是使用了乘积运算的特性,由于dense层的输出的数据量是很小的,规避了中间变量内存占用很大的问题。这个时候你肯定想说,既然你觉得内存占用很大,减小batchsize不就好了,这个不是长久之计,模型更新迭代要周期,现在请求有要求,所以还是要注意性能的问题。

可以思考的问题,cross部分与FM以及多项式交叉之间存在联系?

正文完
请博主喝杯咖啡吧!
post-qrcode
 
admin
版权声明:本站原创文章,由 admin 2019-06-30发表,共计1770字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码