重参数就是把带有随机性的变成确定性的节点,同时随机性用另一个输入节点代替。
举简单的VAE(变分自编码器)的例子说明:一个连续分布(正态分布)的重参数
最原始的自编码器: 左右两边是端到端的出入输出网络,中间的绿色是提取的特征向量,这是一种直接从图片提取特征的方式。
VAE: 不直接用网络去提取特征向量,而是提取这张图像的分布特征,也就把绿色的特征向量替换为分布的参数向量,比如说均值和标准差。然后需要decode图像的时候,就从encode出来的分布中采样得到特征向量样本,用这个样本去重建图像。
这时怎么计算梯度的问题就出现了:原本,网络中参数包括前向传递和反向传递(如下图左半部分),现在我们计算出P(Z)后,依概率采样(np.random.choice),由P(Z)得到样本z没问题,但反向传递时如何找到并更新P(Z)就有问题了。
应用重参数技巧解决该梯度传导问题:
假设图中的和表示VAE中的均值和标准差向量,它们是确定性的节点。而需要输出的样本是带有随机性的节点,重参数就是把带有随机性的变成确定性的节点,同时随机性用另一个输入节点代替。例如,这里用正态分布采样,原本从均值为和标准差为的正态分布(,2)中采样得到。将其转化成从标准正态分布(0,1)中采样得到,再计算得到=+⋅。这样一来,采样的过程移出了计算图,整张计算图就可以计算梯度进行更新了,而新加的的输入分支不做更新,只当成一个没有权重变化的输入。
目标采样的分布:(,2) (设采样出的样本为)
base 分布:(0,1) (设采样出的样本为)
从到的关联:=+⋅
通过将的随机性转移到上
应用场景:首先需要可以采样,使得离散的概率分布有意义而不是只取概率最大的值,其次需要可以计算梯度。
如:例如网络输出的四维向量为=[−20,10,9.6,6.2],第二个维度取到最大值10。
希望从符合() =[0,0.591,0.396,0.013]的分布中采样,即希望采样出第二维[0,1,0,0]的类别的概率是最大的,为0.591。这和多类别的分类任务是一个道理。但是这种取法有个问题是不能计算梯度,也就不能更新网络。
通过控制大于0的温度参数来平滑分布。当->0时,分布趋于one-hot形式;当->+∞,分布趋于均匀分布
目标分布:维向量
base分布:−log(−log()),为从均匀分布(0,1)中采样的独立样本
随机性被转移到上
(滴滴出行) 一个新颖的通用异构图信息融合框架
如何构建一个统一的推荐系统来解决所有这些场景的推荐需求是一个巨大的挑战,尤其是在面临用户-项目交互的稀疏性问题时。
我们提出了一个通用有效的框架Gemini,它只依赖于公共交互日志,避免了对辅助信息的依赖,保证了更好的通用性。同时,为了保持原有异构图上的相邻关系,Gemini 分别从用户和项目的角度将原始的用户-项目异构图转化为两个半同构图。转换后的图由两种类型的节点组成:来自同构节点的网络节点和来自异构节点的属性节点。然后,以同构方式学习节点表示,同时考虑边缘嵌入。由于转换后的图包含原始二阶邻居,因此在一定程度上解决了交互稀疏问题。
在训练过程中,我们在 Gemini-U 和 Gemini-I 之间共享用户和项目的嵌入,然后我们可以通过边缘属性 Att-U 和 Att-I 将两个网络信息融合过程非常紧密地关联起来两个好处:一是两类节点的表示不同,但仍处于相同的低维空间; 另一种是随着网络信息融合的进行,item embedding结合了其多阶邻居的信息,然后item之间的邻居关系信息可以引入到Gemini-U上的用户信息融合中
例如:从用户的角度来看,如果两个用户都点击了相同的一些项目,那么他们就有了一些共同的兴趣,从而在 Gemini-U 中增加了一条边。 这些相同商品是边的属性节点,为简单起见称为 Att-U。
Att-U 还可以通过两种方式来表征边的重要性:
对于中心节点,GCNs 的核心思想是迭代地使用其邻居节点的嵌入来更新自己的嵌入。 在这里,我们扩展了典型的 GCN,用于处理 Gemini-U 和 Gemini-I。 关键问题是在聚合来自邻居的信息时有效地处理边缘嵌入。
这里聚合函数是一个注意层,它结合了边缘嵌入和节点嵌入:
当我们计算注意权重时,我们不仅需要关于邻居节点的信息,还需要关于边缘的信息。因此边向量通过如下公式得到:
基于注意力机制的聚合器表示为:
聚合后,我们通过以下卷积函数将邻居信息传递给自节点:
模型训练算法:
为例减小计算的复杂度,作者有提出了一种称为Gemini-Collaboration的迭代训练方法。
前四个数据集是从滴滴九星的以下推荐场景中提取出来的,如图3所示:积分商城中的产品推荐(滴滴产品),滴滴九珠app中的内容推荐(滴滴内容),滴滴九星FM中的音乐推荐(滴滴音乐)和滴滴九星app中的优惠券推荐(滴滴优惠券)。滴滴产品、滴滴内容和滴滴音乐都是为数千万司机服务的推荐场景,滴滴优惠券是为数亿乘客服务的推荐场景。
我们分别提取了12天的在线日志,前11天用于训练集,第12天用于测试集。具体来说,滴滴产品数据集有8976117条交互记录,滴滴内容数据集有7934319条交互记录,滴滴音乐数据集有3321930条交互记录,滴滴优惠券数据集有826658条交互记录。最后一个数据集是一个公共数据MovieLens,它是从电影推荐场景中提取的,大约有2006859条记录。
图5显示Gemini-Collaboration得到了更好的表现。原因是,在使用Gemini-Collaboration训练模型时,我们训练h 先收敛后训练h 每次迭代收敛。它类似于GAN中的序列鉴别器和发生器。相反,Gemini联合训练Gemini-U和Gemini-I,这意味着网络节点的嵌入是在未训练好的属性节点嵌入的基础上更新的。此外,图5还表明Gemini-Collaboration能够大大降低实际训练过程中的时间复杂度
Alibaba 召回场景下的多兴趣向量召回
我们为顺序推荐提出了一种新的可控多兴趣框架,称为 ComiRec。我们的多兴趣模块从用户行为序列中捕获多个兴趣,可用于从大规模项目池中检索候选项目。然后将这些项目送入聚合模块以获得整体推荐。聚合模块利用可控因素来平衡推荐的准确性和多样性。
我们使用动态路由方法或自我注意方法的框架分别命名为 ComiRec-DR 或 ComiRec-SA。
用户序列的item embeddings可以看作是初级胶囊,多个用户兴趣可以看作兴趣胶囊。(胶囊是一组神经元,其活动向量表示特定类型实体的实例化参数。胶囊的输出向量的长度表示胶囊所代表的实体在当前输入中的概率。)
设ei为初级胶囊,则高级兴趣胶囊sj的计算方式为如下。
我们首先计算预测向量为:
胶囊 j 的总输入是所有预测向量的加权和:
其中 c i j c_{ij} cij 是由迭代动态路由过程所确定的耦合系数。 胶囊 i i i 与下一层所有胶囊之间的耦合系数之和应为 1。我们使用“routing softmax”来计算耦合系数:
提出了一种非线性“挤压”函数来确保短向量收缩到几乎为零的长度,将长向量收缩到略低于 1 的长度:
然后将用户 u 的输出兴趣胶囊形成为矩阵 Vu = [v1, …, vK ] ∈ Rd×K,用于下游任务。
在通过多兴趣提取模块计算用户行为的兴趣嵌入后,我们使用 argmax 算子为目标商品 i 选择相应的用户嵌入向量:
给定一个带有用户嵌入 v u _u u 和项目嵌入 e i e_i ei 的训练样本 (u,i),我们可以计算用户 u 与项目 i 交互的可能性为:
目标函数:(使用采样的 softmax 技术)
对于在线服务,我们使用我们的多兴趣提取模块来计算每个用户的多个兴趣。 用户的每个兴趣向量都可以通过最近的邻居库(Faiss)从大规模项目池中独立检索前 N 个项目。 由多个兴趣检索的项目被送入聚合模块以确定整体项目候选。 最后,将向用户推荐排名分数较高的项目。
作用:将这些来自不同兴趣的item聚合起来,得到整体的top-N个item。
根据项目与用户兴趣的内部生产接近度合并和过滤项目:
这是聚合过程最大化推荐准确度的有效方法。 然而,这并不完全是关于当前推荐系统的准确性。 人们更有可能被推荐新的或多样化的东西。我们的框架使用一个可控的程序来解决这个问题。 我们使用以下值函数 Q(u,S) 通过可控因子 λ ≥ 0 来平衡推荐的准确性和多样性:
对于最准确的情况,即 λ = 0,我们只使用上述简单的方法来获得整体项。 对于最多样化的情况,即 λ = ∞,可控模块为用户找到最多样化的项目。我们提出了一个贪心推理算法来近似地最大化Algorithm 2中列出的值函数Q(u,S)
通过我们的模型,我们从用户的点击序列生成了四个兴趣嵌入。我们发现用户的四大兴趣是糖果、礼品盒、手机壳和配件。我们按点击顺序报告与四种兴趣对应的项目。右边部分显示了通过兴趣嵌入从工业项目池中检索到的项目
(Alibaba) 通过自监督的方法解开序列中的多个意图
提出了一种基于潜在自监督和意图解开的seq2seq训练策略。具体来说,我们在潜在空间中执行自我监督,即将未来序列的表示作为一个整体重建,而不是单独重建未来序列中的项目。我们还解开任何给定行为序列背后的意图,并仅使用涉及共享意图的子序列对构建 seq2seq 训练样本
根据x ( u ) ^{(u)} (u),从M个候选商品中预测用户下一次最可能点击的商品
单独的 SASRec 编码器捕捉多个意图的能力是有限的,然而SASRec 的多头版本为相同的输入序列输出多个向量表示,与单头实现相比似乎没有明显的优势。 根据经验,单头 SASRec 和多头 SASRec 都倾向于推荐与输入序列中最近一次点击相同类别的项目,即使用户之前点击过其他类别的项目。因此,我们在这里提出了一个意图解开层,将其附加在单头 SASRec 编码器之后,以便重用 SASRec 的表达能力。
意图解开层首先根据意图与一组意图原型的距离对意图进行聚类。
(这里代码中用的是余弦距离而非点击,之前的工作 [38] 发现,在模式崩溃(即模型忽略大多数原型的退化情况)方面,余弦比点积更不脆弱。)
上面描述的注意力权重 | 衡量位置 的主要意图与第 潜在类别相关的可能性。 我们现在引入另一个注意力权重 来衡量位置 的主要意图对于预测用户未来意图的重要性的可能性:
我们现在可以根据 | 和 汇总在所有位置收集的意图。 编码器的 输出计算如下:
我们的 seq2seq loss 的目的是补充而不是替代传统的 seq2item loss。 换句话说,在使用小批量梯度下降处理每个小批量 B 时,我们最小化了 seq2item 损失和 seq2seq 损失。
对于训练集中的每条样例 { ( u , t ) : 1 ⩽ u ⩽ N , 1 ⩽ t ⩽ T u − 1 } \{(u,t): 1 \leqslant u \leqslant N, 1 \leqslant t \leqslant T_u-1\} {(u,t):1⩽u⩽N,1⩽t⩽Tu−1},都包括来历史序列x 1 : t u ^{u}_{1:t} 1:tu和对应的未来序列x t + 1 : T u u ^{u}_{t+1:T_u} t+1:Tuu。
Alibaba 在线响应速度要求及存储空间限制下的长序列用户行为建模
点击率 (CTR) 预测对于推荐系统和在线广告等工业应用至关重要,将这些复杂的深度CTR模型部署到在线服务系统中进行实时推理,需要付出巨大的努力,面对海量的流量请求。当涉及到长序列用户行为数据时,事情变得更加困难,因为系统延迟和存储成本随着用户行为序列的长度近似线性增加。
RTP系统的结构如下,
左:(上一版本)用户行为特征被提取到预测服务器并在收到流量请求时参与实时推理的计算; 右:(与流量请求解耦,实时用户行为事件在 UIC 服务器中单独执行)
使用长序列用户行为数据服务的挑战:
阿里巴巴广告系统中,在线显示的用户行为序列的平均长度和相应的CTR模型性能曲线如下:
由上图可看出,解决长序列用户行为建模的挑战是值得的。在本文中,我们直接面对长序列用户行为建模的挑战,并介绍了我们的动手实践与机器学习算法和在线服务系统的协同设计,用于 CTR 预测任务。
现有的深度CTR模型:
(1)基于池化的架构将用户的历史行为视为独立的信号,并应用 sum/max/attention 等池化操作来总结用户兴趣表示。
(2)顺序建模架构 ,它将用户行为视为顺序信号,并应用 LSTM/GRU 操作进行用户兴趣汇总。
(1)从服务系统的角度来看,我们通过设计一个名为 UIC(用户兴趣中心)的单独模块,将用户兴趣建模中最消耗资源的部分与整个模型分离。 UIC 为每个用户维护最新的兴趣状态,其更新取决于实时用户行为触发事件,而不是流量请求。因此,UIC 对于实时 CTR 预测是无延迟的。
(2)从机器学习算法的角度来看,我们提出了一种名为 MIMN(多通道用户兴趣记忆网络)的新型基于内存的架构,以从长序列行为数据中捕获用户兴趣,实现优于最先进模型的性能. MIMN 是通过 UIC 模块以增量方式实现的。
这是第一个能够处理长度高达数千的长序列用户行为数据的工业解决方案之一。目前已部署在阿里巴巴的展示广告系统中。
用一个memery network(Mt,由m个内存槽组成)来捕捉和存储序列数据中的信息,具有内存读和内存写两个基本操作。
问题: memery利用率低
原因: 由于热点项目容易出现在用户行为数据序列中,并主导内存更新,使得内存使用效率低下
解决办法:
规范不同内存槽间写入权重的差异,推动内存利用率不平衡。
第 t步每个内存槽的累积利用率gt:
re-balanced后的写权重:
通过正则化损失学习的参数矩阵Wg:
L r e g L_reg Lreg有助于减少不同内存插槽之间更新权重的差异。 所有 m 个槽的更新率趋于均匀。 这样,所有内存插槽的利用率都得到了提高,达到了平衡。 利用率正则化可以帮助记忆张量存储来自源行为数据的更多信息。
NTM 中的内存旨在尽可能多地存储来自源数据的原始信息。 美中不足的是,它可能会错过捕获一些高阶信息,例如每个兴趣部分的演变过程。 为了进一步增强用户兴趣提取能力,MIMN 设计了一个记忆感应单元(MIU)。
MIU还包含一个内部存储器S( internal memery),槽数为m,与NTM相同。 这里我们将每个内存槽称为用户兴趣通道。
step1: 根据memery read的权重向量wr(公式一得到),选择k个用户兴趣通道(topk)
step2: 结合内存槽Mt,t时刻的行为向量et,更新内部存储器的通道i.
MIU 从原始行为输入和 NTM 模块中记忆的信息中捕获信息。 这是一个归纳过程。 多通道内存的GRU参数共享,不增加参数量。
Yahoo 时间感知序列自动编码器,生成无缝适用于不同任务的嵌入表示
现在的应用服务依赖于需要投入大量精力的专用特征工程,通常忽略了在线用户行为的时变特性。为了减轻任务驱动的特真工程的负担,作者提出一种新的时间感知序列自动编码器,学校用户的保时向量表示,旨在生成无缝适用于不同任务的嵌入表示。
(TASA被集成到管道中,设计用于提供具有时间意识的用户嵌入服务,该服务目前作为一种内部工具部署,公司的几个团队正在利用它作为附加用户功能的来源,主要用于离线实验。)
\quad \quad \quad \quad \quad \quad \quad \quad t L + 1 t_{L+1} tL+1被设置为等于最近活动 a L a_L aL的时间戳,其他的时间戳都是正常的
输入活动序列(加令牌 a E O S a_{EOS} aEOS):
相应的活动嵌入序列:(随即初始化)
为了捕捉连续活动之间的不规则时间间隔,为活动aj创建了一个附加特征(tj是aj的时间戳):
得到停止特征(随着活动时间戳的线性增加,一个活动越接近序列中的最新时间戳,其停止特征值就越接近1):
除此以外,每个活动aj映射到一对潜在参数θj和μj。θj用于模拟活动对序列嵌入的影响。另一方面,μj和τj模拟了活动发生次数对序列嵌入的影响。为此,将每个aj的时间分数定义为:
其中,θj用于测量aj的初始影响。μj作为基于aj的“最近性”的影响变化,即aj效应随时间变化的程度取决于μj的大小。
最后,使用时间分数来衡量活动嵌入:
利用长-短期记忆(LSTM)网络对活动嵌入序列进行进一步编码:(其中hj最初使用正交初始化生成,而Cj初始化为均匀和正交随机值的混合。)
给定一个有上一阶段得到的序列嵌入 h = h L + 1 h=h_{L+1} h=hL+1,TASA的译码器组件试图从 h h h重构输入序列。
首先,在原始序列的开始处追加开始标记 a s t a r t a_{start} astart:(加令牌 a s t a r t a_{start} astart)
相应地,取 τ 0 \tau_0 τ0=0作为 a 0 a_0 a0的停止特征,得到:
通过一个LSTM:
重构问题被视为一个多类分类问题,通过将从解码器输出的hˇj传递到一个全连接层来预测 a j + 1 a_{j+1} aj+1(来自原始序列):
然后,来自完全连接层的输出通过softmax激活函数来计算每个活动的概率:(在资源有限或需要更有效的模型训练的情况下,我们建议通过使用候选抽样对抽样活动的子集进行计算来近似公式12)
TASA在服务系统中使用,该系统旨在将时间感知(用户)嵌入作为服务提供。一般来说,服务将序列集合作为输入,并定期生成序列及其组成元素的时间感知嵌入。尽管该服务显然适用于任何类型的序列数据,但在本文中,它是从嵌入用户活动序列(即用户轨迹)的角度来描述的。服务系统管道的阶段描述如下:
Alibaba 是阿里的一篇将“目标蒸馏-logits方法“应用到推荐系统领域的论文。
工业级推荐系统通常是一个级联学习框架,以淘宝的推荐框架为例。
在粗排CTR预估阶段,由于要在毫秒内给成千上万的候选物品打分,因此模型的复杂度受到了很大的限制,工业界传统的做法是使用内积模型,把用户侧和物品侧作为双塔,在请求时,把用户侧的向量和候选物品向量进行内积运算,从而对物品池做粗筛。一些交叉特征(如用户在过去2小时内在待预估商品类目下的点击次数、用户过去2小时内在待预估商品所在店铺中的点击次数等)对粗排效果有明显的提升,由于计算复杂度和线上响应速度的要求,这些交叉特征对于粗排阶段的模型来说,通常在线上无法应用,我们就称它们为粗排CTR预估中的Privileged Features。
在精排阶段,我们不仅要预估CTR,还要预估CVR,即用户点击跳转到商品页后购买该商品的概率。在电商领域的推荐,主要目标是最大化GMV,即 GMV = CTR * CVR * Price 。一旦预估了所有商品的CTR和CVR,我们就可以根据预期的GMV对它们进行排名,使得GMV最大化。
估计转换率(CVR)时,即用户单击项目时购买该项目的概率,项目详细页面上的停留时间等功能是有用的。然而,CVR预测应该在点击发生之前进行在线排名。因此,我们无法在服务期间获得此类事后特征。所以对于CVR预估来说,用户在点击后进入到商品页的一些特征(比如停留时长、是否查看评论、是否与商家沟通等)同样是Privileged Features。
使用这些Privileged Features,可以提升模型的预测精度。因此本论文希望借鉴模型蒸馏的思想,让粗排阶段的CTR模型或者是精排阶段的CVR模型,都能够学习到一些Privileged Features的信息。
为了更优雅地利用优势特征,本论文提出优势特征蒸馏(Privileged Features Distillation,简称PFD)。在离线环境下,我们会同时训练两个模型:一个学生模型以及一个教师模型。其中学生模型和原始模型完全相同,而教师模型额外利用了优势特征, 其准确率也因此更高。 通过将教师模型蒸馏出的知识(Knowledge,论文中特指教师模型中最后一层的输出)传递给学生模型,可以辅助其训练并进一步提升准确率。在线上服务时,我们只抽取学生模型进行部署,因为输入不依赖于优势特征,离线、在线的一致性得以保证。在PFD中,所有的优势特征都被统一到教师模型作为输入,加入更多的优势特征往往能带来模型更高的准确度。
与使用多任务学习(Multi-Task Learning,简称MTL)来预测优势特征的方式相比,在MTL中预测更多的优势特征反而可能损害原始模型,而PFD只引入额外一项蒸馏误差也更容易与原始损失函数平衡。
模型蒸馏:教师和学生处理相同的输入。而且老师使用的模型比学生的容量更大。例如,教师可以使用更深的网络来指导较浅的学生
优势特征蒸馏:教师和学生使用相同的模型,但输入不同。
尽管信息丰富,但本文中的特权特性仅部分描述了用户的偏好。使用这些特征的性能甚至可能不如使用常规特征的性能。此外,基于特权特征的预测有时会产生误导。例如,客户通常需要更多的时间来决定昂贵的商品,而这些商品的转化率相当低。在进行CVR估计时,LUPI的教师依赖于特权特征(如驻留时间)进行预测,但不考虑常规特征(如项目价格),这可能导致对昂贵项目的假阳性预测。为了缓解这种情况,我们还向教师模型添加了常规特征。
我们的应用程序中,单独训练教师模型需要很长时间。因此,按式异步训练方式是不现实的。我们使用同步训练的方式。
虽然可以节省时间,但同步训练可能不稳定。在教师培训不到位的早期阶段,蒸馏损失Ld可能会分散学生的注意力,延缓培训。在这里,我们通过采用一个热身方案来缓解它。我们在早期阶段将等式(5)的λ设置为0,然后将其固定为预定义值,交换步骤为超参数。虽然可以节省时间,但同步训练可能不稳定。在教师培训不到位的早期阶段,蒸馏损失可能会分散学生的注意力,延缓培训。在这里,我们通过采用一个热身方案来缓解它。我们在早期阶段将等式(5)的λ设置为0,然后将其固定为预定义值,swapping step k为超参数。
我们一起训练老师和学生。参数数量和计算量大致相同。因此,使用PFD进行培训可能比单独对学生进行培训慢得多,这在行业中是不实际的。特别是对于实时性要求很高的在线学习,采用蒸馏法会增加很多负担。在这里,我们通过在教师和学生中共享所有共同的输入组件来缓解这种情况。由于所有特性的嵌入占用了服务器3中的大部分存储空间,通信量几乎减少了一半。 除此以外,还可以通过共享处理用户点击/购买行为的组件来减少计算,这是众所周知的代价高昂的。如下面的实验所验证的,我们可以通过共享来获得甚至更好的性能。此外,与单独训练学生相比,我们只增加了一点额外的时间,这使得PFD可用于在线学习。
PFD从特权特性中提取知识。相比之下,MD从更复杂的教师模型中提取知识。这两种蒸馏技术是互补的。一个自然的延伸就是把它们结合起来,形成一个更准确的老师来指导学生。
这里的教师模型与细粒度排序时用于CTR预测的模型相同。该任务中的PFD+MD可以看作是从精排中提取知识来提高粗粒度排序。
不同方式训练PFD+MD对CTR第1天数据集的影响。Ind&Async表示教师和学生使用独立的输入组件进行异步训练。Share&Sync表示教师和学生使用共享的公共输入组件进行同步训练。上标∗ 表示除用户id外,所有公共输入组件都是共享的。我们还在第四列中以小时为单位记录挂钟时间: