小红书精读:FLMNet: Self-Ensemble Distillation from Masks to Seeds for Single-Tower CTR Prediction
自蒸馏的收益,被这篇算清了🧮
各位算法同学们,FinalNet 和 QNN 里那个自蒸馏损失,去掉它 Criteo 上 AUC 只掉 0.06 个百分点,但两年没人说清它到底在正则什么。这篇把 mask 数量推到无穷取极限,答案简单到有点反直觉。
📄 FLMNet: Self-Ensemble Distillation from Masks to Seeds for Single-Tower CTR Prediction
🔧 极限推导:当 mask 数量趋于无穷,masked self-ensemble 目标精确收敛为“平均 logit 上的标签损失 + softplus 在 mask 上的 Jensen 间隙”,外加一个梯度为零的项。也就是说它只正则各 mask 副本之间的分歧,别的都没管。普通 dropout 是系数为 1 的特例,QNN 在 logit 空间池化后系数是 2,多出来的那 1 才是“蒸馏”。
🧩 把间隙换成高斯代理,只需要 logit 对 mask 的均值和方差,不用采样。在这三个条件下有闭式解:门控只读未 mask 的输入、readout 是仿射、每层按坐标缩放。于是训练变成一次确定性前向。
⚙️ 结构上配套做了 FLMNet:每个 field-local gate 只读自己那一列未 mask 的 embedding,再用学出来的 mixer 把门控摊到其他 field。这一步不是白拿的,直接把门控改成读未 mask 输入,Criteo 验证 AUC 掉 10.5e-4(还没加惩罚项),FLMNet 把它补回到与原 QNN-α 只差 0.9e-4。后半段从 mask 换到 seed,FLMNet-KD 拿一个收敛的 FLMNet-CF 去对齐 K 个不同种子 tower 的池化 logit,训练 K+1 次,推理仍然只有一个塔。
📊 5 个 benchmark、17 个 baseline,单塔推理的准确率排到前两名。 📈 消融:QNN 去掉自蒸馏损失,Criteo 掉 0.06 个百分点,Frappe 0.17,KKBox 0.19;FinalNet 从 Avazu 的 0.03 到 Frappe 的 0.12。 ✅ 惩罚项和种子蒸馏的增益,在可测量的地方基本是相加的,不是同一份收益换个说法。 ✅ 只差随机种子的 tower,能把五塔集成一半以上的增益传给单个学生塔。
总结:如果你在做单塔 CTR,而且已经在用 dropout 类自蒸馏辅助损失,这篇给了你一条不用多次随机前向的实现路径,收益量级在 1e-4 的 AUC 上,别指望大跳。需要关注两件事:增益在你自己数据上是否稳定在 1e-4 以上,以及门控改结构带来的掉点有没有补回来。容易出问题的地方也很明确,闭式解依赖那三个结构条件,门控一旦读 masked 输出,均值和方差就是错的;KD 那部分要 K+1 次训练,算力预算得先算清楚再决定要不要跟。
原文:AlphaXiv