【下】王树森《小红书推荐系统公开课》- 课程笔记(特征交叉、行为序列、重排/推荐系统多样性、物品冷启动、涨指标的方法)

写在前面

本文为王树森老师《小红书推荐系统公开课》的课程笔记

由于篇幅较长,分为【上】【下】两篇文章来记录。其中【上】包括推荐系统基础、召回、排序,文章链接:【上】王树森《小红书推荐系统公开课》- 课程笔记(推荐系统基础、召回、排序)

【下】包括特征交叉、行为序列、重排/推荐系统多样性、物品冷启动、涨指标的方法,内容导航如下: 


 (四)特征交叉

特征交叉在召回和排序中都会用到。在推荐系统的应用中,特征交叉很有必要,可以让模型的预测更准确

1、Factorized Machine(FM)因子分解机

线性模型

  • b:偏移项,bias/intercept
  • wi:每个特征的权重
  • p:对目标的预估(如果是二分类,可以用sigmoid激活函数)

d个特征之间只有相加、没有相乘,也就是说特征之间没有交叉

二阶交叉特征

  • xixj是两个特征的交叉,uij是交叉特征的权重
  • 大多数参数是模型交叉特征的权重u。如果d很大,参数数量太大,计算代价大,且容易出现overfitting

用特征交叉的话,两个特征不仅能相加,还能相乘,这样可以提升模型的表达能力

FM

上面提到,如果d很大,参数数量太大,计算代价大,容易出现overfitting。那如何减少参数数量?

  • 重点关注交叉特征的权重uij

U矩阵有d行d列(d是参数数量),是个对称矩阵,可以对其做低秩近似: 

  • k << d,k是个超参数,由我们自己设置。k越大,矩阵V * V^T 就越接近矩阵U
  • 此时 uij 就可以近似为 vi 和 vj 的内积

由此就得到了FM模型:

