# 矩阵分解的原理是什么?求解的主要方法有哪些?
矩阵分解算法期望为每一个用户和物品生成一个隐向量,将用户和物品定位到隐向量的表示空间上,距离相近的用户和视频表明兴趣特点接近,推荐过程中把距离相近的视频推荐给目标用户。
具体地,用户和物品的隐向量是通过分解协同过滤生成的共现矩阵得到的,它将
基于用户矩阵
矩阵分解主要方法有特征值分解、奇异值分解和梯度下降。其中特征值分解只能用于方阵,不适用于分解用户-物品。奇异值分解在互联网场景下复杂度和适用性不足,梯度下降是常用的求解方法。
# 使用奇异值分解SVD进行矩阵分解时存在哪些问题?
SVD分解的形式为3个矩阵相乘,左右两个矩阵分别表示用户/项目隐含因子矩阵,中间矩阵为奇异值矩阵并且是对角矩阵,每个元素满足非负性,并且逐渐减小。
SVD分解的前提是要求矩阵是稠密的,即矩阵里的元素要非空,否则就无法运用SVD分解.
所以在分解之前必须要先使用均值或者其他方法进行矩阵填充为稠密矩阵,再进行SVD分解降维。
# 如何从深度学习模型的角度来认识矩阵分解模型
矩阵分解层的用户隐向量和物品隐向量可以看做是一种Embedding方法,最终的Scoring层就是将用户隐向量和物品隐向量进行内积操作后得到“相似度”,这里的“相似度”就是对评分的预测。
实际使用矩阵分解训练和评估模型的过程中,因为矩阵分解的模型结构相对简单,而且输出层无法对优化目标进行有效的拟合,往往会发现模型容易处于欠拟合的状态。
# 矩阵分解算法中,隐向量的长度k的取值是如何影响效果和工程开销的?
矩阵分解中,
此外,
# 请简述奇异值分解的过程。奇异值分解存在什么缺陷?为什么不适用于互联网场景下的求解?
假设共现矩阵
取对角阵
但奇异值分解存在着两点缺陷,使之不适用于互联网场景下的矩阵分解求解:
1)奇异值分解要求原始的共现矩阵是稠密的。而互联网场景下大部分用户的行为历史非常少,用户-物品的共现矩阵非常稀疏,如果应用奇异值分解,就必须对缺失的元素值进行填充。
2)传统奇异值分解的计算复杂度达到了
# 请简述梯度下降法求解用户-物品隐向量的过程。
根据预估评分
为减少过拟合,加入正则化项:
对
对
然后沿着梯度反向更新参数:
当迭代次数超过上限或损失函数值低于阈值时,结束训练。
# 如何解决矩阵分解中用户和物品打分偏差的问题?
不同用户的打分体系不一样,不同物品的衡量标准也不同,为了消除用户和物品的打分偏差,可以再矩阵分解时加入用户和物品的偏差向量:
此时,矩阵分解目标函数也发生相应改变:
# 如何将隐式反馈信息用于用户偏好建模的矩阵分解中?
用户除了对于项目的显式历史评分记录外,浏览记录或者收藏列表等隐反馈信息同样可以从侧面一定程度上反映用户的偏好,比如用户对某个项目进行了收藏,可以从侧面反映他对于这个项目感兴趣,具体反映到预测公式为:
其中
# 如何将用户的兴趣随时间动态变化的这一点融合到矩阵分解模型中?
用户的兴趣或者偏好不是一成不变的,而是随着时间而动态演化。于是提出了timeSVD,其中用户的和物品的偏置随着时间而变化,同时用户的隐含因子也随着时间而动态改变,在此物品的隐含表示并未随时间而变化(假设物品的属性不会随着时间而改变)。
其中,
# 为什么矩阵分解出来的矩阵需要满足非负约束?
在大部分方法中,原始矩阵
其中,