机器学习笔记-Matrix Factorization

林轩田机器学习技法关于特征学习系列,其中涉及到 Neural Network Backpropagation Algorithm Deep Learning Autoencoder
PCA Radial Basis Function Network K -Means Matrix Factorization 等。

Linear Network Hypothesis

上一篇介绍了 RBF Network ,简单来说这个模型可以看成是由到很多不同的中心点的相似性的线性组合,其中使用聚类算法 k -Means来计算中心点。

机器学习算法的目的是希望能从资料 data 中学习到某种能力 skill 。例如一个经典的场景是,从用户对电影的历史评分中学习如何预测或者推荐给用户可能喜欢的电影。对于这样的场景我们得到的资料可能是这样的 {(ui,mj,rij)n},n=1,2,,N ,其中每一条资料的含义是第 i 个用户 ui 对第 j 部电影 mj 的评分为 rij
需要注意的是, 这样的资料和我们之前喂给机器学习的资料有很大的不同, 对于每一个用户来说, 我们只有一个编号代表该用户,而没有关于该用户的任何具体的信息,例如该用户性别,年龄等等,所以这样的特征我们称之为抽象的特征。

本篇要介绍的内容就是如何从这些用户的编号和评分的历史中学习用户的偏好。进而对用户进行电影的推荐,具体使用的方法为矩阵分解 matrix factorization

我们将取值没有数值上的大小关系的特征称为 categorical feature 。例如用户的 ID11266211 等,血型: ABABO ,程序设计语言的种类: CpythonJava 等。但是我们之前介绍的学习算法大多数来说都是针对数值型 numerical features 资料而言的,例如线性模型:线性回归,逻辑斯蒂回归等这些涉及到计算分数 score=wTx 的;或者是线性模型的延伸,例如神经网络,不管是其中的前向传播还是反向传播都需要依赖于数值的计算。也有一些方法可以用来直接处理非数值型的特征, 例如 decision tree ,以及基于 decision tree 的算法 random forest 或者是 gradient boosted decision tree

所以为了能够很好的处理类别型 categorical feature 数据,首先需要做的是对特征进行编码,转换为数值型的特征。例如采用一种非常简单的数值编码方式 binary vector encoding 对血型进行编码的结果是:

A=[1 0 0 0]T,B=[0 1 0 0]TAB=[0 0 1 0]TO=[0 0 0 1]T

对电影评分数据中的用户编码采用如上的方式进行编码,并且整理可以得到形式如下的数据:

