• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

DCN网络浅析

Alg admin 3个月前 (06-30) 533次浏览 0个评论 扫描二维码

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

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

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

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

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

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

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

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

网络左边的部分就是 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 以及多项式交叉之间存在联系?


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明DCN 网络浅析
喜欢 (0)
admin
关于作者:
互联网行业码农一枚/业余铲屎官/数码影音爱好者/二次元

您必须 登录 才能发表评论!