老王私房菜馆的老板老王最近发现,自己最拿手的不是做菜,而是“猜菜”——客人刚坐下,他扫一眼对方的档案:口味、预算、城市、赶不赶时间,就能八九不离十地猜中客人想点什么。猜得准的秘诀,不是只看单一特征,而是看“特征组合”:熬夜加班的人 + 赶时间 + 重口味,老王脱口而出“麻辣烫外卖”;口味清淡 + 预算充足 + 心情好,他推荐“当日刺身拼盘”。单一特征像食材,只有食材之间的搭配才能产生全新的滋味。这种“组合产生新信息”的能力,在推荐系统里就叫特征交叉。 在点击率(CTR)预估场景里,模型面对的“食客档案”就是用户特征和商品特征:年龄、城市、广告类目、素材风格……如果只看单个特征,模型只能学到“年轻人整体点击率高”这种粗糙规律,真正的信号往往藏在组合里,比如“25~30 岁 + 深夜 + 外卖 App ≈ 夜宵广告点击率高”。过去工程师靠手工构造交叉特征,可特征一多,组合爆炸,人力根本写不完。于是 DCN 和 xDeepFM 登场了:它们让模型自动学习哪些特征该“搭在一起”。 DCN 像分子料理,把特征打成碎末,让碎末之间任意碰撞(bit-wise 交互);xDeepFM 像传统整料烹饪,把每个特征字段当作一整块食材,在块与块之间做结构化搭配(vector-wise 交互)。本文就用老王的厨房作为擂台,带你看懂这两种自动特征交叉模型的设计哲学、数学原理和工程落地。

岗位关联

掌握 DCN 与 xDeepFM,能让你在广告推荐、搜索排序等稀疏离散特征主导的任务中,用自动特征交叉替代手工特征工程,显著提升 CTR 预估效果。

目录
  1. 可视化演示
  2. 特征交叉的价值
  3. 交叉网络结构(DCN)
  4. Bit-wise 交互
  5. Vector-wise 交互(xDeepFM)
  6. FM 对比分析
  7. 工程实现要点
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示FIFO与LRU页面置换算法的执行过程:逐步访问页面序列,观察缺页中断与页面替换策略。

本节配有交互动效(进入视口后自动加载,约 3KB)。

FIFO页面置换 先进先出策略:缺页时替换最早进入内存的页面 Fault = page ∉ frames 紫色框为内存帧,红色标记表示缺页中断

特征交叉的价值

老王开私房菜馆多年,练就了一项绝活:只要看一眼客人的“食客档案”——口味、预算、来店时间、心情——他就能八九不离十地猜出客人会点什么菜。秘密不在单独看哪一条,而在于几条组合起来的意思:口味清淡 + 预算充足,客人可能选刺身;城市在成都 + 口味麻辣,那就是无辣不欢。单一食材只能确定大方向,食材之间的搭配才决定最终的味道。这种“组合产生新信息”的现象,在推荐系统里就叫特征交叉。

在 CTR 预估场景中,模型拿到的用户特征和商品特征大多是高度稀疏的离散字段:用户 ID、年龄、性别、城市、广告类目、素材风格……如果模型只学单个特征,只能学到“年轻人整体点击率高”这类粗糙规律。真正能区分点击与否的,往往是组合信号——“25~30 岁男性 + 深夜 + 外卖 App → 夜宵广告点击率高”。传统做法是工程师手工构造交叉特征,可特征成千上万,二阶组合就有百万级,高阶组合更是天量,根本写不完。

从数学上看,在普通线性模型上加入二阶交叉项,就能显著提升表达力。最简单的朴素形式是:

这个公式看似完美,但 \(w_{ij}\) 需要人为指定——特征有 n 个,二阶权重就有 \(n(n-1)/2\) 个,三阶、四阶更是天文数字。老王不可能为每位客人都提前手写搭配笔记,所以 DCN 与 xDeepFM 的共同目标,就是用网络自动决定“哪些食材该搭在一起”,而不是靠人工列举。

