深度学习推荐系统——前深度学习时代

2023-05-16

深度学习推荐系统——前深度学习时代

  • 协同过滤
    • 相似度
    • UserCF
    • ItemCF
    • 矩阵分解
      • 矩阵分解的求解过程
      • 消除用户和物品打分的偏差
      • 矩阵分解的优缺点
  • 逻辑回归
  • 特征工程
    • POLY2模型
    • FM模型
    • FFM模型
  • GDBT+LR
  • LS-PLM(Large Scale Piece-wise Linear Mode)
  • 总结

协同过滤

相似度

  • 余弦相似度
    sim ⁡ ( i , j ) = cos ⁡ ( i , j ) = i ⋅ j ∥ i ∥ ⋅ ∥ j ∥ \operatorname { sim } ( \boldsymbol { i } , \boldsymbol { j } ) = \cos ( \boldsymbol { i } , \boldsymbol { j } ) = \frac { \boldsymbol { i } \cdot \boldsymbol { j } } { \| \boldsymbol { i } \| \cdot \| \boldsymbol { j } \| } sim(i,j)=cos(i,j)=ijij
  • 相关系数
    sim ⁡ ( i , j ) = ∑ p ϵ P ( R i , p − R ˉ i ) ( R j , p − R ˉ j ) ∑ p ϵ P ( R i , p − R ˉ i ) 2 ∑ p ϵ P ( R j , p − R ˉ j ) 2 \operatorname { sim } ( i , j ) = \frac { \sum _ { \mathrm { p } \epsilon P } \left( R _ { \mathrm { i } , \mathrm { p } } - \bar { R } _ { \mathrm { i } } \right) \left( R _ { \mathrm { j } , \mathrm { p } } - \bar { R } _ { \mathrm { j } } \right) } { \sqrt { \sum _ { \mathrm { p } \epsilon P } \left( R _ { \mathrm { i } , \mathrm { p } } - \bar { R } _ { \mathrm { i } } \right) ^ { 2 } } \sqrt { \sum _ { \mathrm { p } \epsilon P } \left( R _ { \mathrm { j } , \mathrm { p } } - \bar { R } _ { \mathrm { j } } \right) ^ { 2 } } } sim(i,j)=pϵP(Ri,pRˉi)2 pϵP(Rj,pRˉj)2 pϵP(Ri,pRˉi)(Rj,pRˉj)
    R i , p R _ { \mathrm { i } , \mathrm { p } } Ri,p代表用户i对物品p的评分。 R ˉ i \bar { R } _ { \mathrm { i } } Rˉi代表用户i对所有物品的平均评分,P代表所有物品的集合。

UserCF

根据共现矩阵获得Top n相似用户,根据下式计算每个商品的相似度:
R u , p = ∑ s ∈ S ( w u , s ⋅ R s , p ) ∑ s ϵ S w u , s R _ { \mathrm { u } , \mathrm { p } } = \frac { \sum _ { \mathrm { s } \in S } \left( w _ { \mathrm { u } , \mathrm { s } } \cdot R _ { \mathrm { s } , \mathrm { p } } \right) } { \sum _ { \mathrm { s } \epsilon S } w _ { \mathrm { u } , \mathrm { s } } } Ru,p=sϵSwu,ssS(wu,sRs,p)
其中,权重 w u , s w _ { \mathrm { u } , \mathrm { s } } wu,s是用户U和用户S的相似度, R s , p R _ { \mathrm { s } , \mathrm { p } } Rs,p是用户S对物品P的评分。

缺点
1、用户数往往远大于物品数,而 UserCF 需要维护用户相似度矩阵以便快速找出 Top n相似用户。用户数的增长会导致用户相似度矩阵的空间复杂度以 n 2 n^2 n2的速度快速增长。
2、用户的历史数据向量往往非常稀疏,对于只有几次购买或者点击行为的用户来说,找到相似用户的准确度是非常低的,这导致 UserCF 不适用于那些正反馈获取较困难的应用场景( 如酒店预定、大件商品购买等低频应用)。

ItemCF

根据共现矩阵获得Top n相似物品,根据下式计算当前商品和用户历史正反馈商品的相似度:
R u , p = ∑ h ∈ H ( w p , h ⋅ R u , h ) R _ { \mathrm { u } , \mathrm { p } } = \sum _ { \mathrm { h } \in H } \left( w _ { \mathrm { p } , \mathrm { h } } \cdot R _ { \mathrm { u } , \mathrm { h } } \right) Ru,p=hH(wp,hRu,h)

