SENet 与 GateNet 对比解析:从 FiBiNet 到 GateNet 的 2 种特征重要性建模演进
SENet与GateNet深度解析推荐系统特征建模的演进与实战特征建模在推荐系统中的核心价值推荐系统的本质是解决信息过载问题而特征建模则是这个过程中的关键环节。在工业级推荐系统中特征往往呈现出海量、高维且极度稀疏的特点。以微博推荐系统为例用户行为数据中超过80%的特征出现频率不足5次但传统方法仍为这些低频特征分配与高频特征相同的Embedding维度这直接导致两个严重问题模型参数膨胀特征Embedding层通常占据推荐模型总参数量的90%以上噪声特征干扰大量低频特征的噪声信号会淹没真正有效的特征信号# 典型推荐模型参数分布示例 total_params 20e8 # 20亿参数 embedding_params 18.7e8 # Embedding层参数 mlp_params 1.3e8 # MLP层参数 print(fEmbedding层占比: {embedding_params/total_params:.1%}) # 输出93.5%提示在Criteo数据集上的实验表明当Embedding size超过30时未做特征选择的模型AUC指标会下降0.5-1.2%而引入特征选择的模型则能保持稳定上升特征建模的三大技术方向1. 卡门槛动态特征选择核心思想在特征Embedding层与上层网络之间加入可学习的门控系统动态判断每个特征的重要性并分配权重。这类似于高考分数线机制只有达到一定重要性的特征才能进入后续计算。技术方案参数量计算复杂度适用场景SENet低O(n)精排模型GateNet中O(n^2)复杂交叉ContextNet高O(n^2)序列建模2. 挤水分变长Embedding分配传统方法为所有特征分配相同长度的Embedding这显然不合理。更优策略应为高频特征分配较长Embedding如64维低频特征分配较短Embedding如8维# 变长Embedding实现示例 class AdaptiveEmbedding(nn.Module): def __init__(self, vocab_sizes, dims): super().__init__() self.embeddings nn.ModuleList([ nn.Embedding(vocab_size, dim) for vocab_size, dim in zip(vocab_sizes, dims) ]) def forward(self, inputs): return torch.cat([ emb(inputs[:,i]) for i, emb in enumerate(self.embeddings) ], dim1)3. 补营养特征表达增强对于无法简单丢弃的低频特征可通过两种方式提升其表达质量内功修炼使用对比学习等技术让模型从数据中自行挖掘深层模式外部借力通过多任务学习共享其他任务学到的特征表达SENet计算机视觉启发的特征选择方案SENet(Squeeze-and-Excitation Network)最初由Momenta团队提出用于图像分类其核心创新在于Squeeze阶段将每个特征域的Embedding压缩为单个标量通常采用均值池化Excitation阶段通过两层MLP学习特征重要性权重Reweight阶段将学习到的权重与原始Embedding相乘FiBiNet模型中的SENet变体输入100个特征域每个域Embedding维度为32中间层压缩到16维再扩展回100维输出100个0-1之间的重要性权重注意原始SENet使用ReLU激活函数会导致约30%的特征权重直接归零这在推荐场景可能过于激进。实践中可改用Sigmoid保留更多特征信息GateNet门控机制的全面升级GateNet由新浪微博团队提出将门控机制系统性地应用于推荐系统的各个层级1. Embedding层门控Bit-wise模式为Embedding向量的每个元素分配独立权重Vector-wise模式整个Embedding向量共享一个权重参数共享策略对比策略参数量AUC增益训练速度Field Private高1.2%慢Field Sharing低0.6%快2. 隐藏层门控在MLP的隐藏层之间插入门控单元公式表示为 $$ a^{(l)} g^{(l)} \odot (W^{(l)}h^{(l-1)} b^{(l)}) $$ 其中门控值$g^{(l)}$由下层激活$h^{(l-1)}$经独立网络计算得到3. 实战经验在电商推荐场景中的观察对于用户行为序列GateNet比SENet带来更显著的提升1.8% vs 1.2%门控激活函数选择Embedding层用Tanh隐藏层用Sigmoid效果最佳同时使用Embedding和隐藏层门控时需将学习率降低30%-50%以避免震荡技术对比与选型指南SENet vs GateNet核心差异维度SENetGateNet设计初衷特征选择信息流控制计算粒度Field-levelBit-level参数共享强制共享可配置位置灵活性仅Embedding层任意网络层计算开销低中高选型决策树数据特性特征域少且稳定 → SENet特征域多且变化大 → GateNet系统约束延迟敏感 → SENet效果优先 → GateNet特征类型结构化特征 → SENet序列行为 → GateNet# 混合使用示例 class HybridModel(nn.Module): def __init__(self, num_features, emb_dim): super().__init__() self.senet SENetLayer(num_features) self.embedding nn.EmbeddingBag(num_features, emb_dim) self.gate_mlp nn.Sequential( nn.Linear(emb_dim, emb_dim//2), nn.Sigmoid() ) def forward(self, x): weights self.senet(x) weighted_x x * weights emb self.embedding(weighted_x) gate self.gate_mlp(emb) return emb * gate前沿发展与工程实践1. 动态门控技术最新研究显示将门控决策从静态学习改为基于实例动态生成可进一步提升效果计算开销增加15%但AUC提升0.3-0.5%关键实现将门控网络的输入扩展为实例特征全局统计量2. 门控机制的可解释性通过分析门控权重分布可发现业务中的关键特征电商场景价格敏感度权重与促销活动强相关内容推荐时效性特征权重在热点事件期间显著升高3. 部署优化技巧量化压缩将门控网络参数量化为INT8几乎无损效果提前计算对于非序列特征门控权重可离线预计算稀疏化对低于阈值的门控输出直接置零提升计算效率在实际AB测试中合理配置的GateNet模型相比基线DNN模型在微博信息流场景实现了点击率提升2.1%用户停留时长增加3.4%模型体积减少18%通过特征过滤