y^=w0+∑i=1nwixi+∑i=1n∑j=i+1nwijxixj\displaystyle \hat y = w_0+\sum_{i=1}^{n}w_i x_i+\sum_{i=1}^{n}\sum_{j=i+1}^{n}w_{ij}x_i x_j
  1. 偏置项(基础推荐菜)\(w_0\) 表示不依赖任何特征的基准预测值,相当于老王给所有顾客的“保底推荐”。
    w0\displaystyle w_0
  2. 一阶项(单个食材的底味)每个特征乘以自己的权重后累加,代表单独一条标签带来的影响。
    ∑i=1nwixi\displaystyle \sum_{i=1}^{n}w_i x_i
  3. 二阶项(两种食材撞出的火花)任意两个特征的乘积乘以对应权重,代表它们同时出现时的新增信号。
    ∑i=1n∑j=i+1nwijxixj\displaystyle \sum_{i=1}^{n}\sum_{j=i+1}^{n}w_{ij}x_i x_j

交叉网络结构(DCN)

老王请来“分子料理学徒小 D”,这位学徒的绝技是把食材打成粉末,让所有粉末自由碰撞,再重组出新的味道。小 D 的模型就是 DCN(Deep & Cross Network)。DCN 的整体结构非常清晰:先为每个离散特征做 Embedding 映射成稠密向量,然后把所有字段的向量拼接成一个长向量 \(x_0\),随后兵分两路——一路进入交叉网络逐层交叉,另一路进入深度网络学习隐式特征,最后把两路输出拼接起来做点击率预测。

交叉网络是 DCN 的灵魂。它由若干结构相同的交叉层组成,第 \(l+1\) 层的输出由当前层 \(x_l\)、原始输入 \(x_0\) 和可学习权重 \(w_l\) 共同决定:

每叠一层,模型就多一阶交叉;层数越多,能表达的组合阶数越高。

残差连接还有一个重要的副产品:它让每一层都能直接接触原始输入 \(x_0\)。这就像分子料理每次搅拌都会重新撒入一把最初的食材碎末,保证原味不会在反复加工中流失。

xl+1=x0xl⊤wl+bl+xl\displaystyle x_{l+1}=x_0 x_l^{\top}w_l+b_l+x_l
  1. 外积矩阵将原始输入 \(x_0\) 与当前层状态 \(x_l\) 做外积,得到 \(d\times d\) 矩阵,每个元素都是一个“分子”与另一个“分子”的乘积。
    x0xl⊤\displaystyle x_0 x_l^{\top}
  2. 权重调制用可学习的 \(w_l\) 对矩阵做加权求和,把二维信息压回一维,相当于给每一种碰撞打分。
    x0xl⊤wl\displaystyle x_0 x_l^{\top}w_l
  3. 残差连接加上 \(b_l+x_l\),保留上一层信息,让训练更稳定。
    xl+1=x0xl⊤wl+bl+xl\displaystyle x_{l+1}=x_0 x_l^{\top}w_l+b_l+x_l

Bit-wise 交互

把交叉层展开到单个元素上,就能看清 DCN 的另一个特性。设 \(x_0\in\mathbb{R}^d\),第 \(l\) 层状态为 \(x_l\in\mathbb{R}^d\),那么第 \(k\) 个元素的计算是:

这个式子揭示了 DCN 的重要特点:交叉发生在单个数值之间,而不是完整的嵌入向量之间。来自同一字段嵌入的不同维度,会被拆散后与其他字段的单个维度相乘。这种以单个特征值(bit)为单位的交互,就叫 bit-wise 交互。

因为标量 \(s_l\) 对所有位置取同一个值,DCN 每一层本质上是在对原始向量做“整体缩放 + 平移”。它能表达高阶交叉,但每个维度共享同一个调制系数,表达能力相对受限。这就像把整盘菜的粉末都撒同一个调料罐——虽然食材彼此混合,但每一粒粉末尝到的味道几乎一样,到底是谁和谁配出来的也说不清楚。

xl+1,k=x0,k∑j=0d−1wl,jxl,j+bl,k+xl,k\displaystyle x_{l+1,k}=x_{0,k}\sum_{j=0}^{d-1}w_{l,j}x_{l,j}+b_{l,k}+x_{l,k}
  1. 全局调制信号把当前层所有维度加权求和,压缩成一个标量。
    sl=∑j=0d−1wl,jxl,j\displaystyle s_l=\sum_{j=0}^{d-1}w_{l,j}x_{l,j}
  2. 逐位缩放(分子级碰撞)用这个标量乘以原始输入的第 \(k\) 位,相当于对每一维做一次强度调制。
    x0,k⋅sl\displaystyle x_{0,k}\cdot s_l
  3. 补回残差加上偏置和上一层的第 \(k\) 位,得到本层第 \(k\) 个输出。
    xl+1,k=x0,ksl+bl,k+xl,k\displaystyle x_{l+1,k}=x_{0,k}s_l+b_{l,k}+x_{l,k}

Vector-wise 交互(xDeepFM)

老王又请来一位“整料师傅小 X”。他的主张和分子料理正好相反:每块食材都要保持完整,在块与块之间做搭配。这就是 xDeepFM 的核心——CIN(Compressed Interaction Network,压缩交互网络)。CIN 的输入是嵌入后的特征矩阵 \(X_0\in\mathbb{R}^{m\times d}\),其中每一行是一个字段的完整嵌入向量。之后每一层生成一组新的特征图,每个特征图都是“上一层的某个特征图”与“原始某个字段”做逐元素相乘、再加权求和的结果:

因为每次运算都保持向量的完整性,字段语义不会被拆散。第 \(h\) 层的特征图代表 \(h+1\) 阶显式交叉,所以 CIN 天然可解释:每一层都在构造“哪些字段组合是有价值的高阶信号”。相比 DCN 的“全维度共享标量”,CIN 为每个输出特征图都学习一组独立权重,更像整料师傅的手艺——每道菜都清清楚楚知道哪块肉该配哪坛酱。

Xh+1,k=∑i=1Hh∑j=1mWijh,k (Xh,i∘X0,j)\displaystyle X_{h+1,k}=\sum_{i=1}^{H_h}\sum_{j=1}^{m}W_{ij}^{h,k}\,(X_{h,i}\circ X_{0,j})
  1. 哈达玛积(对应位置配对)\(X_{h,i}\) 与 \(X_{0,j}\) 都是长度为 \(d\) 的向量,两者逐位相乘得到同长度的中间向量,这是 vector-wise 交叉的最小单元。
    Xh,i∘X0,j\displaystyle X_{h,i}\circ X_{0,j}
  2. 双字段遍历\(i\) 遍历当前层全部特征图,\(j\) 遍历原始全部字段,穷尽“新交叉结果 × 原始字段”的组合。
    ∑i=1Hh∑j=1m\displaystyle \sum_{i=1}^{H_h}\sum_{j=1}^{m}
  3. 特征图压缩合并所有权重 \(W_{ij}^{h,k}\) 对中间向量做带权求和,得到第 \(k\) 个新特征图。
    Xh+1,k=∑i=1Hh∑j=1mWijh,k (Xh,i∘X0,j)\displaystyle X_{h+1,k}=\sum_{i=1}^{H_h}\sum_{j=1}^{m}W_{ij}^{h,k}\,(X_{h,i}\circ X_{0,j})

FM 对比分析

我们把视角拉宽,再看看“记账先生 FM”。FM(因子分解机)是经典的特征交叉基线模型。它不为每一对特征学习独立权重(那样参数爆炸),而是为每个特征学一个隐向量 \(v_i\),用两个隐向量的内积来衡量两两组合的强度:

FM 显式建模只到二阶;DCN 通过堆叠交叉层可以表达任意高阶;xDeepFM 的 CIN 则在每一层显式构造特征图,实现高阶且可解释的交叉。从粒度和能力对比看:FM 是“账房先生”,只记两两搭配;DCN 是“分子料理”,元素级乱炖但语义含混;xDeepFM 是“整料大厨”,既保留结构又能做高阶菜式。