UserCF和ItemCF的应用场景
1、UserCF可以利用“朋友”来更新自己的推荐列表,适用于新闻推荐场景,发现热点,跟踪热点。
2、ItemCF更适用于兴趣变化较为稳定的应用。如影视推荐或者当前在寻找某一商品的电商场景,这时的兴趣点是比较稳定的。

矩阵分解

协同过滤泛化能力弱——无法将两个物品相似这一信息推广到其他物品相似性计算上,因此热门的物品具有很强的头部效应,容易跟大量物品产生相似性;而尾部的物品由于特征向量稀疏,很少与其他物品产生相似性,导致很少被推荐。
矩阵分解在协同过滤算法中“共现矩阵”的基础上,加人了隐向量的概念,加强了模型处理稀疏矩阵的能力。
用户和物品的隐向量是通过分解协同过滤生成的共现矩阵得到的,如下:
在这里插入图片描述
隐向量的维度k决定了隐向量的表达能力。k越小,隐向量包含的信息越少,模型的泛化程度越高;反之,k越大,隐向量的表达能力越强,泛化程度越低。同时,k的取值还与矩阵分解的求解复杂度直接相关。
基于用户矩阵U和物品矩阵V,用户u对物品i的预估评分如下式:
r ^ u i = q i T p u \hat { \boldsymbol { r } } _ { \mathrm { ui } } = \boldsymbol { q } _ { \mathrm { i } } ^ { \mathrm { T } } \boldsymbol { p } _ { \mathrm { u } } r^ui=qiTpu
其中, p u \boldsymbol { p } _ { \mathrm { u } } pu是U的对应行向量, q i T \boldsymbol { q } _ { \mathrm { i } } ^ { \mathrm { T } } qiT是V的对应列向量。

矩阵分解的求解过程

对矩阵分解的主要方法有三种:特征值分解、奇异值分解和梯度下降。
特征值分解只能作用于仿真,不适用。
奇异值分解可参考 知乎: 奇异值的物理意义 。但其存在两点缺陷:奇异值分解要求原始共现矩阵是稠密的;传统奇异值分解的计算复杂度达到了 O ( m n 2 ) O(mn^2) O(mn2)的级别。
因此,梯度下降成为了矩阵分解的主要方法。损失函数如下:
min ⁡ q ∗ , p ∗ ∑ ( u , i ) ∈ K ( r u i − q i T p u ) 2 \min _ { \boldsymbol { q } ^ { * } , \boldsymbol { p } ^ { * } } \sum _ { ( u , \mathrm { i } ) \in K } \left( \boldsymbol { r } _ { \mathrm { ui } } - \boldsymbol { q } _ { \mathrm { i } } ^ { \mathrm { T } } \boldsymbol { p } _ { \mathrm { u } } \right) ^ { 2 } q,pmin(u,i)K(ruiqiTpu)2

消除用户和物品打分的偏差

由于不同用户的打分体系不同,物品的衡量标准也有所区别,为了消除用户和物品打分的偏差,常用的做法是在矩阵分解时加入用户和物品的偏差向量:
r u i = μ + b i + b u + q i T p u \boldsymbol { r } _ { \mathrm { ui } } = \mu + b _ { \mathrm { i } } + b _ { \mathrm { u } } + \boldsymbol { q } _ { \mathrm { i } } ^ { \mathrm { T } } \boldsymbol { p } _ { \mathrm { u } } rui=μ+bi+bu+qiTpu
其中 μ \mu μ是全局偏差常数, b i b_i bi是物品偏差系数,可使用物品i收到的所有评分的均值, b u b_u bu是用户偏差系数,可使用用户u给出的所有评分的均值。
同时,梯度下降的损失函数加入正则化后更改成如下:
min ⁡ q ∗ , p ∗ , b ∗ ∑ ( u , i ) ∈ K ( r u i − μ − b u − b i − p u T q i ) 2 + λ ( ∥ p u ∥ 2 + ∥ q i ∥ 2 + b u 2 + b i 2 ) \min _ { \boldsymbol { q } ^ { * } , \boldsymbol { p } ^ { * } , \boldsymbol { b } ^ { * } } \sum _ { ( \mathrm { u } , \mathrm { i } ) \in K } \left( \boldsymbol { r } _ { \mathrm { ui } } - \mu - b _ { \mathrm { u } } - b _ { \mathrm { i } } - \boldsymbol { p } _ { \mathrm { u } } ^ { \mathrm { T } } \boldsymbol { q } _ { \mathrm { i } } \right) ^ { 2 } + \lambda \left( \left\| \boldsymbol { p } _ { \mathrm { u } } \right\| ^ { 2 } + \left\| \boldsymbol { q } _ { \mathrm { i } } \right\| ^ { 2 } + b _ { \mathrm { u } } ^ { 2 } + b _ { \mathrm { i } } ^ { 2 } \right) q,p,bmin(u,i)K(ruiμbubipuTqi)2+λ(pu2+qi2+bu2+bi2)

