Deep & Cross Network for Ad Click Predictions

解读参考:https://blog.youkuaiyun.com/Dby_freedom/article/details/86502623

代码:https://github.com/FitzFan/Deep-Cross-Net

传统的CTR预估模型需要大量的特征工程,耗时耗力;引入 DNN 之后,依靠神经网络强大的学习能力,可以一定程度上实现自动学习特征组合。但是 DNN 的缺点在于隐式的学习特征组合带来的不可解释性,以及低效率的学习(并不是所有的特征组合都是有用的)。

DCN在学习特定阶数组合特征的时候效率非常高,而且同样不需要特征工程,引入的额外的复杂度也是微乎其微的.

最开始 FM 使用隐向量的内积来建模组合特征;FFM 在此基础上引入 field 的概念,针对不同的 field 上使用不同隐向量。但是,这两者都是针对低阶的特征组合进行建模的。随着 DNN 解决输入高维高稀疏的问题,可以对高维组合特征进行建模
在 很多比赛中,大部分的获胜方案都是使用的人工特征工程,构造低阶的组合特征,这些特征意义明确且高效。而 DNN 学习到的特征都是高度非线性的高阶组合特征,含义非常难以解释。那么是否能设计一种 DNN 的特定网络结构来改善 DNN,使得其学习起来更加高效?DCN 就是其中一个探索。

3. DCN特点
DCN 特点如下:

使用 cross network,在每一层都应用 feature crossing。高效的学习了 bounded degree 组合特征。不需要人工特征工程。
网络结构简单且高效。多项式复杂度由 layer depth 决定。
相比于 DNN,DCN 的 logloss 更低,而且参数的数量将近少了一个数量级。

交叉网络的核心思想是以有效的方式应用显式特征交叉。交叉网络由交叉层组成

代码

def cross_layer2(x0, x, name):
  with tf.variable_scope(name):
    input_dim = x0.get_shape().as_list()[1]
    w = tf.get_variable("weight", [input_dim], initializer=tf.truncated_normal_initializer(stddev=0.01))
    b = tf.get_variable("bias", [input_dim], initializer=tf.truncated_normal_initializer(stddev=0.01))
    xb = tf.tensordot(tf.reshape(x, [-1, 1, input_dim]), w, 1)
    return x0 * xb + b + x

def build_cross_layers(x0, num_layers):
  x = x0
  for i in range(num_layers):
    x = cross_layer2(x0, x, 'cross_{}'.format(i))
  return x

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值