推荐系统(5)-深度推荐模型-AutoRec、DeepCrossing、NeuralCF、PNN、WideDeep、FNN、DeepFM、NFM

GBDT+LR

  • 1. AutoRec-2015
  • 2. Deep Crossing-2016
  • 3. NeuralCF-2016
  • 4. PNN-2016
  • 5. Wide&Deep-2016
  • 6. Deep&Cross-2017
  • 7.FM+深度学习
    • 7.1 FNN-2016
    • 7.2 DeepFM-2017
    • 7.3 NFM-2017

《深度学习/推荐系统》读书笔记

2016年开始,推荐系统和计算广告全面进入深度学习时代。
(太多的模型,一搞就混了,没意思。)
围绕:特征如何更好的交叉,发现新的特征
以下方案基本囊括了特征工程的所有思路,(仅从特征工程的角度出发)模型进一步提升的空间非常小了,这也是这类模型的局限性所在。

1. AutoRec-2015

(澳大利亚国立大学)

核心思想:利用自编码器重构用户对物品的评分向量,再利用对物品评分的预估进行推荐排序。
自编码器:使输出向量与输入向量尽可能接近,可以用来做数据压缩和降维。
数据压缩和降维说的是,自编码器的参数数量要远小于输入向量的维度

AutoRec-用一个三成神经网络构建自编码器,输出层与输入层具有相同维度。
若输入向量为rir^iri,重建函数为h(ri,θ)h(r^i,\theta)h(ri,θ),AutoRec目标函数为
min⁡θ∑i=1n∣∣ri−h(ri,θ)∣∣2+λ2∣∣θ∣∣2\min_\theta\sum_{i=1}^n||r^i-h(r^i,\theta)||^2+\frac{\lambda}{2}||\theta||^2θmini=1nrih(ri,θ)2+2λθ2

Item Based AutoRec–物品评分向量–共现矩阵的列向量
User Based AutoRec–用户评分向量–共现矩阵的行向量

优点:三层自编码器简单
缺点:表达能力不足

2. Deep Crossing-2016

(微软)
Deep Crossing 模型的应用场景-Bing中搜索广告推荐场景。用户在搜索引擎中输入搜索词后,引擎出了会返回相关的结果,还会返回相关的广告。这是大多数搜索引擎的盈利模式。准确地预测关稿的点击率,并以此作为关稿排序指标之一,是非常重要的工作。

某条广告预测点击率可能用到的特征:搜索词,广告关键词,标题,落地页(不懂),匹配类型,历史点击率,另一个CTR模型预估的点击率,广告投放计划,曝光/点击样例(不懂

Deep Crossing 主要包括4层,用来解决-原始特征稀疏、特征自动交叉、输出层特征优化三个问题。

  1. Embedding-全连接聚合稀疏特征(第四章详细讨论Embedding技术)类别特征-onehot 编码,数值型特征都不需要Embedding.
  2. Stack层-直接拼接不同类型Embedding特征
  3. Multiple Residual Units层 – 残差网络实现特征各个维度的充分交叉
  4. Scoring层 – 逻辑回归预测CTR

3. NeuralCF-2016

(新加坡国立大学)
NeuralCF - 广义矩阵分解模型-将矩阵分解后的用户向量和物品向量 通过 互操作层相互作用后 得出用户对物品的评分。

  1. 互操作1–原始矩阵分解,使用内积,太简单,模型拟合能力不足。
  2. 互操作2–用户向量和物品向量拼接后输入全连接网络
  3. 互操作3–用户向量和物品向量(维度对齐)逐元素积

优点:灵活组合不同的 互操作层 特征,按需增加或者减少模型复杂度

局限性:基于协同过滤的思想构造,没有更多的引入其他类型的特征。所提供的互操作就两种,更多的方式需要后来者进行更深入的研究。

4. PNN-2016

上海交通大学–加强特征交叉能力–多组特征的之间的交叉(NeuralCF只有用户向量和物品向量)
PNN创新点–使用了乘积层代替了Deepcross中的stack 层,就是说不同特征的Embedding向量不再是简单的拼接,而是用Product操作进行两两交互。

Product层包括线形操作部分和乘积操作部分。

  1. 线操作部分–对embedding向量进行线形拼接
  2. 乘积操作部分包括:内积操作和外积操作(不同的embedding两两组合)
    a). 内积操作–没啥特殊
    b). 外积操作–将所有特征两两外积矩阵叠加,形成叠加外积互操作矩阵:p=fΣfΣTp=f_{\Sigma}f^T_{\Sigma}p=fΣfΣT

叠加外积互操作矩阵的缺陷–等价于让所有的emdedding过一个平均池化,再作内积。不在同一个向量空间的特征向量(年龄,地域)相加,会造成信息模糊。

5. Wide&Deep-2016

google–google play推荐团队–单层Wide和多层Deep组合形成混合模型,综合利用记忆能力和泛化能力。

记忆能力:模型直接学习并利用历史数据中物品或者特征的“共现频率”的能力。
强组合特征:如果点击过A,就推荐B。协同过滤和逻辑回归很容易发现这种联系。例如通过加大A的特征权重,这样就实现了对这个特征的直接记忆。

泛化能力:模型发掘稀疏甚至稀有特征与最终标签相关性的能力。
矩阵分解比协同过滤泛化能力强,就是因为矩阵分解引入了隐向量,使得数据稀少的用户或者物品也能生成隐向量,从而获得有数据支撑的推荐得分。(非常典型的将全局数据传递到稀疏物品上,提高了泛化能力)

Wide&Deep 模型结构: 单层Wide和多层Deep的输出拼接后直接输入到输出层。
(在具体特征工程和输入层设计中,展现了Google PLay推荐团队对业务场景的深刻理解)

  1. 单层Wide特征:已安装应用(用户历史行为)、曝光应用(当前的待推荐应用)
  2. 多层Deep特征:全量特征–用户年龄、安装应用数量、参与会话数量、用户人口属性特征、设备类型、已安装应用、曝光应用

Wide特征交叉操作–交叉积变化(解释完反而懵了)–多个特征向量的同一维度都为1,输出向量该维度才为1?

Deep&Wide模型的最主要共现–模型融合的魅力。

6. Deep&Cross-2017

斯坦福+google联合-在Wide&Deep的基础上,优化Wide部分,变为Cross网络。

Cross网络的目的–增加特征之间的交互力度,多层交叉层。(每一层均保留了输入向量)
xl+1=x0xlTWl+bl+xlx_{l+1}=x_0x_l^TW_l+b_l+x_lxl+1=x0xlTWl+bl+xl

7.FM+深度学习

7.1 FNN-2016

伦敦大学
改进点:DeepCross模型中embedding层的权重用FM模型训练出的权重向量进行初始化
问题缘起:embedding层采用随机初始化,收敛非常慢。主要原因有二

  1. 参数占整个网络的比重非常大
  2. 输入向量过于稀疏,只有与非零特征相连的Embedding层权重会被更新

7.2 DeepFM-2017

哈工大+华为公司
改进点:用FM代替Deep&wide中的wide,提高特征交叉能力
FM部分和Deep 部分共享稠密的embedding层。

7.3 NFM-2017

新加坡国立大学
改进点:在Deep&wide模型中的deep 部分增加了特征交叉池化层
特征交叉池化层:所有稠密embedding 两两数量积之后求和,输入到后续的深层网络中。

改进点的另一种看法:FM中的二阶交叉部分采用神经网络来拟合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于在安装caffe2环境中遇到的坑整理(欢迎入坑讨论)

1.ImportError: cannot import name caffe2_pb2 测试caffe2的pytorch环境是否正常的时候使用 root@lxsj-ThinkStation:~/pytorch# python Python 2.7.12 (default, Dec 4 2017, 14:50:18) [GCC 5.4.0 20160609] on linux2 Type "help", "copyright", &…

leetcode172. 阶乘后的零 最快算法

给定一个整数 n,返回 n! 结果尾数中零的数量。 示例 1: 输入: 3 输出: 0 解释: 3! 6, 尾数中没有零。 示例 2: 输入: 5 输出: 1 解释: 5! 120, 尾数中有 1 个零. 说明: 你算法的时间复杂度应为 O(log n) 。 思路:102*5,而因数中2一定比…

Win10 连接 Ubuntu16.04.3(通过Xdrp连接xfce4界面)

