DCN的Cross操作的优缺点

Cross层特征交叉的推导过程

DCN全称Deep Crossing Network,模型介绍可以见 这篇文章。DCN的关键设计在于Cross层,假设输入为特征向量 x 0 x_0 x0,其每一层的运算过程为 :

x i + 1 = x 0 x i T w i + 1 + x i x_{i+1}=x_0x_{i}^Tw_{i+1}+x_i xi+1=x0xiTwi+1+xi

可视化为:

在这里插入图片描述

前面推荐阅读的文章详细推导了为什么有 i i i 层的Cross操作可以得到从 1 阶到 i + 1 i+1 i+1 阶的任意的特征组合,这里截图放在这里方便后面引用其中符号:

在这里插入图片描述

来自xDeepFM的diss

后来看到xDeepFM的论文,其首先证明了Cross操作的输出是输入 x 0 x_0 x0标量倍,证明过程:

在这里插入图片描述

该论文的总结我是比较认同的,即DCN的缺点在于两点,一是其输出仍然是输入的标量倍,二是这种特征交互是将特征向量的每一位(bit)看做是一个特征,才可以认为是得到了高阶的交叉特征(特征的连乘)。但是对于这两点我认为需要补充一些想法:

关于第一点,即DCN的输出仍然是输入的标量倍。从这个结论并不是很直观能看到Cross运算的缺陷,从前面的推导过程来看,最后输出的特征向量确实包含了从 1 阶到 i + 1 i+1 i+1 阶交叉特征(一阶的 x 0 x_0 x0 x 1 x_1 x1,二阶的 x 0 2 x_0^2 x02 x 0 x 1 x_0x_1 x0x1等等),交叉特征都在每个分量内部作为求和项了,也都含有参数项。但一个容易被忽略的事实是:交叉特征的系数并非相互独立。举个例子,在得到的 X 1 X_1 X1 向量表达式中:

在这里插入图片描述

假设将两个分量直接相加(加权相加结论也不变),二次项 x 0 , 1 x 0 , 2 x_{0,1}x_{0,2} x0,1x0,2 的系数 w 0 , 1 + w 0 , 2 w_{0,1}+w_{0,2} w0,1+w0,2正是 x 0 , 1 2 x_{0,1}^2 x0,12 的系数 w 0 , 1 w_{0,1} w0,1 x 0 , 2 2 x_{0,2}^2 x0,22 的系数 w 0 , 2 w_{0,2} w0,2 的线性组合。如果用最传统的方法(Wide&Deep的Wide一侧仍然是这种思路),直接手工构造交叉特征并使用逻辑斯谛回归来拟合的话,每个交叉特征应该有独立于其他特征的参数,而此处DCN虽然得到所有交叉特征,但系数却是相互限制的,自由度低了很多,因此并不能等价于传统的手动构造交叉特征+LR,这自然会限制其表达能力。

关于第二点,即特征交互是一种bit-wise的方式,这种隐式的“特征交叉”使用DNN即可完成(Despite the powerful ability of learning an arbitrary function from data, plain DNNs generate feature interactions implicitly and at the bit-wise level.)。确实,如果输入的特征向量是Embedding层的输出,Cross操作就是在特征的bit上做交叉,并没有直观上的含义。不过,如果我们给定的输入是原始特征:对于数值型特征直接使用其值,对于类别型特征,将其转换成 k k k 个二元特征, k k k 为原本的类别数目,那么Cross操作得到的交互就是特征级别的了。

### DSSM 模型的局限性及其替代方案 #### 一、DSSM 模型无法使用 User-Item 交叉特征的原因 DSSM(Deep Structured Semantic Model)是一种基于神经网络的语义匹配模型,主要用于解决文本相似度计算等问题。然而,在实际应用中,它存在一些固有的缺陷使其难以有效利用 User 和 Item 的交叉特征。 1. **模型架构设计上的限制** - DSSM 使用双塔结构分别编码用户行为序列和物品属性向量到同一隐空间中的表示形式[^2]。由于两者的嵌入过程独立完成,缺乏显式的交互机制来捕捉两者之间的高阶关系。这使得该方法很难直接建模复杂的 user-item 交叉特征组合。 2. **训练目标函数的影响** - DSSM 主要通过最大化正样本对之间距离的同时最小化负样本对的距离来进行优化[^3]。这样的损失函数更关注于学习全局分布特性而非局部细粒度模式,从而削弱了对于特定上下文中个性化需求的支持力度。 3. **数据稀疏性和维度灾难问题** - 当引入大量潜在变量作为输入时容易引发过拟合现象;另外随着候选集规模增大也会增加检索成本并降低效率[^4]。 --- #### 二、User-Item 交叉特征缺失带来的影响 如果不能充分利用这些丰富的关联信息,则可能导致以下几个方面表现不佳: 1. 推荐效果下降 用户兴趣偏好可能因未能充分表达而被忽略掉某些长尾商品推荐机会。 2. 泛化能力不足 对未曾见过的新颖场景适应力较差,特别是在冷启动阶段面临挑战较大。 3. 实时响应延迟加剧 需要在线动态调整策略以弥补离线预估偏差造成的额外开销。 --- #### 三、针对上述问题提出的改进措施与替代方案 ##### (一)增强版 DSSM 架构改造方向 可以考虑以下几种方式扩展原始框架功能: - 添加注意力层捕获重点区域权重分配情况; - 融合多源异质信息补充单一视角描述局限; - 应用自监督对比学习提升表征质量等技术手段进一步挖掘深层次联系[^5]。 ##### (二)其他更适合处理交叉项的方法论探讨 除了修改现有算法外还可以尝试采用如下备选路径实现相同目的: 1. FM/FwFM 类广义因子分解机系列工具包支持高效求解大规模稀疏矩阵乘法运算任务同时具备良好可解释性强等特点非常适合应用于此类场合下构建预测器实例[^6]。 2. Deep&Cross Network (DCN) 结合浅层宽部负责提取基础统计规律以及深层窄部探索复杂依赖关系共同作用达到兼顾二者优势的目的[^7]。 3. AutoInt 自动发现重要交互字段并通过多重头变换操作生成新的合成纬度进而改善最终输出性能指标水平[^8]。 以下是 DCN 的简单代码示例展示如何定义交叉组件部分逻辑流程片段: ```python import tensorflow as tf class CrossLayer(tf.keras.layers.Layer): def __init__(self, num_layers=2, **kwargs): super(CrossLayer, self).__init__(**kwargs) self.num_layers = num_layers def build(self, input_shape): dim = int(input_shape[-1]) self.Ws = [] self.bs = [] for _ in range(self.num_layers): w_init = tf.random_normal_initializer() b_init = tf.zeros_initializer() W = self.add_weight( shape=(dim,), initializer=w_init, trainable=True, name='cross_w' ) b = self.add_weight( shape=(dim,), initializer=b_init, trainable=True, name='cross_b' ) self.Ws.append(W) self.bs.append(b) def call(self, inputs): x_0 = inputs x_l = inputs for i in range(self.num_layers): x_l_next = x_0 * tf.tensordot(x_l, self.Ws[i], axes=[1, 0]) + self.bs[i] + x_l x_l = x_l_next return x_l ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值