矩阵分解的优缺点

优点
1、泛化能力强
2、空间复杂度低:空间复杂度由 n 2 n^2 n2降低到 ( n + m ) ∗ k (n+m)*k (n+m)k
3、更好的扩展性和灵活性:和深度学习中的Embedding相似,便于与其他特征进行组合拼接,便于对接深度学习网络。

缺点
1、不方便加入用户、物品和上下文相关的特征。
2、在缺乏用户历史行为时,无法进行有效的推荐。

逻辑回归

优点
1、数学含以上的支撑:因变量服从伯努利分布,点击广告是一个经典的掷偏心硬币问题。因此,CTR模型的因变量显然应该服从伯努利分布。与之相比,线性回归因变量服从高斯分布。
2、可解释性强:特征加权和+sigmoid函数,表示不同特征对CTR的影响,通过sigmoid函数映射到0~1区间。
3、工程化的需要:易于并行化、模型简单、训练开销小。

缺点
表达能力不强、无法进行特征交叉。

辛普森悖论:在分组比较重都占优势的一方,在总评中有时反而时失势的一方。
逻辑回归只对单一特征做简单加权,不具备进行特征交叉生成高维组合特征的能力,因此表达能力很弱,可能出现辛普森悖论的情况。

特征工程

POLY2模型

∅ POLY2 ⁡ ( w , x ) = ∑ j 1 = 1 n ∑ j 2 = j 1 + 1 n w h ( j 1 , j 2 ) x j 1 x j 2 \emptyset \operatorname { POLY2 } ( \boldsymbol { w } , \boldsymbol { x } ) = \sum _ { j _ { 1 } = 1 } ^ { n } \sum _ { j _ { 2 } = j _ { 1 } + 1 } ^ { n } w _ { h \left( j _ { 1 } , j _ { 2 } \right) } x _ { j _ { 1 } } x _ { j _ { 2 } } POLY2(w,x)=j1=1nj2=j1+1nwh(j1,j2)xj1xj2

缺点
1、互联网数据经常采用one-hot编码,致使特征向量极度稀疏。
2、权重参数的数量由 n n n直接上升到 n 2 n^2 n2,极大地增加了训练复杂度。

FM模型

∅ F M ( w , x ) = ∑ j 1 = 1 n ∑ j 2 = j 1 + 1 n ( w j 1 ⋅ w j 2 ) x j 1 x j 2 \emptyset \mathrm { FM } ( \boldsymbol { w } , \boldsymbol { x } ) = \sum _ { j _ { 1 } = 1 } ^ { n } \sum _ { j _ { 2 } = j _ { 1 } + 1 } ^ { n } \left( \boldsymbol{w} _ { j _ { 1 } } \cdot \boldsymbol { w } _ { j _ { 2 } } \right) x _ { j _ { 1 } } x _ { j _ { 2 } } FM(w,x)=j1=1nj2=j1+1n(wj1wj2)xj1xj2
主要区别是用两个向量的内积 ( w j 1 ⋅ w j 2 ) \left( \boldsymbol{w} _ { j _ { 1 } } \cdot \boldsymbol { w } _ { j _ { 2 } } \right) (wj1wj2)取代了单一的权重系数 w h ( j 1 , j 2 ) w _ { h \left( j _ { 1 } , j _ { 2 } \right)} wh(j1,j2)FM为每个特征学习了一个隐权重特征向量。

优点:
1、权重参数为 n k nk nk(k为因向量维度),极大地降低了训练开销。
2、隐向量的引入使FM能更好地解决数据稀疏性问题(利用其他数据来学习)。虽然丢失了某些特征的精确记忆能力,但是泛化能力得到提高。

FFM模型

∅ FFM ⁡ ( w , x ) = ∑ j 1 = 1 n ∑ j 2 = j 1 + 1 n ( w j 1 , f 2 ⋅ w j 2 , f 1 ) x j 1 x j 2 \emptyset \operatorname { FFM } ( \boldsymbol { w } , \boldsymbol { x } ) = \sum _ { j _ { 1 } = 1 } ^ { n } \sum _ { j _ { 2 } = j _ { 1 } + 1 } ^ { n } \left( \boldsymbol { w } _ { j _ { 1 } , f _ { 2 } } \cdot \boldsymbol { w } _ { j _ { 2 } , f _ { 1 } } \right) x _ { j _ { 1 } } x _ { j _ { 2 } } FFM(w,x)=j1=1nj2=j1+1n(wj1,f2wj2,f1)xj1xj2