CIN 的计算复杂度为:

FM 参数少、训练快,适合做起步基线;DCN 每层交叉网络参数只有 \(O(d)\),性价比高;xDeepFM 参数更多、计算更重,但换来显式高阶交互的上限。选谁,取决于你对可解释性和效果天花板的要求。

y^FM=w0+∑i=1nwixi+∑i=1n∑j=i+1n⟨vi,vj⟩ xixj\displaystyle \hat y_{\mathrm{FM}}=w_0+\sum_{i=1}^{n}w_i x_i+\sum_{i=1}^{n}\sum_{j=i+1}^{n}\langle \mathbf v_i,\mathbf v_j\rangle\, x_i x_j
  1. 上一层特征图数\(H_{h-1}\) 是第 \(h-1\) 层特征图个数,代表待交叉的“新食材块”数量。
    Hh−1\displaystyle H_{h-1}
  2. 原始字段数\(m\) 是输入字段个数,每一层都要与原始字段再做一次“回锅”交叉。
    m\displaystyle m
  3. 逐层累计所有层的这三个数相乘再求和,就是 CIN 的总体计算量。
    ∑h=1LHh−1⋅m⋅Hh\displaystyle \sum_{h=1}^{L}H_{h-1}\cdot m\cdot H_h

工程实现要点

讲完理论,老王要把这两道菜真正端进厨房。实际业务中,需要从四个角度用好 DCN 与 xDeepFM。

第一,嵌入维度。离散字段的 embedding 维度一般取 16~64:太大容易过拟合且训练慢,太小表达力不足。第二,交叉层数。DCN 交叉层常见 2~6 层,CIN 常见 2~3 层;更高阶的交叉往往带来噪声而非收益。第三,正则化。xDeepFM 的 CIN 参数多,容易过拟合,通常在深度分支和 CIN 分支加 Dropout,并在损失中加入 L2 正则。第四,多路融合。xDeepFM 把线性项、DNN、CIN 三路输出拼到一起做最终预测:

把这几点浓缩成一句口诀:嵌入 64 起步、交叉 2~3 层、正则管住、三路融合。老王在后厨同时掌勺“分子料理”和“整料大菜”后,味道(CTR)自然会慢慢煲出来。

y^=σ(w0+∑i=1mwi⊤xi+DNN(x0)+CIN(x0))\displaystyle \hat y=\sigma\Bigl(w_0+\sum_{i=1}^{m}\mathbf w_i^{\top}\mathbf x_i+\mathrm{DNN}(x_0)+\mathrm{CIN}(x_0)\Bigr)
  1. 线性记忆分支每个字段的 embedding 带权求和,负责保留低阶“底味”。
    w0+∑i=1mwi⊤xi\displaystyle w_0+\sum_{i=1}^{m}\mathbf w_i^{\top}\mathbf x_i
  2. 深度隐式分支DNN 对拼接向量做非线性变换,学习隐式交叉模式。
    DNN(x0)\displaystyle \mathrm{DNN}(x_0)
  3. 显式交叉分支CIN 输出各层特征图的汇总,提供高阶显式交叉信号。
    CIN(x0)\displaystyle \mathrm{CIN}(x_0)
  4. 激活输出把三路之和送入 sigmoid,得到点击概率。
    σ(⋅)\displaystyle \sigma(\cdot)

AI 应用场景

广告 CTR 预估中的 DCN

阶段:特征工程与模型训练

解决的问题:广告系统的用户与广告特征数量庞大,几乎都是离散稀疏字段。人工构造交叉特征组合爆炸,无法覆盖所有高价值组合。DCN 的交叉网络以极低的参数代价自动学习 bit-wise 的高阶交叉,与深度分支一起完成 CTR 预估。

具体案例:某信息流广告平台在排序模型中加入 Cross Network 分支,将用户年龄、性别、地域、手机型号、广告行业、素材类型等字段做 embedding 后拼接,2~6 层交叉与深度分支融合,CTR 相对提升 6%~9%,线上推理耗时增加不到 15%。

