1. 引言
在个性化推荐中,最传统的推荐算法之一是协同过滤算法,通过用户对物品评分的评分矩阵形式进行运算。但是随着数据的增加,一个用户未评价的物品要远远多于评价的物品,因此就出现了数据稀疏问题。为了让算法能有一个更精准更高效的结果,在协同过滤算法中引入奇异值分解算法SVD (Singular Value Decomposition),其推荐精度相对比传统的协同过滤算法有了一定的提高。在Netflix大奖赛中,Simon Funk [1] 对SVD方法进行了改进,被称为FunkSVD。主要过程是在SVD的目标函数中,使用随机梯度下降法使目标函数达到最优,后被称作是隐语义模型LFM (Latent Factor Model)。
隐语义模型在个性化推荐领域中应用非常广泛。顾威 [2] 在音乐推荐系统的设计中使用了基于隐语义模型的推荐算法。张振领 [3] 在基于情境感知的个性化推荐研究中,以隐语义模型为基础,结合情境信息、用户行为、时间因子来预测用户对物品的真实兴趣度。古振威 [4] 在对人力资源推荐系统的研究中,提出了将隐语义模型与深度森林结合的算法来为用户提供更优质的人力资源推荐服务。肖迎元等人 [5] 在研究社交网络好友推荐方法中,采用隐语义模型来挖掘用户潜在兴趣特征和用户交友潜在偏好特征。
在隐语义模型纵向深入发展中,荆羽纯等人 [6] 提出了一种全新的基于学习自动机的矩阵训练算法。利用连续型学习自动机代替原有的梯度下降算法对大型稀疏矩阵的奇异值进行分解计算,提高了后续预测算法的精确度。但是基于学习自动机的推荐算法是在样本数较少的环境中,相比原算法有更精确的预测。王尔昕 [7] 设计了基于隐语义模型和聚类算法的优化算法,对传统算法中存在的数据稀疏性、时效性和冷启动等问题进行了改善。但使用聚类算法对用户进行聚类时,会将用户划分到固定的一类中来降低数据稀疏性,但是对于一些处于类别边界的用户,将他们划分的类别不一定能代表他们的特征,这导致在一些聚类数目下算法的准确度会降低甚至不如传统算法。鲁权等人 [8] 提出融合隐语义模型与邻域模型的推荐算法,将预测的精确度提高,该方法针对隐式数据有明显的效果。王建芳等人 [9] 提出将奇异值分解技术与带偏置概率矩阵分解相结合的推荐方法,缓解由数据高维稀疏性带来的推荐质量不高的问题。王科强 [10] 提出基于加权局部矩阵分解的商品推荐,该模型设计了高效的子矩阵选择算法和改进的交替最小二乘参数优化算法,对用户和商品的局部特性建模,同时缓解了数据稀疏性问题。
在对目标函数求解的过程中。孙勇等人 [11] 在面向大规模服务性能预测的在线学习方法中,提出了一种基于小批量在线学习的服务性能预测方法,使大规模服务预测算法的时效性问题得到了有效的提升。Jing Li等人 [12] 为解决大规模高光谱数据的分离问题中的重构误差最小化,他们引入基于小批量梯度下降法来解决这个问题,既降低了计算成本也对算法性能进行了优化。毛勇华等人 [13] 在用BP微调的深度学习贪婪层训练方法中,将BP算法中三种梯度下降方法的实验结果进行了对比与分析,实验结果表明在静态离线学习系统中,采用随机小批量梯度下降可以得到最优解。
根据以上文献,可以得知小批量梯度下降法对大规模数据的处理,能够减少时间的运行,优化推荐结果。所以本文提出在隐语义模型的基础上进行算法模型优化,通过改进目标函数的优化过程来进一步提高算法准确度,即将随机梯度下降法,用同属于机器学习领域的小批量梯度下降法来代替。
2. 隐语义模型
隐语义模型LFM [14] 的基本思想是通过引入隐含特征,将用户-物品的评分矩阵R降阶为两个矩阵的乘积,P表示用户对不同隐含特征的兴趣度,Q表示物品与不同隐含特征之间的关联程度,这样可以将原评分矩阵的空缺评分数据补全,实现用户对各个商品不同兴趣度的预测。由于评分矩阵非常庞大,通常采用随机梯度下降法,通过多次迭代来优化降阶矩阵P、Q的参数,从而得到最优解。
用户U对物品I的评分矩阵R计算公式如下:
(1)
是用户U对物品I的兴趣度,K代表包含的隐含特征的数量。PU和QI是模型参数的特征向量,参数PU和QI可以使用损失函数来进行训练。
(2)
上式中的
代表真实评分减去预测评分的误差平方和,越小越好。
是用来防止过拟合的正则化项,
是正规则化因子,需要根据特定应用环境反复实验得到。
接下来通过随机梯度下降算法来优化损失函数,首先求参数PUK和QKI的偏导数来确定梯度下降方向:
(3)
(4)
其次通过不断的迭代计算来优化参数,直至参数收敛:
(5)
(6)
α是学习速率,用来控制每次迭代的步长。
3. 加入偏置项的隐语义模型
在实际情况中,用户之间打分的差异或者项目本身质量的差异,会导致评分系统中分数差异较大。所以通过在隐语义模型中加入偏置项 [15] 来消除这一差异:
(7)
其中,
是全局平均值,
是用户偏置项,
是项目偏置项。
预测评分被定义为:
(8)
目标函数为:
(9)
同理,求出四个参数的偏导数,然后更新参数为:
(10)
(11)
(12)
(13)
4. 小批量梯度下降法
下降梯度法分为随机下降梯度法、批量下降梯度法和小批量梯度下降法。
随机梯度下降法(Stochastic Gradient Descent)是对于每个数据都计算损失函数,然后求梯度更新参数。此方法有较快的计算速度,但是收敛性能较差,可能会在最优点附近左右摇摆,无法得到最优解。
批量下降梯度法(Batch Gradient Descent)是遍历所有数据后算一次损失函数,然后求解梯度更新参数。此方法可以得到全局最优解,但是每次更新参数时,都要把所有数据看一遍,导致了计算速度慢,计算量大。
为了克服两种方法的缺点,将两种办法进行了融合提出了小批量梯度下降法(Mini-Batch Gradient Decent),这种方法在数据中每次随机抽取一小批数据,这样通过一批数据共同决定梯度方向,下降起来更加稳定,降低了收敛波动性。同时也减轻计算量,减少运行时间。
5. 基于小批量梯度下降法的个性化推荐模型
在增加偏置项隐语义模型的基础上,将小批量梯度下降法融入其中。其主要步骤是:将随机选择一定批量的数据,通过这一批量数据来共同决定步长的梯度方向,以减少了随机性与震荡性。
度量标准采用均方根误差RMSE (root-mean-square error)以及平均绝对误差MAE (Mean Absolute Deviation)。假设预测的用户评分矩阵为
,对应的实际用户评分矩阵为
,N为用户进行打分物品的个数。RMSE计算公式:
MAE计算公式:
两个度量值越小,代表预测的精度越准确。
主要算法流程如下:
输入:迭代步长steps,学习速率alpha,正规则化因子Lambda,批量大小batch_size
输出:RMSE,MAE
a) 定义模型model:
定义全局偏置变量bias_global
定义用户的偏好bias_user
定义电影的偏好bias_item
定义用户和电影一个批量的偏好batch_bias_user, batch_bias_item
定义用户和电影的权重w_user, w_ite
给定批处理的用户和项的权重嵌入batch_w_user, batch_ w_ite
b) 定义损失函数cost:
数据损失(data loss)= tf.nn.l2_loss(tf.subtract(真实值,预测值))
正则化损失(正则化项*L2惩罚方式)= tf.multiply(regularizer , penalty)
损失函数(cost) = 数据损失(data loss) + 正则化损失(正则化项*L2惩罚方式)
使用梯度下降训练train_loss = tf. train. Gradient Descent Optimizer (学习速率learning_rate= alpha).minimize (损失函数cost)
c) 设置两个迭代器生成随机批次,用于训练和测试
d) 计算均方根误差RMSE = np.sqrt(np.mean(np.power((真实值-预测值),2)))计算平均绝对误差MAE = abs(np.mean (真实值-预测值))
6. 程序及结果
本次试验将采用Movielens ml-1m数据集(百万),其包含用户、电影、以及用户对电影的评分。数据集详细信息如表1所示:

Table 1. Movielens ml-1m dataset overview
表1. Movielens ml-1m数据集概况
Spyder (Python3.6)作为工具,来进行运行测试。将数据集以8:2的比例划分训练数据集和测试数据集。将隐语义模型,增加偏置项隐语义模型以及基于小批量梯度下降法的个性化推荐模型三种方法运行结果进行对比。三种方法训练过程如图1、图2、图3所示,横坐标为迭代步数(30次),纵坐标为RMSE和MAE的值。

Figure 2. Latent factor model based on bias
图2. 增加偏置项隐语义模型

Figure 3. Personalized recommendation model based on Mini-Batch Gradient Descent
图3. 基于小批量梯度下降法的个性化推荐模型
三种模型实验结果如表2所示:

Table 2. Experimental results of the three models)
表2. 三种模型实验结果
通过图片可以看出三种方法其训练过程都逐渐趋于收敛。在实验结果中,可以看出每种方法求得最优解的α参数都不同,这是一个需要根据实验环境不断调整的重要参数,如果α参数设置不适当,很有可能会导致出现Nan值等问题。对比三种方法的RMSE、MAE值,基于小批量梯度下降法个性化推荐模型要低于前两者,说明此模型的精确度是优于前两者。同时三种方法在运行时间上有着鲜明的对比,在百万数据集的运行中,传统的隐语义模型需要约519秒的时间,增加偏置项隐语义模型由于增加了两个参数,虽然精度提高了,但是运行时间也增加了,需要约569秒的时间。而基于小批量梯度下降法个性化推荐模型的运行时间大幅度减少,只需要约20秒,平均每次循环只需要0.6秒,大大提高了运行效率,节省了时间。
基于小批量梯度下降法的推荐预测模型涉及的另一个重要参数便是批量的大小batch size,设置合理的批量参数可以提高算法的性能效率,通常会设置2的幂数 [16] 来迎合cpu gpu的内存要求,从而获得最佳的训练稳定性和较高的运行速率。设置不同大小的批量规模进行实验,对比结果见表3:

Table 3. Experimental results of operation in different batch sizes)
表3. 不同批量规模运行实验结果
由实验结果可以看出,当批量设置较小batch size = 64或者过大batch size = 2048时,精确度结果都不尽人意。当batch size = 1024时,得到RMSE = 0.903,MAE = 0.714的最优值。由此可知只有选择了合理批量规模,才会使RMSE和MAE值达到最低,得到最优推荐精度。而对于基于小批量梯度下降法的个性化推荐模型的批量设置,应结合数据的规模以及设备的计算能力,通过多次试验,来选择合理的样本批量。
在运行时间中可以看出,批量设置的越大,运行时间越短。所以验证了在大规模数据下,和随机梯度下降相比,使用小批量(mini-batch)梯度下降方法的计算效率更高,减少很多运行时间,可以帮助快速训练模型。
7. 结论
在隐语义模型中,针对随机梯度下降法会造成目标函数震荡、准确度欠缺等问题,选择用小批量梯度下降法对目标函数进行优化,提出基于小批量梯度下降法的个性化推荐模型,该模型通过批量数据共同决定步长的梯度方向,减少了目标函数最优解的随机性与震荡性,提高准确度,同时缩短了大量运行时间。但是,如何有效快速地找到合理的超参数批量大小以及学习速率仍值得继续研究。
基金项目
北京市社会科学基金项目“‘互联网+’环境下北京公共信息流动机制及协同获取模式研究”(No. 16SRB021)。