在《机器学习29:《推荐系统-II》协同过滤》一文中,笔者介绍了如何使用矩阵分解来学习嵌入。矩阵分解具有一些局限性:
- 基础矩阵分解只用了 UserID(QueryID) 和 ItemID 两个维度的信息,所有学到的知识都蕴含在 User 向量和 Item 嵌入中。可解释性差,同时,学习过程中很难融合更多有用的特征,比如用户的统计学信息(收入水平、学历、年龄、人生阶段等)以及商品的基础特征信息,如类目、品牌等。因而,基础矩阵分解的泛化能力受到一定的限制。
- 因子分解机(FM)可以看做是基础矩阵分解的推广,它能够很好地融入更多维度的特征,从而学到的模型泛化能力更强,具体可以参考这篇文章:《主流CTR模型的演化及对比》。
- 矩阵分解很难增量在线计算,从而不能处理用户的实时行为反馈,只能基于历史行为来计算。没有实时处理能力的推荐系统必然不会是一个好的推荐系统,比如,京东双11活动,当天的用户行为模式必然与平时的行为模式很不一样,推荐系统如果不能处理当天用户的实时行为,及时捕获用户的新的偏好,将会使得推荐效果大打折扣。
深度神经网络 (DNN) 模型可以解决矩阵分解的这些局限性。DNN 可以轻松地合并 User 特征和 Item 特征(由于网络输入层的灵活性),从而帮助捕获用户的特定兴趣并提高推荐的相关性。
目录
1.用于推荐的 Softmax DNN
1.1 模型输入
1.2 模型架构
1.3 Softmax 输出:预测概率分布
1.4 损失函数
1.5 Softmax 嵌入
2.DNN 和矩阵分解
2.1 可以使用 Item 特性吗?
3.Softmax 训练
3.1 训练数据
3.2 负采样
4.矩阵分解与softmax
5.参考文献
1.用于推荐的 Softmax DNN
一种可能的 DNN 模型是 softmax,它将问题视为多类预测问题,其中:
- 输入是用户查询。
- 输出是一个概率向量,大小等于物料库中 Item 的数量,表示与每个 Item 交互的概率;例如,点击或观看 YouTube 视频的概率。
1.1 模型输入
DNN 的输入可以包括:
- 密集特征(例如,观看时间和自上次观看以来的时间)
- 稀疏特征(例如,观看历史和国家/地区)
与矩阵分解方法不同,DNN 可以添加年龄、国家/地区等辅助特征。我们用 x 表示输入向量。
图 1.输入层 x
1.2 模型架构
模型架构决定了模型的复杂性和表现力。通过添加隐藏层和非线性激活函数(例如 ReLU),模型可以捕获数据中更复杂的关系。然而,增加参数数量通常也会使模型更难训练并且服务成本更高。我们将最后一个隐藏层的输出表示为:。
图 2. 隐藏层的输出。
1.3 Softmax 输出:预测概率分布
该模型映射最后一层的输出 ,通过 softmax 层得到概率分布 , 其中:
- 是 softmax 函数,由下式给出
- 是 softmax 层的权重矩阵。
Softmax 层映射分数向量 (有时称为 logits)概率分布。
图 3. 预测的概率分布,
PS:
Softmax 这个名字是一个文字游戏。“硬” 最大值将概率 1 分配给得分最高的 Item()。相比之下,softmax 为所有 Item 分配非零概率,为得分较高的 Item 赋予较高的概率。当分数缩放时, 收敛到极限内的“硬”最大值 。
1.4 损失函数
最后,定义一个损失函数来比较以下内容:
- ,softmax 层的输出(概率分布)
- ,实际观测,表示 User 实际交互的 Item(例如,用户单击或观看的 YouTube 视频),可以表示为归一化的多热点分布(概率向量)。
例如,可以使用交叉熵损失来比较两个概率分布。
图 4. 损失函数
1.5 Softmax 嵌入
Item 的概率为 ,其中, 是一个归一化常数,不依赖于 。
换句话说,,所以,Item 的对数概率为(最多一个加法常数)两个 维向量的点积,这两个向量可理解为 User(Query) 和 Item 的嵌入:
- 是最后一个隐藏层的输出。我们称之为 Query 的嵌入 。
- 是连接最后一个隐藏层和输出 的权重向量。我们称之为 Item 嵌入 。
注:自 log 是一个递增函数,Item 的最高概率 是点积 的最大值。因此,点积可以解释为该嵌入空间中的相似性度量。
图 5. Item 的嵌入
2.DNN 和矩阵分解
在 softmax 模型和矩阵分解模型中,系统会为每一个 Item 学习一个嵌入向量 ,从而得到所谓的 Item 嵌入矩阵 ,矩阵分解现在是 softmax 层的权重矩阵。
然而,User(Query) 嵌入是不同的,我们不是为每一个 User 学习一个嵌入 ,而是系统学习从 User 特征 到嵌入 的映射。因此,可以将此 DNN 模型视为矩阵分解的推广,其中用非线性函数 替换 User(Query)嵌入。
2.1 可以使用 Item 特性吗?
可以将同样的想法应用到 Item 方面吗?也就是说,模型是否可以学习将 Item 特征映射到嵌入的非线性函数,而不是为每个 Item 学习一个嵌入?是的。为此,请使用 【双塔神经网络】,它由两个神经网络组成:
- 一个神经网络映射 Query 特征(本质就是 User 特征) 到嵌入
- 一个神经网络映射 Item 特征 到嵌入
模型的输出可以定义为点积 。请注意,这不再是 softmax 模型。新模型为每一个 对预测一个值,而不是为每个 Query 预测一个概率向量 。
3.Softmax 训练
上面解释了如何将 softmax 层合并到推荐系统的深度神经网络中。本节将详细介绍该系统的训练数据。
3.1 训练数据
softmax 训练数据由 Query(User)特征 以及与用户有交互的 Item 向量(表示为概率分布 ,在下图中用蓝色标记)。模型的变量是不同层的权重,在下图中标记为橙色。该模型通常使用随机梯度下降法(包括其变体)进行训练。
3.2 负采样
由于损失函数比较两个概率向量 (分别代表观测值和模型预测值),如果物料库的大小 过大,计算损失的梯度(对于单个查询 )可能会非常昂贵。
我们可以设置一个系统来仅计算正 Item(即在实际观测向量中处于活动状态的 Item)的梯度。但是,如果系统仅在正对(正向对)上进行训练,则模型可能会出现折叠,如下所述。
折叠示意图
在上图中,假设每种颜色代表不同类别的 Query 和 Item。每个 Query(表示为正方形)仅与相同颜色的 Item(表示为圆形)交互。例如,将 YouTube 中的每个类别视为不同的语言,通常,用户主要会与某种给定语言(母语)的视频进行交互。
该模型可以学习如何放置给定颜色的 Query/Item 嵌入(正确捕获该颜色内的相似性),但来自不同颜色的嵌入可能会偶然出现在嵌入空间的同一区域中。这种现象称为【折叠】,可能会导致虚假推荐:在查询时,模型可能会错误地预测来自不同组的 Item 的高分。
负面示例——是指标记为与给定查询 “不相关” 的 Item。在训练过程中向模型展示反例可以让模型知道不同组的嵌入应该相互远离。
我们可以使用负采样,而不是使用所有 Item 来计算梯度(这可能太昂贵)或仅使用正项(这使得模型容易折叠)。更准确地说,可以使用以下 Item 计算近似梯度:
- 所有正 item(出现在目标标签中的 Item,实际观察到的 Item)
- 负 Item 采样( in ),仅采样,而非全部
对负样本进行采样有不同的策略:
- 统一采样
- 为得分较高的 Item 赋予较高的概率 。直观上,它们是对梯度贡献最大的示例(examples),这些示例通常被称为“硬否定”。
4.矩阵分解与softmax
DNN 模型解决了矩阵分解的许多局限性,但训练和查询的成本通常更高。下表总结了两种模型之间的一些重要差异。
矩阵分解 | Softmax深度神经网络 | |
---|---|---|
查询特征 | 不容易加入 | 可以包含在内 |
冷启动 | 无法轻松处理词汇外的 Query(User) 或 Item。可以使用一些启发式方法 | 轻松处理新 Query |
折叠式的 | 通过调整 WALS 中未观察到的重量,可以轻松减少折叠。 | 容易折叠。需要使用负采样或重力等技术。 |
培训可扩展性 | 可以轻松扩展到非常大的物料库(可能有数亿个 Item 或更多),但前提是输入矩阵稀疏。 | 很难扩展到非常大的物料库。可以使用一些技术,例如散列、负采样等。 |
服务可扩展性 | 嵌入 U、V 是静态的,可以预先计算和存储一组候选嵌入。 | 项目嵌入 V 是静态的并且可以存储。 查询嵌入通常需要在查询时计算,这使得模型的服务成本更高。 |
总之:
- 对于大型物料库,矩阵分解通常是更好的选择。它更容易扩展,查询成本更低,并且不易折叠。
- DNN 模型可以更好地捕捉个性化偏好,但训练难度更大,查询成本更高。DNN 模型在评分方面优于矩阵分解,因为 DNN 模型可以使用更多特征来更好地捕获相关性。此外,DNN 模型折叠通常是可以接受的,因为我们主要关心的是对假定相关的预过滤候选集进行排名。
5.参考文献
1-https://developers.google.cn/machine-learning/recommendation/dnn/training
2-https://developers.google.cn/machine-learning/recommendation/dnn/softmax