Win10 连接 Ubuntu16.04.3(通过Xdrp连接xfce4界面) sudo apt-get install xrdp sudo apt-get install vnc4server sudo apt-get install xubuntu-desktop echo "xfce4-session" >~/.xsession sudo apt-get install dconf editor sudo dconf editor(或者在搜索…

Linux(17)-

Make编译机制,Configure

听说你还在纠结自己没访问量?成不了“博客专家”?

一、提高浏览量的技巧 相信很多人都这么想过:“我文章写的这么好,怎么就没人看呢?”; 或者这样想过:“这文章写得明明比我烂很多,凭什么这么多浏览量?”; 虽然在我看来这是极其严…

推荐系统(6)-注意力机制+深度推荐模型、强化学习推荐系统

注意力机制深度推荐模型、强化学习推荐系统1.AFM -20172.DIN-20173.DIEN-20194. DRN-20181.AFM -2017 Attention factorization machines–浙江大学–基于模型结构的改进 引入注意力机制FM, 可视为NFM模型的改进。给特征交叉池化后的特征向量施加不同的注意力权重。…

Caffe安装的坑整理

怎么说了,入了深度学习的坑,就要踩一踩才算你入门,这里我整理了我在安装学习caffe自己遇到的坑: 1.Caffe-GPU编译问题:nvcc fatal : Unsupported gpu architecture compute_20 仔细查看了一下 Makefile.config 中 CUDA_ARCH 设置未按规定设置: # CUDA architecture se…

leetcode74. 搜索二维矩阵 ,你见过吗

编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性: 每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。 示例 1: 输入: matrix [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34,…

pytorch学习 入门篇(一)

PyTorch 是什么? 它是一个基于 Python 的科学计算包, 其主要是为了解决两类场景: NumPy 的替代品, 以使用 GPU 的强大加速功能一个深度学习研究平台, 提供最大的灵活性和速度Tensors(张量) Tensors 与 NumPy 的 ndarrays 非常相似, 除此之外还可以在 GPU 上使用张量来加速…

关系数据库——范式/反范式的利弊权衡和建议

范式(避免数据冗余和操作异常) 函数依赖 A->B A和B是两个属性集,来自同一关系模式,对于同样的A属性值,B属性值也相同 平凡的函数依赖 X->Y,如果Y是X的子集 非平凡的函数依赖 X->Y&#xff…

pytorch学习入门 (二) Variable(变量)

Variable(变量) autograd.Variable 是包的核心类. 它包装了张量, 并且支持几乎所有的操作. 一旦你完成了你的计算, 你就可以调用 .backward() 方法, 然后所有的梯度计算会自动进行. 你还可以通过 .data 属性来访问原始的张量, 而关于该 variable&#…

Linux(x)-

Ubuntu装机后的基础应用

pytorch入门学习(三) 神经网络

神经网络可以使用 torch.nn 包构建. autograd 实现了反向传播功能, 但是直接用来写深度学习的代码在很多情况下还是稍显复杂,torch.nn 是专门为神经网络设计的模块化接口. nn 构建于 Autograd 之上, 可用来定义和运行神经网络. nn.Module 是 nn 中最重要的类, 可把它看成是一个…

leetcode1033. 移动石子直到连续

三枚石子放置在数轴上&#xff0c;位置分别为 a&#xff0c;b&#xff0c;c。 每一回合&#xff0c;我们假设这三枚石子当前分别位于位置 x, y, z 且 x < y < z。从位置 x 或者是位置 z 拿起一枚石子&#xff0c;并将该石子移动到某一整数位置 k 处&#xff0c;其中 x &…

pytorch学习 训练一个分类器(五)

训练一个分类器 就是这个, 你已经看到了如何定义神经网络, 计算损失并更新网络的权重. 现在你可能会想, 数据呢? 一般来说, 当你不得不处理图像, 文本, 音频或者视频数据时, 你可以使用标准的 Python 包将数据加载到一个 numpy 数组中. 然后你可以将这个数组转换成一个 to…

Git(6)-Git配置文件、底层操作命令

Git基本命令1. 常用(迷糊)命令-冷知识2. git 配置2.1 设置 配置文件2.2 查看 配置文件--git config -l2.3 移除 配置文件设置--unset2.3 命令别名 --alias3.git 对象 &#xff08;git底层操作命令&#xff09;3.1 初始化一个版本库3.2 新建一个简单的blob 对象3.3 基于散列值查…

【软考中级】网络工程师:8.网络安全

本章考察内容比较广泛&#xff0c;考题对知识点都会有所涉及。 8.1 网络安全的基本概念 8.1.1 网络安全威胁的类型 窃听 这种情况发生在广播式网络系统中&#xff0c;每个节点都可以读取数据&#xff0c;实现搭线窃听、安装通信监视器和读取网上的信息等。 假冒 当一个实体…

leetcode9 回文数

判断一个整数是否是回文数。回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个…

caffe各层参数详解

在prototxt文件中,层都是用layer{}的结构表示,而里面包含的层的参数可以在caffe.proto文件中找到,比如说Data类型的结构由message DataParameter所定义,Convolution类型的结构由message ConvolutionParameter所定义。 具体说明下: name表示该层的名称type表示该层的类型,…

caffe网络结构图绘制

绘制网络图通常有两种方法&#xff1a; 一种是利用python自带的draw_net.py&#xff0c;首先安装两个库&#xff1a; sudo apt-get install graphviz sudo pip install pydot 接下来就可以用python自带的draw_net.py文件来绘制网络图了。 draw_net.py执行时带三个参数&…