电商推荐排序中的 xDeepFM

阶段:模型建模与线上推理

解决的问题:电商场景中,用户历史行为与商品类目之间存在复杂高阶关联,比如“高价格带 × 美妆类目 × 大促期间”。DNN 的隐式交叉难以稳定捕捉这类显式信号,人工又难以枚举。xDeepFM 的 CIN 可以在向量粒度显式构造高阶交叉,且具备更好的可解释性。

具体案例:某电商 App 用 xDeepFM 融合用户行为字段(类目序列、品牌序列、价格带)与候选商品字段(类目、品牌、价格、新品标),CIN 在 2~3 层内挖掘跨字段高阶信号,并配合 DNN 分支做隐式补充,排序 AUC 提升约 2.2%。

特征交叉离线评估基线

阶段:离线训练与特征评估

解决的问题:新业务冷启动时,特征工程师需要快速判断“该为模型准备多少交叉特征”。如果每次都用人工试错,成本很高。把 DCN 和 xDeepFM 当作现成的自动交叉基线,可以快速评估特征质量。

具体案例:某算法平台将 DCN 和 xDeepFM 封装成模板算子,业务方只需输入特征表即可自动产出 CTR 预估和特征重要性报告,省去大量手工组合实验。

Python 演示

python44 行
import numpy as np # 构造一个小型 CTR 玩具数据:4 个二值字段,标签由字段交互生成rng = np.random.default_rng(42)N, m, d = 64, 4, 3X = rng.integers(0, 2, size=(N, m)).astype(float)y = ((X[:, 0] * X[:, 1] + X[:, 2] * X[:, 3]) > 0).astype(float)emb = rng.normal(0, 0.1, (m, d)) # DCN 交叉层:x_{l+1} = x0 * (x_l^T w) + b + x_lclass CrossNet:    def __init__(self, dim, layers):        self.w = [rng.normal(0, 0.01, dim) for _ in range(layers)]        self.b = [rng.normal(0, 0.01, dim) for _ in range(layers)]     def forward(self, x0):        xl = x0.copy()        for w, b in zip(self.w, self.b):            xl = x0 * (w @ xl) + b + xl        return xl # xDeepFM 的 CIN 层:特征图间哈达玛积加权求和def cin_step(Xh, X0, W):    Hp, D = Xh.shape    m0, _ = X0.shape    Hn = W.shape[0]    Xn = np.zeros((Hn, D))    for k in range(Hn):        acc = np.zeros(D)        for i in range(Hp):            for j in range(m0):                acc += W[k, i, j] * (Xh[i] * X0[j])        Xn[k] = acc    return Xn if __name__ == "__main__":    x0 = X[0][:, None] * emb          # 当前样本的字段嵌入矩阵 (m, d)    cross = CrossNet(m * d, 2)    out = cross.forward(x0.flatten())  # bit-wise 交叉输出    print("DCN 输出 shape:", out.shape)     W1 = rng.normal(0, 0.01, (2, m, m))    X1 = cin_step(x0, x0, W1)         # vector-wise 交叉输出    print("CIN 输出 shape:", X1.shape)
目的:用 NumPy 实现 DCN 的交叉层和 xDeepFM 的 CIN 层核心逻辑,直观对比 bit-wise 与 vector-wise 两种交叉的计算过程。
  1. xl = x0 * (w @ xl) + b + xl这是 DCN 交叉层的一行实现:先做当前层状态的点积得到标量,再对原始输入逐位缩放并加残差。
  2. acc += W[k, i, j] * (Xh[i] * X0[j])这就是 CIN 的核心:两个向量逐元素相乘(哈达玛积),再用权重累加出新的特征图。
  3. x0 = X[0][:, None] * emb用样本的取值掩码遮蔽 embedding 每一行,得到该样本的字段嵌入矩阵。
  4. cross.forward(x0.flatten())DCN 将所有字段嵌入展平成长向量,这与论文中拼接后的输入一致。
  5. cin_step(x0, x0, W1)CIN 第一层用原始特征矩阵同时作为输入和“原始字段回锅”来源,体现 vector-wise 的逐层交互。

常见误区

误区DCN 把交叉做到了元素级,粒度比 xDeepFM 的向量级更细,所以表达能力一定更强,效果一定更好。

正解粒度细不等于语义正确。bit-wise 会让来自同一字段嵌入的不同维度强行相乘,破坏字段的语义完整性;vector-wise 保持了字段内部的结构,泛化性、可解释性和实际效果往往更好。两者谁强取决于数据和任务,而不是粒度高低。

为何常见:直观上觉得“切得越碎越入味”,把“更细粒度”等同于“更强建模能力”。

误区DCN 有 Cross Network,xDeepFM 有 CIN,两者都是做特征交叉,结构上应该大同小异,换个马甲而已。

正解两者计算方式完全不同。DCN 的 cross layer 先做外积再乘向量,把全部维度压缩成一个标量进行缩放,本质是 bit-wise;CIN 用哈达玛积逐位相乘,并通过多张特征图和独立权重来建模,属于 vector-wise。参数维度和可解释性差异都很大。

为何常见:名字里都带“交叉/Interaction”,让人误以为出自同一套路。

误区高阶交叉能捕捉更多信息,所以交叉网络叠得越深,AUC 一定越高。

正解交叉层过深会引入大量噪声和过拟合,高阶组合在稀疏数据上往往缺乏足够样本支撑。实践上 DCN 用 2~6 层、CIN 用 2~3 层已足够,再多层收益递减甚至变差。

为何常见:把深度学习“越深越好”的惯性迁移到交叉网络上,忽略了高阶交互的数据稀疏问题。

误区FM 是浅层模型,速度慢、能力弱,现在有 DNN 了,FM 完全没用。

正解FM 的核心思想——用隐向量内积代替显式交叉权重——被几乎所有深度特征交叉模型继承。xDeepFM 的线性部分与隐向量机制就保留了 FM 类似的低阶记忆能力,FM 作为基线模型在大量 CTR 任务中依然常用。

为何常见:只看到 FM 是“老模型”,忽略其思想在深度时代的重要延续。

面试题

Q1. DCN 的交叉网络属于哪种特征交互方式?

单选题 · easy

  • A.向量级特征交互
  • B.元素级特征交互← 正确答案
  • C.字段级自动交互
  • D.神经网络的隐式交互

答案:B。DCN 的交叉层展开到标量形式后,每个特征位单独与其他位相乘,属于 bit-wise(元素级)交互。向量级交互是 xDeepFM 的 CIN 的特点,字段级交互常出现在 FM 类方法中,A、C、D 均不正确。

Q2. xDeepFM 中负责显式高阶交叉的核心模块是?

单选题 · easy

  • A.交叉网络 Cross Network
  • B.压缩交互网络 CIN← 正确答案
  • C.因子分解机 FM
  • D.门控循环神经网络 GRU

答案:B。xDeepFM 的全称是 eXtreme Deep Factorization Machine,其创新点在于用 CIN 做显式高阶交叉,并同时保留线性项和 DNN。A 是 DCN 的模块,C 是基础模型,D 是序列模型。

Q3. DCN 交叉层公式 \(x_{l+1}=x_0 x_l^\top w_l+b_l+x_l\) 中“+x_l”的作用是?

单选题 · mid

  • A.防止模型过拟合的机制
  • B.保留上一层输入信息← 正确答案
  • C.让梯度能够反向传播
  • D.对特征做归一化处理

答案:B。残差连接 \(x_l\) 把上一层状态直接加到输出上,保留已学到的信息,同时缓解深层训练难度。它不是正则化,也不是归一化;反向传播是所有网络都有的能力,并非残差专门的作用。

Q4. DCN 每个交叉层中权重向量 \(w_l\) 的维度是多少?

单选题 · mid

  • A.大小为 m×m 的权重矩阵
  • B.大小为 d×d 的权重矩阵
  • C.长度为 d 的一维权重向量← 正确答案
  • D.长度为 m 的一维权重向量

答案:C。交叉层输入 \(x_l\in\mathbb{R}^d\),权重 \(w_l\) 与输入同维,是一个长度为 d 的向量。正因为参数量只有 O(d),DCN 交叉网络非常轻量。m 通常代表字段数,不是交叉层的输入维度。

Q5. 关于经典 FM 模型,下列哪项描述正确?

单选题 · mid

  • A.显式建模交互只到二阶← 正确答案
  • B.只能建模一阶线性特征
  • C.不能处理稀疏离散特征
  • D.依赖深度网络提取特征

答案:A。FM 通过隐向量内积显式建模所有二阶特征组合,因此“只到二阶”是对的。FM 天然支持稀疏离散特征,且不依赖深度网络;它的一阶项也存在,所以 B、C、D 均不正确。

Q6. 关于 DCN 与 xDeepFM 的对比,下列说法正确的有哪些?

多选题 · mid

  • A.DCN 的交叉是 bit 级← 正确答案
  • B.xDeepFM 的交叉是向量级← 正确答案
  • C.DCN 可以表达高阶交叉← 正确答案
  • D.xDeepFM 无法处理高阶交叉

答案:ABC。DCN 的交叉层展开到单个数值相乘,是 bit-wise;xDeepFM 的 CIN 用哈达玛积保持向量结构,是 vector-wise;DCN 堆叠交叉层可表达任意高阶。xDeepFM 的 CIN 恰恰是显式高阶交叉,因此 D 错误。

Q7. 下列关于 FM、DCN、CIN 特性的说法,正确的有哪些?

多选题 · hard

  • A.FM 用隐向量内积做二阶交叉← 正确答案
  • B.CIN 的每层都是显式高阶交叉← 正确答案
  • C.DCN 每层参数复杂度为 O(d)← 正确答案
  • D.xDeepFM 是 FM 与 DNN 的简单相加

答案:ABC。FM 的核心就是用隐向量内积替代显式交叉权重;CIN 第 h 层特征图表示 h+1 阶显式交叉;DCN 交叉层每层权重只有 d 个数。xDeepFM 是“线性 + DNN + CIN”三路融合,不是简单 FM+DNN,D 错误。

Q8. CIN 中哈达玛积(Hadamard Product)的作用是什么?

单选题 · hard

  • A.生成两向量之间的外积矩阵
  • B.对两个向量做逐元素相乘← 正确答案
  • C.先转置再执行矩阵乘法
  • D.计算向量内积得到标量

答案:B。哈达玛积 \(X_{h,i}\circ X_{0,j}\) 是两个同长向量逐位相乘,结果仍是一个向量,这是 CIN 实现 vector-wise 交叉的最小单元。外积和矩阵乘法会改变形状,内积会得到标量,均不符合 CIN 的设计。

Q9. DCN 的整体网络结构包含以下哪个分支?

单选题 · easy

  • A.只包含交叉网络结构
  • B.交叉与深度双分支结构← 正确答案
  • C.线性与 LSTM 双分支结构
  • D.仅由多层感知机组成

答案:B。DCN 原始论文明确提出“Cross Network + Deep Network”双分支结构,输出时拼接两侧结果做预测。它一定包含交叉网络,所以 A、D 不对;LSTM 不是 DCN 的组件,C 也不对。

Q10. 工程实践中使用交叉网络模型时,哪些做法是合理的?

多选题 · hard

  • A.嵌入维度一般取 16 到 64← 正确答案
  • B.交叉层建议设置 2 到 3 层← 正确答案
  • C.给深度分支加 Dropout 防过拟合← 正确答案
  • D.交叉层数越多泛化越强

答案:ABC。嵌入维度取 16~64、交叉层 2~3 层是业界常见配置;深度分支加 Dropout 或 L2 正则能有效防过拟合。交叉层数过多反而带来噪声和过拟合,泛化不会持续增强,因此 D 错误。