第 40 题:MaskNet的实例引导掩码,动态特征选择的实现机制?
题目
MaskNet的实例引导掩码,动态特征选择的实现机制?
完整讲解
一、实例引导掩码在做什么
MaskNet 的核心是实例级(instance-wise)动态特征选择:对每个样本,根据当前输入生成一个掩码,用这个掩码对特征或特征通道做加权/门控,从而不同样本看到不同的特征子集或不同的特征强度,实现「动态特征选择」。所谓实例引导,就是掩码由当前样本经过一个小网络(如 MLP)或 attention 得到,而不是全局共享的固定权重。
二、动态特征选择的实现机制
常见做法有两种(或组合使用):
- 基于 MLP 的掩码生成:输入为当前样本的 embedding 拼接(或 pooled 表示)$\boldsymbol{e}$,经过一两层全连接 + 激活(如 sigmoid),输出与「特征数」或「特征维度」同长的向量 $\boldsymbol{m} \in [0,1]^{n}$ 或 $[0,1]^d$。然后用 $\boldsymbol{m}$ 对特征做逐元素乘:$\tilde{\boldsymbol{e}} = \boldsymbol{m} \odot \boldsymbol{e}$(或对每个 field 一个标量掩码)。这样每个样本的 $\boldsymbol{m}$ 不同,相当于每个实例选出了「对自己有用的」特征或维度,实现动态选择。
- 基于 attention 的掩码:用当前样本的某个 query 表示对「所有特征」或「所有 field」做 attention,得到权重 $\alpha_i$,再用 $\alpha_i$ 对对应特征或 field 加权。attention 权重天然在 0~1 之间(softmax),且随样本变化,等价于软掩码;若对权重做 threshold 或 top-k,可得到近似「硬」选择。
训练:掩码生成器与主模型一起端到端训练;损失只来自最终预测,梯度会反传到掩码,使掩码学会「在哪些样本上突出哪些特征」能降低损失,从而学到实例相关的有用模式。
三、与静态特征选择的区别
- 静态:特征重要性或选择是全局的(如对所有样本同一套权重或同一套选中的特征),不随样本变。
- MaskNet 实例引导:掩码随样本变,同一特征在不同样本上可以有时被强调、有时被抑制,更灵活,适合「不同用户/不同上下文下重要特征不同」的场景。
四、小结
MaskNet 的实例引导掩码 = 用当前样本的表示通过 MLP 或 attention 生成掩码向量,对特征或维度做逐元素乘(或加权),实现按样本动态特征选择;掩码与主模型联合训练,由任务目标驱动学到「何时突出哪些特征」。
面试要点
- 能说清「实例引导掩码」:掩码由当前样本生成,不同样本掩码不同,用于对特征/维度做加权或门控。
- 能描述实现:MLP 以样本表示为输入、输出与特征数/维度同长的向量,sigmoid 后与特征逐元素乘;或用 attention 得到样本相关的特征权重作软掩码。
- 能对比静态选择:实例引导是样本级动态;静态是全局固定权重或固定特征子集。
记忆要点
- MaskNet:实例引导 = 当前样本 → 生成掩码 → 对特征/维度加权(如 $\boldsymbol{m} \odot \boldsymbol{e}$)。
- 实现:MLP(sample_embedding) → sigmoid → mask;或 attention 权重当软掩码;端到端训练。
- 动态 vs 静态:同一特征在不同样本上可被不同强度选择;静态则全局一致。