{(xn=(0 0  n 0)N,  yn=[rn1 ? ? rn4  rnM]T}

这样的一条数据就完全描述了第 n 个用户的信息,其中xn这样的表示方式也可以被称为是 one hot representation ,其长度为所有用户的个数 N ,且只有一个维度上的取值为 1, 其余都为 0 yn表示该用户 xn 对所有电影的评分,该向量的长度为所有电影的个数 M ,其中 ? 表示还没有看过该部电影。

接下来我们就是想要从这样的资料当中去学习或者说萃取每一个用户的偏好,将这些偏好作为描述用户的特征,然后对用户做推荐。我们之前介绍过的对数据进行特征抽取的一个典型的方法是神经网络,所以在这里利用如下所示的模型从用户的 one hot representation 中进行特征的抽取,与 neural network 不同的是, 隐层的神经元中的激活函数使用线性函数替代 tanh , 所以这样的模型也被称为是 Linear Network


这里写图片描述

将第一层中所有的权重用矩阵 VT 表示,例如针对上面的图有:

VT=w(1)11w(1)12w(1)21w(1)22w(1)31w(1)32w(1)41w(1)42N×d~=[w(1)1w(1)2]

第二层中所有的权重用矩阵 W 表示,例如:

W=w(2)11w(2)12w(2)13w(2)21w(2)22w(2)23d~×M=[w(2)1w(2)2w(2)3]

这样定义之后该模型可以描述为:

h(x)=WTVx(1)

其维度为 (M×d~)×(d~×N)×(N×1)=(M×1) 。根据线性代数的知识,只有第 n 个元素为1,其余都是 0 的向量x左乘一个矩阵相当于取该矩阵的第 n vn。所以 1 式可以变为
h(xn)=WTvn(2)

其中 vn 可以理解为经过抽取或者特征转换得到的用户的偏好。 (2) 式这样的模型通常用在推荐系统 recommender system 中,接下来我们的任务就是从数据中利用学习算法学习到好的 V :可以抽取到用户潜在的特征学习到好的W:结合经过抽取之后的用户的偏好拟合用户喜欢的电影。

Basic Matrix Factorization

上一小节中 (2) 式得到了一个用户 xn 对所有的电影的评分向量,进一步可以得到某一个用户 n 对某一部电影 m 的评分,其计算公式如下:

h(xn)=wTmvn

我们想要 rnmwTmvn ,可以利用我们熟悉的 squared error 来做到:
Ein({vm},{vn})=user n rated movie m(rnmwTmvn)2

如果我们能够最小化 Ein 那么我们就同时学到了两件事情:

  • 如何对原始的用户向量做特征转换,或者说是提取用户的特征
  • 如何组合用户的特征进行得分的预测

将所有用户对电影的评分构成一个 R 矩阵,想要做到rnmwTmvn 可以理解为想要将矩阵 R 分解为 VT W 的乘积。其中vTn是经过转换之后用户的特征, wm 可以理解为是电影的特征,或者电影对用户特征的组合权重。


这里写图片描述

矩阵分解这样的方式经常用来将抽象的特征,例如用户的 ID , 电影的 ID ,转化为有意义可以进一步做处理的特征。

Matrix Factorization Learning

下面来解决如何进行学习的问题:

minW,VEin({vm},{vn})=user n rated movie m(rnmwTmvn)2=m=1M((xn,rnm)Dm(rnmwTmvn)2)

可以看到有两组需要最优化的变量,可以使用在上一篇中求解 k -Means的方法 alternating minimization 来解决, 其基本的思路是:

  • 当所有的 vn 已经固定的时候:求解所有的 wm 就变成了求解 M 个互不相关的线性回归问题,其中在求解每一个wm的时候,其输入的资料为 {(vn,rnm)},n=1,,N
  • 当所有的 wm 已经固定的时候:从上面的讨论可以看到,其实 V W是对称的关系。当 wm 固定的时候,可以理解为已经学习到了电影特征,求解所有的 vn 就变成了求解 N 个互不相关的线性回归问题,其中在求解每一个vn的时候,其输入的资料为 {(wm,rnm)},m=1,,M

该算法被称为是 alternating least squests algorithm 。直观上讲就是对 w v交互的做 linear regression

Alternating least squests algorithm

  • initialize d~ dimension vector {wm},{vn}
  • alternating optimization of Ein: repeatedly
    • optimize w1,,wM:
      • update wm by linear regression on {(vn,rnm)}
    • optimize v1,,vN:
      • update vn by linear regression on {(wm,rnm)}
  • until converge


这里写图片描述

即, 首先随机的初始化长度为 d~ 的向量 v1,,vN,w1,,wM 。首先利用所有评价过第一部电影的用户的数据 {(v1,r11),,(vs,rs1),,} 优化 w1 ,然后优化 w2,,wM ;再利用已经优化好的 W 来优化V, 直到收敛。

Linear autoencoder versus matrix factorization

之前介绍的 Linear autoencoder 希望通过神经网络将原始的 X 矩阵经过编码和解码的过程得到和X相似的矩阵,即 XW(WTX) ,这也可以看成是一个矩阵分解的过程。下面对 Linear autoencoder matrix factorization 做一个简单的比较。

Linear autoencoder 使用一个 d -d~- d 的线性神经网络架构,matrix factorization也是使用一个 N -d~- M 的线性神经网络架构;两者都是使用squared error来作为损失函数,不同的是,前者在所有的 xni 上进行计算,后者只能在已知的 rnm 上做计算;前者可以通过计算 XTX 的最大的特征值得到全局最优解,但后者只能通过 alternating least squares 算法来得到局部最佳解。前者主要用来做数据的降维,后者用来萃取潜藏在 user item 中的特征。

Stochastic Gradient Descent

上一小节介绍了使用 alternating least squests algorithm 这样的算法来解决 matrix factorization 。这一小节尝试使用 stochastic gradient descent 来求解 matrix factorization
简单介绍下 stochastic gradient descent 的思路, 如果在 Ein 中包含一个求和的操作(如下所示),即,要在所有的样本误差和上求取梯度来确定变量的更新方向,这时可以通过只计算一个随机抽取的样本的误差的梯度来代替。

Ein({wm},{vn})=user n rated movie m(rnmwTmvn)2err(user n,movie m,rating rnm)

因为 err(user n,movie m,rating rnm)=(rnmwTmvn)2
所以:

vnerr(user n,movie m,rating rnm)=2(rnmwTmvn)wmwmerr(user n,movie m,rating rnm)=2(rnmwTmvn)vn

SGD for Matrix Factorization

SGD for Matrix Factorization

initialize d~ dimension vectors {wm},{vn} randomly
for t=0,1,,T

  • randomly pick (n,m) within all known rnm
  • calculate residual r¯nm=(rnmwTmvv)
  • SGD update :
    • vnewnvoldn+ηr¯nmwoldm
    • wnewmwoldm+ηr¯nmvoldn

如果是一个大型的矩阵分解问题,通常会使用 SGD 算法。

Summary of Extraction Models

这四篇的主题是 Extraction Model ,概述的来讲,在这样的模型当中,通常最后一层还是要做一个简单的线性模型,但是在此之前我们希望把特征转换或者是特征抽取也纳入学习的过程,也就是要从资料中学习怎么表达资料有利于算法的预测结果。

Extraction Model

对于 neural network 及其延伸 deep learning ,其输出层的权重可以理解为是一个(输出层只有一个神经元)或者很多个(输出层有多个神经元)线性模型的权重,其余层权重用来对数据进行转换或者说特征抽取。在 RBF Network matrix factorization 中,同样可以理解为这样的架构。只不过在 matrix factorization 中,我们既可以说是抽取了用户的特征,在第二层中对用户的特征进行线性组合, 也可以说是抽取了电影的特征,在第二层中对电影的特征进行线性组合。
其实对于 aggregation model ,那些 g 可以看成是特征的转换,最后对所有g进行通过系数 α 进行组合。
甚至 kNN 也可以看成是这样的模型,其特征转换的方式就是找邻域内的其它点,最后组合这些点的 label 做出决策。

Extraction Techniques

这个过程中也涉及到了很多从数据中进行特征抽取的技巧,例如在 Adaptive/Gradient Boosting 中通过 functional gradient descent 推导出 g ;在Neural Network/DeepLearning中通过 BP 算法有效的计算权重的更新的方向,并且介绍了利用 autoencoder 的机制来得到一个比较好的初始权重;在 RBFNetwork 中同样是使用一个无监督学习算法 k Means 来得到一种对资料进行转换的方式。通过 deep learning 中做 pre training autoencoder RBFNetwork 中确定中心点的 k Means 我们可以看到无监督学习在提取资料的特征这方面可能是非常有用的。在 Matrix Factorization 中可以使用 SGD alternating least SQR 来进行特征的抽取。

Pros and Cons of Extraction Models

最后来总结下这些特征抽取的模型有什么好处, 以及有什么缺陷。首要的好处是这样的模型可以帮助我们自动完成特征的抽取,而不必要人为的去思考设计抽取有用的特征。同时这样的模型是非常 powerful 的,只要包含有足够多的 hidden variables 。其缺点主要有,难于进行最优化,因为这些模型所对应的最优化问题大多是非凸的,另一问题是这样的模型由于非常的强大,所以有很大的可能性会发生过拟合,所以在这样的模型当中, regularization validation 就显得非常的重要。

总结

本篇主要的内容是 matrix factorization 。首先使用 linear network 从用户原始的 one hot representation 中抽取用户的特征。之后讲解了求解 matrix factorization 的两种方法。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值