优缺点:
需要学习 n n n个特征在 f f f个域上的 k k k维隐向量,参数数量共 n ⋅ k ⋅ f n·k·f nkf个。
引入特征域概念,模型表达能力更强。

GDBT+LR

用GDBT构建特征工程,用LR预估CTR,这两步是独立训练的。

优缺点
决策树的深度决定了特征交叉的阶数,但GDBT容易产生过拟合,以及GBDT的特征转换方式实际上丢失了大量特征的数值信息。
不必在特征工程上投入过多的人工筛选和模型设计的精力,实现真正的端到端的训练。

LS-PLM(Large Scale Piece-wise Linear Mode)

又被称为MLR(Mixed Logistic Regression)模型。
在逻辑回归的基础上加人聚类的思想,其灵感来自对广告推荐领域样本特点的观察。举例来说,如果 CTR 模型要预估的是女性受众点击女装广告的 CTR。那么显然,我们不希望把男性用户点击数码类产品的样本数据也考虑进来,因为这样的样本不仅与女性购买女装的广告场景毫无相关性,甚至会在模型训练过程中扰乱相关特征的权重。为了让 CTR 模型对不同用户群体、不同使用场景更有针对性,其采用的方法是先对全量样本进行聚类,再对每个分类施以逻辑回归模型进行 CTR 预估。公式如下:
f ( x ) = ∑ i = 1 m π i ( x ) ⋅ η i ( x ) = ∑ i = 1 m e μ i ⋅ x ∑ j = 1 m e μ j ⋅ x ⋅ 1 1 + e − w i ⋅ x f ( x ) = \sum _ { i = 1 } ^ { m } \pi _ { i } ( x ) \cdot \eta _ { i } ( x ) = \sum _ { i = 1 } ^ { m } \frac { \mathrm { e } ^ { \mu _ { i } \cdot x } } { \sum _ { j = 1 } ^ { m } \mathrm { e } ^ { \mu _ { j } \cdot x } } \cdot \frac { 1 } { 1 + \mathrm { e } ^ { - w _ { i } \cdot x } } f(x)=i=1mπi(x)ηi(x)=i=1mj=1meμjxeμix1+ewix1
首先用聚类函数 π \pi π对样本进行分类( 这 里 的 采 用 了 softmax 函数对样本进行多分类),再用 LR 模型计算样本在分片中具体的 CTR 然后将二者相乘后求和。

总结

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习推荐系统——前深度学习时代 的相关文章