FM优点:

  • FM是线性模型的替代品,能用线性回归、逻辑回归的场景,都可以用FM(FM本质上就是在线性模型后面加了交叉项
  • FM使用二阶交叉特征,表达能力比线性模型更强
  • FM参数数量更少,二阶交叉权重的数量由 O(d^2) -> O(kd),其中 k<<d,d是特征数量。使得推理的计算量更小,且不容易出现过拟合

Steffen Rendle. Factorization machines. In ICDM, 2010.

以前的应用:用逻辑回归预估点击率,在逻辑回归中用FM做特征交叉,在推荐系统中效果很好

2、DCN(深度交叉网络)

用来代替简单的全连接网络,召回和排序中都可以用

回顾召回、排序模型

召回的双塔模型(是一种框架,而不是具体的神经网络)中,用户塔、物品塔可以用任意的神经网络结构,最简单的就是全连接神经网络,可以换为深度交叉网络DCN,效果更好

多目标排序模型中,输入是用户、物品、统计、场景等特征,输出是对点击率、点赞率等指标的预估。中间的神经网络负责对特征做变换,输出一个特征向量,这个神经网络被所有任务共享,所以叫做shared bottom。它的网络结构可以任意,最简单的实现就是用多个全连接层,如果用更好的神经网络结构如DCN,模型预估的准确性会更高

排序用的MMOE模型,3个专家神经网络(第1号~第3号),用途是把各种输入特征(用户、物品、统计、场景等特征)拼接后映射到新的特征向量,用于顶层的预估任务。这3个专家神经网络也可以用任意的结构,包括全连接网络、深度交叉网络

交叉层(Cross Layer)

DCN的基本组成单元。每个交叉层的输入、输出都是向量,且形状相同

x_0为输入,经过 i层 后神经网络的输出为x_i,下面详细讲解第i个交叉层的结构

  • Skip Connection(把输入和输出相加)是深度学习中的一种常用技巧,可以防止梯度消失

每一步拆解:

  • 第i个交叉层的输入:x_0、x_i。其中x_0是整个神经网络最底层的输入,x_i是神经网络第i层的输入

  • 全连接层输出是个向量,跟输入的 x_i向量 大小一样
  • 参数全在全连接层里,即W和b,需要在训练过程中用梯度去更新;其余操作为向量哈达玛积和向量加法,都没有参数 

  • 哈达玛乘积(Hadamard Product):逐元素相乘,输入输出向量维度一致。因为是逐元素相乘,故要求输入维度一致

  • 第i个交叉层的输出:x_(i+1)

交叉网络(Cross Network)

x_0向量是交叉网络的输入

上面介绍的是Cross Network V2,对应paper:Ruoxi Wang et al. DCN V2: Improved Deep & Cross Network and Practical Lessons for Web-scale Learning to Rank Systems. In WWW, 2021.

老版本(原始版本)的Cross Network 现在已经没用了,对应paper(没必要看):Ruoxi Wang et al. Deep & Cross Network for Ad Click Predictions. In ADKDD, 2017.

深度交叉网络(Deep&Cross Network,DCN)

结合交叉网络和全连接网络,两个网络并联;再加上全连接层,即为DCN

3、LHUC(PPNet)

LHUC与交叉网络的想法类似,在工业界有效,但只能用于精排

标准的多目标排序模型 结构如下,中间的Shared Bottom被多个任务共享,Shared Bottom用全连接网络、深度交叉网络、LHUC都可以

in语音识别

LHUC 全称 Learning Hidden Unit Contributions,起源于语音识别:Pawel Swietojanski, Jinyu Li, & Steve Renals. Learning hidden unit contributions for unsupervised acoustic model adaptation. IEEE/ACM Transactions on Audio, Speech, and Language Processing, 2016.

  • 语音识别的输入是一段语音信号,用神经网络对输入的信号做变换,得到更有效的表征,然后识别出语音中的文字
  • 语音是人说的,不同人的声音会有所区别,所以最好加入一些个性化,即说话者的特征。最简单的特征就是说话者的ID,对其做Embedding

  • 上面输出的两个向量形状完全一致,这样才可以做哈达玛积(逐元素相乘),这样可以把语音信号的特征和说话者的特征相融合,语音信号有的特征被放大,有的特征被缩小,这样做到个性化 

一个简单的例子如下,LHUC重复了两个模块(做了两次哈达玛积),实践中想实现更深的网络也没有问题:

in推荐精排(PPNet)

快手将LHUC应用在推荐精排,称作PPNet:快手落地万亿参数推荐精排模型,2021

4、SENet & Bilinear交叉

这两种方法用在排序模型上都有收益

SENet

Jie Hu, Li Shen, and Gang Sun. Squeeze-and-Excitation Networks. In CVPR, 2018. 其提出是应用在CV(计算机视觉)问题上

把SENet用在推荐系统的一篇Paper:Tongwen Huang, Zhiqi Zhang, and Junlin Zhang. FiBiNET: Combining Feature Importance and Bilinear feature Interaction for Click-Through Rate Prediction. In RecSys, 2019.

这里只介绍SENet在推荐系统中的应用 

SENet怎样对这些特征做变换?

设一共有m个特征,每个特征都表示成一个k维向量,可以把所有特征表示成一个m*k的矩阵

  • 中间m维向量的作用就是对特征做加权,比如学出物品ID这个特征对任务的重要性不高,就对物品ID的Embedding降权

上面把m个离散特征都映射成k维向量,其实这m个向量的维度可以不同,不会影响SENet(对每个向量做AvgPooling得到一个m维向量,再用两个全连接层FC得到另一个m维向量,用来对一开始的m个向量做加权)。最终SENet输出右边的m个向量,跟左边的m个向量的形状完全相同

总结SENet:

  • SENet 对离散特征做 field-wise 加权
  • 什么是field? ⽤户ID Embedding 是64维向量,那么这64个元素算⼀个field,获得相同的权重
  • 如果有m个离散特征,即m个fields,那么SENet计算出的权重向量就是m维,用这个向量的元素给fields做加权。也就是说,SENet会根据所有特征,自动判断每个fields的特征重要性,重要field的权重高,不重要field的权重低

Field间特征交叉

把两个field做交叉,得到新的特征。比如说,把物品所在地点、用户所在地点这两个特征各自做embedding,然后把两个embedding向量做交叉。怎样交叉两个向量?

内积/哈达玛积

推荐系统中m(离散特征)的数量不是很大,量级也就几十

  • 左侧内积,m^2个实数,可以接受
  • 右侧哈达玛积,m^2个向量,不能接受。故一般人工选择一些pair交叉,不能对所有m fields两两交叉

不论是内积or哈达玛积,都要求每个特征的embedding向量形状一样,都是k维向量;若形状不同,无法计算内积or哈达玛积

Bilinear Cross

包含内积和哈达玛积两种方式

方式1:内积

  • x_i和x_j是两个特征的Embedding,它们的形状可以相同也可以不同
  • f_ij是两个field的交叉。若有m个field,则会产生m^2个交叉特征(实数)
  • W_ij为参数矩阵,若有m个field,则会产生 m^2 / 2 个参数矩阵。假如每个参数矩阵大小都是64*64,有1000个这样的参数矩阵,那么Bilinear Cross的参数量是400w
  • 想要减小参数数量,需要人工指定某些相关且重要的特征做交叉,而不能让所有特征两两交叉

方式2:哈达玛积 

  • 先把参数矩阵W_ij 和 特征向量x_j 相乘,得到一个向量;再求两个向量的哈达玛积(逐元素相乘)
  • 输出向量f_ij。若有m个field,会产生m^2个向量,对m^2个向量做concatenation,得到的向量维度太大,且其中大多数都是无意义的特征
  • 因此在实践中,最好人工指定一部分特征做交叉,而不是让所有m个特征两两交叉,这样既可以减少参数数量,也可以让concatenation之后的向量变小

【小结】

SENet对离散特征做field-wise加权,让重要的特征获得大权重,不重要的特征获得小权重

Field间特征交叉,让两种特征的embedding向量做交叉,有3种方式:

  • 向量内积
  • 哈达玛积
  • Bilinear Cross

结合SENet 和 Bilinear Cross,就得到了FiBiNet

FiBiNet = SENet + Bilinear Cross

Tongwen Huang, Zhiqi Zhang, and Junlin Zhang. FiBiNET: Combining Feature Importance and Bilinear feature Interaction for Click-Through Rate Prediction. In RecSys, 2019.

FiBiNet用SENet加权和Bilinear Cross,用在精排模型上有收益

  • 离散特征:如用户ID、物品ID、物品类目,等等
  • 之前就是把离散特征embedding(用一个向量表示一个特征)concat后的向量,跟连续特征拼起来,作为排序模型的输入
  • FiBiNet还做了其他的特征变换,见红框部分
    • 对这些embedding向量做Bilinear Cross,得到很多交叉特征,拼接成一个向量
    • 用SENet对这些embedding向量做加权,得到同样大小的向量;再对这些向量做Bilinear Cross,得到很多交叉特征,拼接成一个向量(小红书在实践中没做这一步)
  • 把FiBiNet对离散特征变换之后得到的特征向量、变换后的连续特征一起输入上层的神经网络

(五)用户行为序列(last-n)

把用户行为序列叫做 last-n,指用户最近交互过的n个物品的ID。用户的 last-n行为序列 可以反映出用户对什么样的物品感兴趣

召回的双塔模型、粗排的三塔模型、精排模型都可以用 last-n特征(十分有效,用在召回和排序模型中,所有指标都会大涨)

1、用户历史行为序列建模

多目标排序模型:模型的任务是预测点击率、点赞率等指标,根据指标对物品做排序,选出用户最感兴趣的物品

重点关注用户特征中的 last-n行为序列

取平均是早期的做法,现在也很常用;效果更好的做法是Attention,但计算量太大

用户lastN序列特征

Covington, Adams, and Sargin. Deep neural networks for YouTube recommendations. In ACM Conference on Recommender Systems, 2016.

LastN:用户最近n次交互(点击、点赞、收藏、转发等行为)的物品ID

  • 对LastN物品ID做embedding,得到n个向量
  • 把n个向量取平均,作为用户的一种特征
  • 注意,用户还有其他的很多特征,比如用户ID、离散特征、连续特征等,把所有这些特征拼起来,作为用户特征输入神经网络

适用于召回双塔模型、粗排三塔模型、精排模型

小红书的实践

小红书的召回、粗精排都用到了LastN行为序列

  • 同一种行为的向量取平均,得到点击、点赞、收藏等行为的LastN向量表征
  • 把这些向量拼起来,作为一种用户特征
  • 实践中不止用物品ID,还用物品的其他特征,如物品类目。把物品ID Embedding和物品其他特征Embedding拼在一起

2、DIN模型(注意力机制)

DIN模型是对 LastN序列建模 的一种方法,效果优于简单的平均。用于精排

如上图,取平均最简单,但效果不是最好。DIN是一种更好的LastN序列建模方法,由阿里于2018年提出

Zhou et al. Deep interest network for click-through rate prediction. In KDD, 2018.

  • DIN用加权平均代替平均,即注意力机制(Attention)
  • 权重指候选物品与用户LastN物品的相似度(实数α)。哪个LastN物品与候选物品越相似,它的权重就越高
    • 啥是候选物品?比如粗排选出了500个物品,它们就是精排的候选物品。精排模型要给每个候选物品打分,分数表示用户对候选物品的兴趣,最后根据分数的高低给这500个候选物品排序,保留分数最高的几十个展示给用户
  • 计算相似度的方法有很多,比如内积、cos

 【DIN模型-总结】

  • 对于某候选物品,计算它与用户LastN物品的相似度,得到 α_1 ~ α_n
  • 以相似度为权重,求用户LastN物品向量的加权和,结果是一个向量
  • 把得到的向量作为一种用户特征,输入排序模型,预估 (用户, 候选物品) 的点击率、点赞率等指标,它们会决定候选物品的排序
  • 本质是注意力机制

本质:注意力机制

简单平均 vs 注意力机制

简单平均注意力机制 都适用于精排模型

简单平均还适用于召回的双塔模型、粗排的三塔模型

  • 简单平均只需要用到LastN,属于用户自身的特征,跟候选物品无关
  • 把LastN向量的平均作为用户塔的输入

注意力机制不适用于双塔模型、三塔模型

  • 注意力机制需要用到 LastN + 候选物品
  • 用户塔看不到候选物品(比如双塔召回时,有上亿候选物品,用户只能看到用户特征,看不到候选物品特征),故不能把注意力机制用在用户塔

3、SIM模型(长序列建模)

保留用户长期兴趣

回顾DIN

Zhou et al. Deep interest network for click-through rate prediction. In KDD, 2018.

  • 计算用户 LastN向量 的加权平均
  • 权重是候选物品与每个LastN物品的相似度

DIN模型的缺点:

  • 注意力层的计算量 ∝ n(用户行为序列的长度) 
  • 只能记录最近几百个物品(一般一两百个物品),否则计算量太大
  • 缺点:关注短期兴趣,遗忘长期兴趣

如何改进DIN?

  • 目标:保留用户长期行为序列(n很大),而且计算量不会过大
  • 改进DIN:
    • DIN对LastN向量做加权平均,权重是相似度
    • 如果某LastN物品与候选物品差异很大,则权重接近0
    • 如果把不相关的物品从LastN物品中排除掉,几乎不会影响DIN加权平均的结果
    • 只把相关物品输入注意力
王树森的Q学习是一种强化学习算法,广泛应用于机器学习领域。 Q学习是通过不断迭代更新一个称为Q值的表格来实现的。这个表格记录了每个状态和动作组合的Q值,表示在某个状态下,采取某个动作所获得的预期回报。通过学习更新Q值,智能体能够学会在不同的情境下选择最优的动作。 王树森的Q学习算法主要包含以下几个步骤: 1. 初始化Q值表格,设置初始状态和动作; 2. 在每个时间步骤中,智能体观察当前状态和可用的动作,并根据一种策略(如epsilon-greedy)选择一个动作; 3. 执行所选择的动作,观察新的状态和获得的奖励; 4. 更新Q值表格,使用Q-learning更新公式:Q(s, a) = (1 - α) * Q(s, a) + α * (r + γ * max(Q(s', a'))),其中α是学习率,γ是折扣因子,r是获得的奖励,s'是新状态; 5. 重复上述步骤,直到达到指定的终止条件(如达到最大迭代次数或Q值收敛)。 王树森的Q学习算法具有以下优点: 1. 简单而高效:Q学习算法易于理解和实现,可以在很多问题上取得良好的效果; 2. 模型无关性:Q学习不需要事先了解环境的动力学模型,只需要通过与环境的交互进行学习即可; 3. 可扩展性:Q学习可以应用于离散或连续动作空间的问题。 然而,王树森的Q学习算法也存在一些限制和挑战: 1. 状态空间和动作空间的维度较高时,Q值表格会变得非常庞大,导致算法的计算和存储开销很大; 2. Q学习对环境中随机性的处理不够灵活,可能会收敛到局部最优解; 3. Q学习算法通常需要大量的训练数据和迭代次数才能获得较好的结果。 综上所述,王树森的Q学习是一种经典的强化学习算法,通过不断更新Q值表格来实现智能体的学习和决策。虽然存在一些限制,但Q学习在许多问题上取得了良好的效果,是机器学习领域中的一项重要研究内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cheer-ego

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值