基础系列二:特征交叉算子、Attention、Transformer 与 MoE 核心知识点
2.Dynamic Weight(DW),“动态权重”这个内容源自大佬的一篇文章:推荐算法的新范式https://zhuanlan.zhihu.com/p/500934745, Dynamic Weight 模式是在传统的“特征”和“结构”之外开辟了一条新的技术路线,即在DNN Weight上做文章。将“场景敏感”特征z,喂入一个小网络,输出一个向量W,即把W reshape成一个子模型 Dynamic Weighted Network(DWN)。比如,W一共640维,640=32×16+16×8,从而可以reshape成一个32-16-8的三层MLP。拿以上根据 “场景敏感”特征动态生成权重的DWN, 接入整个推荐模型的关键位置。即,注意这个动态网络的输入是x,就是普通特征,场景敏感和非敏感都包括。(上面的意思就是把这个场景敏感的特征 单独 处理一遍?没理解,看下面的分析)优点:1).各个场景的数据还是合在一起训练的,模型参数也只有一套,方便线上维护。而且共享的模型参数,也允许数据丰富场景学习到的知识,向数据稀少的场景迁移。(不同场景的数据或者网络具体是怎么配合的呢?)2).前文已经讲到过了,“场景敏感” 特征如果和其它特征一样喂入DNN的最底层,很容易就“泯然众人矣”。这些“场景敏感”特征的信息,在层层向上传递过程中,被其他特征所干扰,无法对最终预测结构产生多少影响。而DW模式特别突出了“场景敏感”特征的作用,让它们像一个“滤波器”控制住了其他信息的向上传递通道。其他信息向上传递过程中,都要经过“场景敏感”特征的“调制”,根据不同场景,对前一层发现的模式局部放大或衰减。(这块没看懂,敏感和非敏感的特征放在一起,没起到特殊对待敏感特征的作用啊。)而且在将动态产生的权重reshape成DWN的过程中,DWN层与层之间可以插入非线性的激活函数,从而允许实现 比较 复杂的“调制”功能。2.1 重新理解一遍大佬的思维:文中大佬的思维是:不是把场景敏感特征单独处理一遍,正确的流程是两条路,完全分开:场景敏感特征 z→ 走小网络 →生成另一层网络的权重 W(场景特征z不参与预测,只负责“造网络”)→ 把 W reshape 成一个MLP 的权重(比如 32→16→8)→这就叫 DWN(动态权重网络)普通特征 x(含敏感 + 不敏感)→ 走W 构成的网络前向传播(z造出来的网络)→ 输入DWN→ 用刚才 z 生成的权重做前向→ 得到输出2.1.1敏感和非敏感的特征放在一起的x,如何起到特殊对待敏感特征?所有特征 x(敏感 + 非敏感全部混在一起)作为输入数据,喂进上面【z 生成的 DWN 网络】里计算。DW 让场景敏感 z (单独支路、用来生成 DWN 权重 W 的那个 z)像滤波器,控制其他信息向上传递,对模式放大 / 衰减。(DWN每一层权重都是 z 生成的,x 每乘一次权重,就是被 z 调制一次),整个网络怎么算 x,完全由 z 说了算。比如:深夜场景z1 → 网络权重变成【放大点击偏好、衰减兴趣特征】白天场景z2 → 网络权重变成【放大商品特征、衰减点击偏好】2.1.2 那这样对 普通特征公平吗,岂不是全 特殊对待 敏感特征了?翻译一下我的疑问:z 都能控制整个网络了,那普通特征还有话语权吗?公平吗?岂不是全听 z 的了?回答:DW 确实是【刻意偏心、特殊优待】场景敏感特征,但不是废掉普通特征,而是让场景敏感特征当「裁判 / 滤波器」,普通特征当「选手」;而且这种偏心是合理的,反而比传统方式更公平。但并不是全听z的,真实逻辑是:z 控制的是「怎么解读普通特征」,不是直接代替普通特征!z不直接输出结果。z 决定:普通特征在当前场景下,应该重视什么、忽略什么、放大什么、衰减什么普通特征没有被删掉、没有被忽略、没有权重被强制置 0。普通特征依然是预测主体,只是不再一刀切统一权重。场景敏感特征 z 拥有【调制权 / 控制权】,普通特征拥有【信息权】;z:管规则、权重、滤波、放大衰减(高阶控制权)x:管具体内容、偏好、匹配信息(预测主体)没有 x,z 啥也预测不出来;没有 z,x 就是不分场景的傻瓜模型。二者是控制 + 被控制,不是取代 + 被取代。z 从头到尾,永远不会直接输出 CTR 预测!z 只做一件事:z → 进小网络 → 生成DWN 网络的权重 Wz只造网络,不做预测z 永远不输出最终点击率、转化率。这就是:z 不直接输出结果。传统模式:场景特征 地位太低,被普通特征淹没。DW模式:把场景特征地位提升到网络控制器级别,用来修正普通特征的表达。属于抬升弱势特征地位,不是打压强势普通特征。2.1.3 什么场景 适合这种 处理 模式呢?1).多场景混合训练,场景之间差异巨大不同场景用户行为逻辑完全不一样:白天 / 深夜首页推荐 / 搜索页 / 购物车页新用户 / 老用户 / 沉睡召回用户WiFi 环境 / 流量环境安卓 /iOS一线城市 / 下沉市场2).场景特征是强 Bias,但直接喂底层会被淹没就是你笔记里的强 bias 特征:时段、渠道、曝光场景、用户分层、流量来源……这种特征很重要,但很弱、很稀疏、特征值很小直接塞进 DNN 底层,会被用户 ID、商品 ID、历史行为淹没(泯然众人矣)。3).跨场景数据分布不均衡(冷启动 / 长尾场景)主场景数据极多小场景、长尾场景、新场景数据极少传统模型:模型只会学大数据场景,小场景直接废掉4).同一个特征,在不同场景作用完全相反举例真实业务:价格特征:白天负向(越便宜越点),深夜正向(贵的反而点)历史 CTR 偏置:首页权重高,搜索页权重低行为序列特征:新用户重要,老用户不重要传统模型只能学一个平均权重,学不出这种反向规律。5).序列很长、特征很多,需要轻量化自适应调制不想做多塔模型(多套模型,线上巨难维护)不想分场景单独训练(无法迁移、资源爆炸)想要:一套模型 + 场景自适应6).【不适合 DW】的场景单一场景、没有场景区分 → 完全没必要场景特征很弱、几乎没用 → DW 白做愿意做多塔、多模型分场景训练 → 不用 DW追求极致简单、不想加复杂动态网络结构3. 权重的乘法 有哪几种形式一、先统一符号(你在论文里只会看到这 4 种)1. 普通点乘· 或直接写一起:矩阵/向量乘法(线性代数乘法)2. 圆圈点 ⊙:按元素相乘(哈达玛积)3. 上标 T 转置 ·^T:向量内积4. 〈·,·〉尖括号:也是内积,和点乘一样深度学习 / DCN 里,点乘 = 内积,点积=内积向量・向量这种乘法 =点乘 = 内积 = dot product 结果是:一个数字(标量)矩阵・向量 / 矩阵・矩阵 这叫矩阵乘法,不叫内积向量 ⊙ 向量这叫按位乘 / 哈达玛积 结果是:同维度向量公式口诀:3.1. 向量内积(点积)(点乘)形式:或输入:两个同维度向量运算:对应位置相乘再相加输出:一个标量(数字)例子:在DCN v1 里就是这个:得到一个数,再去乘。点乘 = 内积,只是名字不同。1.1 为什么论文里写成?因为严格线性代数里:a是列向量(d,1)是行向量(1,d)= 一行 乘以一列 = 一个数, 本质还是点积 / 点乘。总结:点乘 或者 点积的 本质是,输入是两个向量,输出是一个数。(乘完再加 → 一个数)3.2. 矩阵 × 向量形式:输入:矩阵,向量运算:标准矩阵乘法输出:一个同维度向量DCNV2 用的就是这个,把原来的向量 w 换成矩阵 W。3.3. 按元素相乘(哈达玛积), 按位乘数学正式名:哈达玛积深度学习 / 代码里:按元素相乘口语 / 直观叫法:按位乘在DIEN论文中,绝大多数GRU/LSTM论文,以及早期的深度学习文献中,使用的符号是,现在很多新论文,一些数学/工程文献中更偏好这个符号,为了和【函数复合】的区分开。符号:输入:两个同形状向量/矩阵运算:每个位置自己乘自己输出:形状不变DCN 整个系列都大量用这个:总结:两个同形状向量 / 矩阵,每个位置自己乘自己,只乘不加,输出形状不变。按位乘 / 按元素相乘 / 哈达玛积:两向量 →同形状向量3.4. 外积(你在特征交叉里会遇到)形式:输入:两个向量输出:矩阵作用:显式做二阶交叉(DeepFM、FM 核心)3.4.1. 放在 DCN 里,帮你彻底对应上 DCN v1先算内积 → 得到一个数再和按位乘所以:所有维度共用同一个系数DCN-V2矩阵乘向量 → 得到一个 d 维向量再和按位乘所以:每个维度有自己独立系数3.4.2 外积在二阶特征交叉中的使用外积:就是把两个特征的embedding做外积,生成一个矩阵,这个矩阵的每一个位置,都代表特征i 和 特征 j 的交叉项。在模型里的作用只有一句话:显式、暴力、完整地学习所有二阶特征交叉。3.4.2.1. 外积长什么样假设两个embedding都是3维,外积:输入:两个k维向量输出: