林轩田机器学习技法关于特征学习系列,其中涉及到
Neural Network
,
Backpropagation Algorithm
,
Deep Learning
,
Autoencoder
,
PCA
,
Radial Basis Function Network
,
K
-
- 机器学习笔记-Neural Network
- 机器学习笔记-Deep Learning
- 机器学习笔记-Radial Basis Function Network
- 机器学习笔记-Matrix Factorization
Linear Network Hypothesis
上一篇介绍了
RBF Network
,简单来说这个模型可以看成是由到很多不同的中心点的相似性的线性组合,其中使用聚类算法
k
-
机器学习算法的目的是希望能从资料
data
中学习到某种能力
skill
。例如一个经典的场景是,从用户对电影的历史评分中学习如何预测或者推荐给用户可能喜欢的电影。对于这样的场景我们得到的资料可能是这样的
{(ui,mj,rij)n},n=1,2,⋯,N
,其中每一条资料的含义是第
i
个用户
需要注意的是, 这样的资料和我们之前喂给机器学习的资料有很大的不同, 对于每一个用户来说, 我们只有一个编号代表该用户,而没有关于该用户的任何具体的信息,例如该用户性别,年龄等等,所以这样的特征我们称之为抽象的特征。
本篇要介绍的内容就是如何从这些用户的编号和评分的历史中学习用户的偏好。进而对用户进行电影的推荐,具体使用的方法为矩阵分解 matrix factorization 。
我们将取值没有数值上的大小关系的特征称为 categorical feature 。例如用户的 ID:1126,6211 等,血型: A,B,AB,O ,程序设计语言的种类: C,python,Java 等。但是我们之前介绍的学习算法大多数来说都是针对数值型 numerical features 资料而言的,例如线性模型:线性回归,逻辑斯蒂回归等这些涉及到计算分数 score=wTx 的;或者是线性模型的延伸,例如神经网络,不管是其中的前向传播还是反向传播都需要依赖于数值的计算。也有一些方法可以用来直接处理非数值型的特征, 例如 decision tree ,以及基于 decision tree 的算法 random forest 或者是 gradient boosted decision tree 。
所以为了能够很好的处理类别型
categorical feature
数据,首先需要做的是对特征进行编码,转换为数值型的特征。例如采用一种非常简单的数值编码方式
binary vector encoding
对血型进行编码的结果是:
对电影评分数据中的用户编码采用如上的方式进行编码,并且整理可以得到形式如下的数据:
这样的一条数据就完全描述了第 n 个用户的信息,其中
接下来我们就是想要从这样的资料当中去学习或者说萃取每一个用户的偏好,将这些偏好作为描述用户的特征,然后对用户做推荐。我们之前介绍过的对数据进行特征抽取的一个典型的方法是神经网络,所以在这里利用如下所示的模型从用户的 one hot representation 中进行特征的抽取,与 neural network 不同的是, 隐层的神经元中的激活函数使用线性函数替代 tanh , 所以这样的模型也被称为是 Linear Network 。
将第一层中所有的权重用矩阵 VT 表示,例如针对上面的图有:
第二层中所有的权重用矩阵 W 表示,例如:
这样定义之后该模型可以描述为:
其维度为 (M×d~)×(d~×N)×(N×1)=(M×1) 。根据线性代数的知识,只有第 n 个元素为
其中
vn
可以理解为经过抽取或者特征转换得到的用户的偏好。
(2)
式这样的模型通常用在推荐系统
recommender system
中,接下来我们的任务就是从数据中利用学习算法学习到好的
V
:可以抽取到用户潜在的特征;学习到好的
Basic Matrix Factorization
上一小节中
(2)
式得到了一个用户
xn
对所有的电影的评分向量,进一步可以得到某一个用户
n
对某一部电影
我们想要 rnm≈wTmvn ,可以利用我们熟悉的 squared error 来做到:
如果我们能够最小化 Ein 那么我们就同时学到了两件事情:
- 如何对原始的用户向量做特征转换,或者说是提取用户的特征
- 如何组合用户的特征进行得分的预测
将所有用户对电影的评分构成一个
R
矩阵,想要做到
矩阵分解这样的方式经常用来将抽象的特征,例如用户的 ID , 电影的 ID ,转化为有意义可以进一步做处理的特征。
Matrix Factorization Learning
下面来解决如何进行学习的问题:
可以看到有两组需要最优化的变量,可以使用在上一篇中求解
k
-
- 当所有的
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
和
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)}
-
optimize w1,⋯,wM:
- until converge
即, 首先随机的初始化长度为
d~
的向量
v1,⋯,vN,w1,⋯,wM
。首先利用所有评价过第一部电影的用户的数据
{(v1,r11),⋯,(vs,rs1),⋯,}
优化
w1
,然后优化
w2,⋯,wM
;再利用已经优化好的
W
来优化
Linear autoencoder versus matrix factorization
之前介绍的
Linear autoencoder
希望通过神经网络将原始的
X
矩阵经过编码和解码的过程得到和
Linear autoencoder
使用一个
d
-
Stochastic Gradient Descent
上一小节介绍了使用
alternating least squests algorithm
这样的算法来解决
matrix factorization
。这一小节尝试使用
stochastic gradient descent
来求解
matrix factorization
。
简单介绍下
stochastic gradient descent
的思路, 如果在
Ein
中包含一个求和的操作(如下所示),即,要在所有的样本误差和上求取梯度来确定变量的更新方向,这时可以通过只计算一个随机抽取的样本的误差的梯度来代替。
因为
err(user n,movie m,rating rnm)=(rnm−wTmvn)2
所以:
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=(rnm−wTmvv)
-
SGD update
:
- vnewn⟵voldn+η⋅r¯nmwoldm
- wnewm⟵woldm+η⋅r¯nmvoldn
如果是一个大型的矩阵分解问题,通常会使用 SGD 算法。
Summary of Extraction Models
这四篇的主题是 Extraction Model ,概述的来讲,在这样的模型当中,通常最后一层还是要做一个简单的线性模型,但是在此之前我们希望把特征转换或者是特征抽取也纳入学习的过程,也就是要从资料中学习怎么表达资料有利于算法的预测结果。
Extraction Model
对于
neural network
及其延伸
deep learning
,其输出层的权重可以理解为是一个(输出层只有一个神经元)或者很多个(输出层有多个神经元)线性模型的权重,其余层权重用来对数据进行转换或者说特征抽取。在
RBF Network
和
matrix factorization
中,同样可以理解为这样的架构。只不过在
matrix factorization
中,我们既可以说是抽取了用户的特征,在第二层中对用户的特征进行线性组合, 也可以说是抽取了电影的特征,在第二层中对电影的特征进行线性组合。
其实对于
aggregation model
,那些
g
可以看成是特征的转换,最后对所有
甚至
kNN
也可以看成是这样的模型,其特征转换的方式就是找邻域内的其它点,最后组合这些点的
label
做出决策。
Extraction Techniques
这个过程中也涉及到了很多从数据中进行特征抽取的技巧,例如在
Adaptive/Gradient Boosting
中通过
functional gradient descent
推导出
g
;在
Pros and Cons of Extraction Models
最后来总结下这些特征抽取的模型有什么好处, 以及有什么缺陷。首要的好处是这样的模型可以帮助我们自动完成特征的抽取,而不必要人为的去思考设计抽取有用的特征。同时这样的模型是非常 powerful 的,只要包含有足够多的 hidden variables 。其缺点主要有,难于进行最优化,因为这些模型所对应的最优化问题大多是非凸的,另一问题是这样的模型由于非常的强大,所以有很大的可能性会发生过拟合,所以在这样的模型当中, regularization 和 validation 就显得非常的重要。
总结
本篇主要的内容是 matrix factorization 。首先使用 linear network 从用户原始的 one hot representation 中抽取用户的特征。之后讲解了求解 matrix factorization 的两种方法。