文章目录
- 摘要
- 文献阅读
- 1.题目
- 2.摘要
- 3.介绍
- 4.SAMPLING THE OUTPUT
- 5.LOSS FUNCTION DESIGN
- 5.1 ranking loss: Top1 & BPR
- 5.2 VANISHING GRADIENTS
- 5.3 ranking-max loss fuction
- 5.4 BPR-max with score regularization
- 6.实验
- 7.结论
- 深度学习
- 1.相关性
- 1.1 什么是相关性
- 1.2 协方差
- 1.3 相关系数
- 1.4 协方差矩阵
- 1.5 皮尔逊相关
- 2.主成分分析
- 2.1 概念
- 2.2 原理
- 2.3 步骤
- 2.4 PCA算法的python实现
- 总结
摘要
This week, I read an article related to the sequential recommendation system, the article clearly describes the relationship between difficult samples, simple samples and gradient disappearance when gradient decline and parameter update, and how to set simple samples to have less impact on average gradient. Because RNN can effectively model the entire user interaction session, this article uses RNN to model the entire session. For the recommendation system, one of the main goals is to rank items according to user preferences. Therefore, the article uses ranking loss functions so that RNN can achieve this function, which also makes the performance of RNN increase by 30% compared with the loss commonly used before. Finally, experiments are carried out on two datasets, and the results show that the proposed method is not only better in performance than some previous schemes, but also does not significantly increase the training time. In addition, I learn correlation and principal component analysis. In the process of learning correlation, it explains what correlation is from three aspects: covariance, correlation coefficient and covariance matrix. Finally, I also introduce four formulas of Pearson correlation; In the process of learning PCA, I understand and master the essence of principal component analysis from three aspects: concept, principle and steps. Finally, I implement PCA algorithm in python.
本周,我阅读了一篇与顺序推荐系统相关的文章,文章比较清晰地讲述了在梯度下降和参数更新时,困难样本、简单样本与梯度消失之间的关系,以及如何设置能使简单样本对平均梯度的影响更小。由于RNN可以有效地对整个用户交互会话进行建模,因此文章通过RNN对整个会话进行建模。对于推荐系统而言,其中一个主要目标是根据用户偏好对项目进行排名,因此文章使用了ranking loss functions,以便RNN能够实现此功能,这也使得RNN的性能比使用以前常用的损失提高了30%。最后,在两个数据集上进行实验,结果表明文章提出的方法比之前的一些方案不仅在性能上要好,而且不会显著增加训练时间。此外,我学习了相关性和主成分分析。在学习相关性的过程中,从协方差、相关系数和协方差矩阵三个方面去展开说明什么是相关性,最后我还介绍了皮尔逊相关的四个公式;在学习主成分分析的过程中,我从概念、原理和步骤三个方面去理解和掌握主成分分析的精髓,最后我用python实现了PCA算法。
文献阅读
1.题目
文献链接:RECURRENT NEURAL NETWORKS WITH TOP-K GAINS FOR SESSION-BASED RECOMMENDATIONS
2.摘要
RNNs have been shown to be excellent models for sequential data and in particular for session-based user behavior. The use of RNNs provides impressive performance benefits over classical methods in session-based recommendations. In this work we introduce a novel ranking loss function tailored for RNNs in recommendation settings. The better performance of such loss over alternatives, along with further tricks and improvements described in this work, allow to achieve an overall improvement of up to 35% in terms of MRR and Recall@20 over previous session-based RNN solutions and up to 51% over classical collaborative filtering approaches. Unlike data augmentation-based improvements, our method does not increase training times significantly.
3.介绍
问题:过去的用户历史日志通常不可用,因为用户可能出现是新用户、未登录以及未被跟踪的情况,推荐系统只能依靠用户在当前会话中的动作来提供准确的推荐。
解决方法:此前,主要使用相对简单的方法来处理,比如基于item的协作过滤或者或基于内容的方法。现在,在推荐系统中,RNN最近被应用于基于会话的推荐任务中,并且表现效果令人印象深刻。
RNN与传统的基于相似性的推荐方法相比的优势在于:RNN可以有效地对整个用户交互会话进行建模。通过对整个会话进行建模,RNN可以学习到会话的核心内容,从而提供比传统方法更为准确的推荐。
本文贡献:
1)作者分析了RNN中基于会话推荐的排名损失函数,使得RNN的性能比以前常用损失函数提高了30%,却不会导致显著的计算开销。
2)从本质上来说,作者将深度学习和rank literature学习相结合,设计了一类新的损失函数。在两个数据集上,展现了RNN与传统的memory-based协作过滤之间的差异,从而体现出深度学习为推荐系统领域带来的潜力。
4.SAMPLING THE OUTPUT
在每个训练步骤中,GRU4Rec 将会话中当前事件的项目作为输入,其中由 one-hot vector表示。网络的输出是item的一组分数,对应于它们成为会话中下一个项目的可能性。
GRU4Rec 引入了基于mini-batch的采样。 对于mini-batch中的每个example,相同mini-batch的其他examples作为负样本。
排序损失的特性:只有当target item的分数没有大幅超过负样本的分数时,才会进行学习,反之项目已经处于正确的顺序,因此没有什么内容可以学习。
在抽样的过程中,将得分高的item包含在负样本中至关重要;热门item在许多情况下通常得分很高,因此基于人气的抽样是一种很好的抽样策略;mini-batch抽样基本上是一种基于流行度的抽样形式,因为训练会遍历所有事件,因此一个item作为负样本的概率与其流行度成正比。
基于流行度采样的问题:在算法学习将target item排在流行item之上以后,学习会减慢,因此对于长尾高分item的排序仍然可能不准确。另一方面,由于大量低分负样本,均匀采样会减慢学习速度,但如果无限期地训练,可能会产生总体上更准确的模型。因此,文章提到了基于流行度的抽样通常会产生更好的结果。
将抽样与mini-batch联系起来,存在以下限制:
1)Mini-batch 规模一般较小,从几十到几百不等。 如果项目的数量很大,那么小样本量会进一步阻碍包含所有高分负样本的机会;
2)Mini-batch 大小对训练有直接影响;
3)抽样方法本质上是基于流行度的,这通常是一个很好的策略,但可能不是对所有数据集都是最优的。
5.LOSS FUNCTION DESIGN
5.1 ranking loss: Top1 & BPR
Top1 Loss:
它是由两部分组成的启发式组合损失,第一部分旨在将目标分数推高到所有样本分数之上,而第二部分将负样本的分数降低到零。 后者充当正则化器,但不是直接约束模型权重,而是惩罚负例的高分:
BPR LOSS:
5.2 VANISHING GRADIENTS
对于成对损失,人们通常希望得到高分的负样本,以此来得到高梯度。直观地讲,如果负样本的分数已经远低于目标的分数,那么就不能从该负样本中学到任何东西了。
然而,梯度总是被负样本的总数影响。通过增加样本数量,不相关样本的数量比包含相关样本的数量增加得更快,因为大多数项目作为负样本是不相关的,对于非基于流行度的抽样和样本数多的情况也是如此。 因此,随着样本数量的增加,这些损失的梯度开始消失,这是违反直觉的,并且损害了算法的潜力。
这两种损失函数主要缺点是会发生梯度消失的现象,当rj < < ri时,σ(rj - ri) 和 1 - σ(ri - rj) 都会趋近与0,从而使得梯度消失。同时,对负样本取平均值会加速这种梯度消失的现象,因为样本越多,平均值越小。
5.3 ranking-max loss fuction
为了克服随着样本数量增加而导致的梯度消失问题,文章提出了基于 pairwise 的 listwise 损失函数框架。 这个想法是将目标分数与最相关的样本分数(样本中的最大分数)进行比较:
最大选择是不可微的,因此不能与梯度下降一起使用,因此作者使用 softmax 分数来保持可微性。但 softmax 变换仅用于负例,因为我们是从负例中的最大分数来看的。这自然会引出损失函数,其中每个负样本都与其获得最大分数的可能性成正比。基于这个总体思路,我们现在可以推导出 TOP1-max 和 BPR-max 损失函数。对最大选择的连续逼近需要对由相应的 softmax 分数 Sj 加权的各个损失求和:
其中:sj 是 softmax 后的分数,得分越低,则为困难样本的概率就越低。在loss函数中,sj 就可以相当于权重,当 rj 较小时,sj也会较小,一直到趋近于 0,样本 j 类似于被忽略,所以不会减少整体的梯度。
当 ri 较小时,权重分布较为均匀,实际得分高的将会得到更多关注;当 ri 较大时,得分高的才会产生较大的权重,从而得到更多关注,有利于模型的训练。
如果 rj 远低于负样本的最大值,那它的权重将几乎为零,并且更多的权重将放在分数接近最大值的示例上。这解决了更多样本梯度消失的问题,因为不相关的样本将被忽略,而梯度将指向相关样本的梯度。当然,如果所有样本都不相关,梯度会接近于零,但这不是问题,因为如果目标分数大于所有样本分数,则没有什么内容可以学习。
5.4 BPR-max with score regularization
受到 TOP1 添加正则项的启发,对 BPR 也添加正则项,同样能提高模型的表现。
6.实验
数据集:
如下图所示,在CLASS数据集上,展示了alpha参数对不同样本量下推荐精度的影响:
其中:左图是交叉熵损失;中间图是损失 TOP1-max;右图是 BPR-max loss。
如下图所示,文章把模型与 item-kNN 和原始 GRU4Rec 相比,展示了附加样本和不同损失函数的推荐准确性。最好的表现结果是图中粗体字:
如下图所示,在多个数据集上,展示了模型在Recall@20和MRR@20下统一嵌入的结果。
7.结论
文章引用了一种新颖的损失函数,将其与改进的采样策略一起为基于会话推荐的RNN提供 top-k gains。作者认为这类新式的损失函数会更加普遍适用,与相应的采样策略结合,还可以为不同的推荐设置和算法提供 top-k gains,比如矩阵分解或自动编码器。甚至于可以将这些技术应用到NLP领域,因为该领域在机器学习和数据结构方面与推荐领域具有显著的相似性。
深度学习
1.相关性
1.1 什么是相关性
如果有两个变量:X 和 Y,最终计算出的相关系数有以下理解:
1)当相关系数为0时,X 和 Y 两者无关系;
2)当X的值增大(减小),对应Y值也增大(减小),则两个变量为正相关关系,相关系数在0到1之间;
3)当X的值增大(减小),对应Y值减小(增大),则两个变量为负相关关系,相关系数在-1到0之间。
总结:相关系数的绝对值越大,则相关性越强。也就是说,相关系数越接近于1或-1,相关度越强;相关系数越接近于0,相关度越弱。
1.2 协方差
当x相对于其均值增加时,y也相对其均值增加;当x相对于其均值减少时,y也相对其均值减少。于是,可以用一个数去表示 x 与 y 的相关性:将二者乘起来,即(x - mean(x) * (y - mean(y)) 。因此,当二者同时相对于均值增加或降低时,均为正,如果每个 x 对应的 y 都同向变动时,其交互项相加后不断增大,即 Σ(x - mean(x) * (y - mean(y)),反之亦然。
现在有一个问题:如果两个变量的相关性不高,但其样本量很多时,是否会导致Σ(x - mean(x) * (y - mean(y)) 仍然取得一个很大的值。为此,如果我们对其求均值,就可以得出两个变量的平均相关性了,则两个变量的相关性指标的公式变为:(1 / N)Σ(x - mean(x) * (y - mean(y))。
对于总体样本,我们可以将均值变为期望,则上式变为:E[ (x - E(x)) * (y - E(y))] = E(xy) - E(x)E(y),于是我们就得到了协方差表达式。因此,协方差是表示两个变量相关性的一个指标。容易看到,当两个变量相等时,协方差表达式就变成方差表达式了。
1.3 相关系数
协方差可以表示变量之间的相关性,但不同变量之间的量级不同,这会导致无法直观地比较不同协方差所反映出的相关性。于是,需要对协方差进行标准化,将其转化为同等量级,就可以比较不同的协方差。
标准化:将变量相对于均值的变动除以其标准差,由于Cov实际上为两个变量相对其均值变动的乘积,因此,我们用两个变量标准差的乘积进行标准化,即 Cov / √D(x) * √D(y)。
简单的相关系数的分类:
1)0.8-1.0 极强相关
2)0.6-0.8 强相关
3)0.4-0.6 中等程度相关
4)0.2-0.4 弱相关
5)0.0-0.2 极弱相关或无相关
1.4 协方差矩阵
协方差的本质是求两两向量之间的相关性,协方差公式:
1.5 皮尔逊相关
在统计学中,皮尔逊积矩相关系数是一种计算直线相关的方法。假设有两个变量X、Y,那么两变量间的皮尔逊相关系数可通过以下公式计算:
公式一:
公式二:
公式三:
公式四:
其中:E表示数学期望,μx表示期望,σx表示标准差,cov表示协方差,N表示变量取值的个数。
适用范围:
当两个变量的标准差都不为零时,相关系数才有定义。
1)两个变量之间是线性关系,都是连续数据。
2)两个变量的总体是正态分布,或接近正态的单峰分布。
3)两个变量的观测值是成对的,每对观测值之间相互独立。
2.主成分分析
2.1 概念
PCA 是现代数据分析的标准工具,它可以把庞大复杂的高维数据集,通过数学变换转化成较低维度的数据集,并去除掉维度之间的相关性(变换前的数据集各维度之间存在相关性)。
特点:一个非参数的分析,没有需要调整的参。它的答案是唯一的,独立于用户特性。
应用领域:
1)构建综合指标:PCA主要用于构建综合指标来区分目标群体;
2)数据降维:PCA用比原始变量数少的主成分来描述尽可能多的数据差异,特别是当原始变量维度很高时,可达到降维目的;
3)数据可视化:当原始变量维度很高时,可采用第一、第二主成分散点图来直观地表述数据特征;
4)变量压缩、重构:由“重要的”主成分重构原始变量,可以去除原始数据中冗余的噪音,突出数据的特征。即原始数据 X 变化成 Z 后,选择主要方差的特征,通过线性变化回原维度数据X’,以实现降噪的目的。
2.2 原理
原理:选择包含信息量大的维度,去除信息量少的“干扰”维度。其中:维度不是原始数据的某个特征,而是原始数据各个特征的组合。
把数据从原来的坐标系转换到新的坐标系,新坐标系的选择是由数据本身决定的。第一个新坐标轴选择原始数据中方差最大的方向,第二个新坐标轴选择与第一个新坐标轴正交且具有最大方差的方向,第三个新坐标轴选择与第一个新坐标轴、第二个新坐标轴正交且具有最大方差的方向。以此类推,第n个新坐标轴选择与第一个新坐标轴、第二个新坐标轴、… 、第n-1个新坐标轴正交且具有最小方差的方向,共建立与原始数据特征数目相等的新坐标轴。
我们都知道方差大代表不同数据之间的差异更大,即包含的可区分信息则越多。从上面的操作中,我们会发现大部分方差都包含在最前面的几个新坐标轴中,因此我们可以忽略余下的坐标轴,从而实现降维。
2.3 步骤
PCA降维后,原始数据被映射到新坐标系上,不再是原始值。
PCA降维步骤:
1)把数据集组织成一个m * n的矩阵X;
2)将X中的每个变量分别进行去中心化(Xj - μj, j = 1,2, …, P),得到新的数据集W;
3)求出协方差矩阵Σ = 1/n WWT;
4)求出协方差矩阵的特征值λj和对应的特征向量ej;
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P;
6)Y = PW,即得到降维到k维后的结果。
2.4 PCA算法的python实现
import numpy as np
def pca(X, k):
X = X - np.mean(X, axis=0) # 去中心化
X_cov = np.cov(X, rowvar=False) # 求出协方差矩阵
eigvalues, eigvectors = np.linalg.eig(X_cov) # 求出协方差矩阵的特征值和特征向量
max_eigvalue_index = np.argsort(-eigvalues)[:k] # 选取前k个向量作为W
W = eigvectors[:, max_eigvalue_index]
Z = X @ W # 得到降维到k维后的结果
return Z
X = [[2.1, 2.9],
[0.5, 0.4],
[2.5, 2.7],
[1.2, 2.9],
[3.9, 3.2],
[2.1, 2],
[2.3, 1.7],
[1, 1.6],
[1, 1.1],
[1.5, 0.6]]
Z = pca(X, 1)
print(Z)
得到最后的结果:
总结
本周,我学习了相关性和PCA的相关知识,但由于本周在复习准备英语考试,我未能将PCA降维学完,因此下周将继续学习PCA降维的相关知识,解决本周的遗留问题,即为什么协方差的特征值对应的特征向量构成的矩阵能够实现降维的效果。