【学习笔记】推荐系统 (7.特征交叉:FM、DCN、LHUC、SENet、Bilinear Cross、FiBiNet)

网课:王树森 - 推荐系统公开课

7.1 Factorized Machine (FM)

7.1.1 线性模型

  • 有 d d d个特征,记作 x = [ x 1 , ⋯   , x d ] x=[x_1,\cdots,x_d] x=[x1,⋯,xd];
  • 线性模型: p = b + ∑ i = 1 d w i x i p=b+\sum_{i=1}^d w_ix_i p=b+∑i=1dwixi;
  • 模型有 d + 1 d+1 d+1个参数;
  • 预测是特征的加权和(特征之间没有交叉)。

7.1.2 二阶交叉特征

  • 有 d d d个特征,记作 x = [ x 1 , ⋯   , x d ] x=[x_1,\cdots,x_d] x=[x1,⋯,xd];
  • 线性模型+二阶交叉特征: p = b + ∑ i = 1 d w i x i + ∑ i = 1 d ∑ j = i + 1 d u i j x i x j p=b+\sum_{i=1}^d w_ix_i+\sum_{i=1}^d\sum_{j=i+1}^d u_{ij}x_ix_j p=b+∑i=1dwixi+∑i=1d∑j=i+1duijxixj;
  • 模型有 O ( d 2 ) O(d^2) O(d2)个参数, d d d很大时,计算代价很大,容易出现过拟合。

    用矩阵 V V V近似矩阵 U U U: U = V V ⊤ U=VV^\top U=VV⊤,于是 u i j = v i ⊤ v j u_{ij}=v_i^\top v_j uij=vi⊤vj。
    于是得到Factorized Machine (FM):
    p = b + ∑ i = 1 d w i x i + ∑ i = 1 d ∑ j = i + 1 d ( v i ⊤ v j ) x i x j p=b+\sum_{i=1}^d w_ix_i+\sum_{i=1}^d\sum_{j=i+1}^d (v_i^\top v_j)x_ix_j p=b+i=1∑dwixi+i=1∑dj=i+1∑d(vi⊤vj)xixj
    FM中有 O ( k d ) O(kd) O(kd)个参数,k远小于d。

7.1.3 FM

  • FM是线性模型的替代品,能用线性回归、逻辑回归的场景,都可以用FM;
  • FM使用二阶交叉特征,表达能力比线性模型更强;
  • 通过做近似 u i j = v i ⊤ v j u_{ij}=v_i^\top v_j uij=vi⊤vj,FM把二阶交叉权重的数量从 O ( d 2 ) O(d^2) O(d2)降低到 O ( k d ) O(kd) O(kd)。

7.2 深度交叉网络 (DCN)

7.2.1 交叉层(Cross Layer)

交叉层可写作:
x i + 1 = x 0 ∘ ( W ⋅ x i + b ) + x i x_{i+1}=x_0\circ(W\cdot x_i+b)+x_i xi+1=x0∘(W⋅xi+b)+xi

7.2.2 交叉网络 (Cross Network)

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

7.3 LHUC

图中神经网络包含很多全连接层,最后一个全连接层的输出是Sigmoid×2

7.4 SENet

推荐系统会将上图中左边的属性通过Embedding嵌入成向量,用于后续排序。

SENet结构如下:

注:Embedding向量维度可以不同:

SENet的本质是对离散特征做field-wise加权,如果有 m m m个field(这里就是输入的离散特征数量),那么权重向量是 m m m维。

7.5 Bilinear Cross

7.5.1 特征交叉方法

由上图可知,哈达玛乘积产生 m 2 m^2 m2个向量,计算开销不被接受。

7.5.2 Bilinear Cross (内积形式)

其中 x i x_i xi和 x j x_j xj的形状可以不同。

如果有 m m m个fields,则 f f f有 m 2 m^2 m2个元素,有 m 2 / 2 m^2/2 m2/2个 W W W。

7.5.2 Bilinear Cross (哈达玛形式)

如果有 m m m个fields,则得到 m 2 m^2 m2个向量。

如果使用哈达玛形式的Bilinear Cross,则推荐选择一些field来做交叉,而不是全部fields。

7.6 FiBiNet

相关推荐
AOwhisky1 天前
Kubernetes 学习笔记:集群管理、命名空间与 Pod 基础
linux·运维·笔记·学习·云原生·kubernetes
光影少年1 天前
大屏页面,一次多个请求,请求加密导致 点击 全局时间选择器 时出现卡顿咋解决(面板收起会延迟1~2秒)
前端·javascript·vue.js·学习·前端框架·echarts·reactjs
sakiko_1 天前
UIKit学习笔记2-组件嵌套、滚动视图等
笔记·学习·objective-c·swift·uikit
知识分享小能手1 天前
R语言入门学习教程,从入门到精通,R语言类别比较数据可视化- 完整知识点与案例代码(4)
学习·信息可视化·r语言
蛋白界小百灵1 天前
纳米抗体技术全解析:从文库构建到亲和力成熟的关键策略
经验分享·科技·学习·健康医疗·业界资讯·卡梅德生物
我是发哥哈1 天前
主流AI框架生产环境性能对比:5大关键维度深度评测
大数据·人工智能·学习·机器学习·ai·chatgpt·ai-native
nashane1 天前
HarmonyOS 6学习:RCP远场通信流式返回实战——告别“一次性”数据阻塞
学习·华为·harmonyos
for_ever_love__1 天前
UI学习:UITableView的基本操作及折叠cell
学习·ui·ios
Alice-YUE1 天前
【JS高频八股】什么是闭包?
开发语言·javascript·笔记·学习
宵时待雨1 天前
linux笔记归纳3:linux开发工具
linux·运维·笔记