随机推荐

  • 虚拟USB设备总结

    开发环境 xff1a windows 首先来总结最近研究的虚拟USB设备 xff0c 进而虚拟USB键盘成功了 xff0c 开心 xff01 得出了一个C S框架 xff0c 首先说一下客户端 客户端有两个部分 xff0c 用户空间工具和底
  • C#Winform:《DataGridViewComboBoxCell值无效》解决方案

    值无效 xff0c 可能是你下拉框选项 xff0c 没有这样的值 xff0c 而你却设置这个值 dataGridView1 Rows i Cells 1 Value 61 Hello World 解决方法就是在窗体的构造函数里添加如下代码
  • FFmpeg笔记

    1 下载 xff0c 配置 FFmpeg官网 xff1a https ffmpeg org 用的系统是Ubuntu18 04 所以直接apt get就可以了 sudo apt get install ffmpeg 2 简介 xff0c 上手
  • 《WPF中TextBox绑定Double类型数据,文本框不能输入小数点》解决方案

    在App cs文件里面 xff0c 重写OnStatup xff0c 添加下面一条语句即可 span class token keyword public span span class token keyword partial span
  • stm32 HAL库串口收发-中断接收DMA发送不定长数据

    使用的时候发现 xff1a 接收完一个字节立即用DMA的方式发送出去 xff0c 会出现数据的丢失 xff0c 如用串口调试助手发送1234 xff0c 返回的只有13 目前只能用缓存buf 43 协议结束 xff08 如0x0d 0x0a
  • headers Authorization

    var auth 61 96 host user host pass 96 const buf 61 Buffer from auth 39 ascii 39 strauth 61 buf toString 39 base64 39 con
  • 平衡车入门---MPU6050陀螺仪的使用

    平衡车入门 MPU6050陀螺仪的使用 一 MPU6050简介二 学习MPU6050的步骤三 I2C协议简介四 MPU6050硬件介绍五 MPU6050的几个重要寄存器六 原始数据的单位换算七 角度换算 滤波算法 一 MPU6050简介 M
  • C++ 为什么基类的析构函数要声明为虚函数

    1 为什么声明基类析构函数为虚函数 xff1f xff08 1 xff09 基类指针 指向 基类对象 xff1a 不用考虑基类析构函数是否声明为虚函数 xff08 2 xff09 基类指针 指向 派生类对象 xff1a 若基类析构函数不为虚
  • std::map find和count效率测试

    1 简介 在使用标准模板库中的map容器且遇到键值对的值为自定义struct或class类型时 xff0c 考虑到特殊场景 xff08 即不能确保key自始至终唯一 xff09 xff0c 若插入新元素 xff08 new 对象 xff09
  • 随机生成8位长字符串(大小写字母及数字组合)

    1 简要说明 项目上开发要用到随机生成一个8位长的字符串 xff08 类似Java工具类中的UUID xff09 xff0c 作为id来对同一事物的不同个体进行唯一标识 xff0c 如同一个班级里学生名字几乎不同 xff0c 偶尔会有重复
  • C++引用和指针区别

    1 C 43 43 引用和指针区别 xff1a 指针是一个新的变量 xff0c 指向另一个变量的地址 xff0c 我们可以通过访问这个地址来修改另一个变量 xff1b 而引用是一个别名 xff0c 对引用的操作就是对变量的本身进行操作指针可
  • TCP/UDP端口号

    大家好呀 xff0c 我是请假君 xff0c 今天又来和大家一起学习数通了 xff0c 今天要分享的知识是TCP UDP端口号 在IP网络中 xff0c 一个IP地址可以唯一地标识一个主机 但一个主机上却可能同时有多个程序访问网络 要标识这
  • C/C++ 电脑微信dat文件解密及工具分享

    1 前言 最近想整理下照片 xff08 回忆 怀旧 xff09 xff0c 以前也知道在微信pc端聊天时 xff0c 图片 视频 文档等文件会缓存在一个目录下 xff08 电脑微信 左下角三条杠 设置 文件管理 xff09 xff0c 点击
  • ODBC::SQLExecDirect返回-1 错误信息ORA-00604 ORA-01000

    在通过使用微软提供的ODBC SDK读取数据库 xff08 SELECT xff09 时 xff0c 发现Oracle读着读着就读不到数据了 xff08 MySQL和SQL Server是正常的 xff09 xff0c 经调试发现SQLEx
  • std::vector与deque首尾增删及遍历(应用于CListCtrl虚拟列表)混合性能测试

    1 简介 在工作项目中应用MFC类库的CListCtrl刷新加载数据 xff0c 一开始是用InsertItem SetItemText 和DeleteItem 等成员函数来实现数据在列表视图控件中的新增和删除 xff08 最多显示500条
  • Matlab 实用代码集

    本博客将存放一些常用的Matlab代码片段 xff0c 整理成博客 xff0c 并持续更新 xff0c 以便写代码可以调用 1 函数多输入多输出 Matlab写函数的时候 xff0c 输入输出个数经常是不固定的 xff0c narginch
  • 基于c++的A-star算法

    资料 xff1a https www cnblogs com guxuanqing p 9610780 html 一 基础原理 1 从起点开始 xff0c 向周围八个方向扩展 测试新扩展的点的路径代价 xff0c 路径代价由已走的路径和距离
  • 倍增算法

    倍增算法 给定一个整数 M xff0c 对于任意一个整数集合 S xff0c 定义 校验值 如下 从集合 S 中取出 M 对数 即 2 M 个数 xff0c 不能重复使用集合中的数 xff0c 如果 S 中的整数不够 M 对 xff0c 则
  • Numpy学习——数组类型

    Numpy学习 数组类型 更多的数据类型转换 casting 不同数据类型的大小 结构体类型处理丢失的数据 更多的数据类型 转换 casting numpy会自动转换高精度数据类型 xff1a span class token operat
  • 深度学习推荐系统——前深度学习时代

    深度学习推荐系统 前深度学习时代 协同过滤相似度UserCFItemCF矩阵分解矩阵分解的求解过程消除用户和物品打分的偏差矩阵分解的优缺点 逻辑回归特征工程POLY2模型FM模型FFM模型 GDBT 43 LRLS PLM xff08 La