浅析张量分解(TensorDecomposition)

浅析张量分解(TensorDecomposition)
⼀般⼀维数组,我们称之为向量(vector),⼆维数组,我们称之为矩阵(matrix);三维数组以及多位数组,我们称之为张量(tensor)。
刘秀发明了共享
在介绍张量分解前,我们先看看矩阵分解相关知识概念。
⼀、基本概念
矩阵补全(Matrix Completion)⽬的是为了估计矩阵中缺失的部分(不可观察的部分),可以看做是⽤矩阵X近似矩阵M,然后⽤X中的元素作为矩阵M中不可观察部分的元素的估计。
矩阵分解(Matrix Factorization)是指⽤ A*B 来近似矩阵M,那么 A*B 的元素就可以⽤于估计M中对应不可见位置的元素值,⽽A*B可以看做是M的分解,所以称作Matrix Factorization。
这是因为协同过滤本质上是考虑⼤量⽤户的偏好信息(协同),来对某⼀⽤户的偏好做出预测(过滤),那么当我们把这样的偏好⽤评分矩阵M表达后,这即等价于⽤M其他⾏的已知值(每⼀⾏包含⼀个⽤户对所有商品的已知评分),来估计并填充某⼀⾏的缺失值。若要对所有⽤户进⾏预测,便是填充整个矩阵,这是所谓“协同过滤本质是矩阵填充”。
那么,这⾥的矩阵填充如何来做呢?矩阵分解是⼀种主流⽅法。这是因为,协同过滤有⼀个隐含的重要假设,可简单表述为:如果⽤户A和⽤户B同时偏好商品X,那么⽤户A和⽤户B对其他商品的偏好性有更⼤的⼏率相似。这个假设反映在矩阵M上即是矩阵的低秩。极端情况之⼀是若所有⽤户对不同商品的偏好保持⼀致,那么填充完的M每⾏应两两相等,即秩为1。
所以这时我们可以对矩阵M进⾏低秩矩阵分解,⽤U*V来逼近M,以⽤于填充——对于⽤户数为m,商
品数为n的情况,M是m*n的矩阵,U 是m*r,V是r*n,其中r是⼈⼯指定的参数。这⾥利⽤M的低秩性,以秩为r的矩阵M’=U*V来近似M,⽤M’上的元素值来填充M上的缺失值,达到预测效果。
⼆、矩阵分解常⽤⽅法
Basic mf
Basic MF是最基础的分解⽅式,将评分矩阵R分解为⽤户矩阵U和项⽬矩阵S, 通过不断的迭代训练使得U和S的乘积越来越接近真实矩阵,矩阵分解过程如图:
电力设施保护条例预测值接近真实值就是使其差最⼩,这是我们的⽬标函数,然后采⽤梯度下降的⽅式迭代计算U和S,它们收敛时就是分解出来的矩阵。我们⽤损失函数来表⽰误差(等价于⽬标函数):
上式中R_ij是评分矩阵中已打分的值,U_i和S_j相当于未知变量。为求得公式1的最⼩值,相当于求关
于U和S⼆元函数的最⼩值(极⼩值或许更贴切)。通常采⽤梯度下降的⽅法:
依他 是学习速率,表⽰迭代的步长。其值为1.5时,通常以震荡形式接近极值点;若<1迭代单调趋向极值点;若>2围绕极值逐渐发散,不会收敛到极值点。具体取什么值要根据实验经验。
Regularized mf
正则化矩阵分解是Basic MF的优化,解决MF造成的过拟合问题。其不是直接最⼩化损失函数,⽽是在损失函数基础上增加规范化因⼦,将整体作为损失函数。
红线表⽰正则化因⼦,在求解U和S时,仍然采⽤梯度下降法,此时迭代公式变为:
其中,
梯度下降结束条件:f(x)的真实值和预测值⼩于⾃⼰设定的阈值
刘震云百度百科
三、张量CP分解
CP分解的张量形式:
将⼀个张量表⽰成有限个秩⼀张量之和,⽐如⼀个三阶张量可以分解为
因⼦矩阵:秩⼀张量中对应的向量组成的矩阵,如
利⽤因⼦矩阵,⼀个三阶张量的CP分解可以写成展开形式
CP分解的计算:
以⼀个三阶张量X为例,假定成分个数R已知,⽬标为:
作为ALS的⼀个⼦问题,固定B和C,求解A;固定A和C求解B;再固定B和C求解A。⽐如固定B和C,求解A如下:
得到:
再通过归⼀化分别求出A和
四、张量Tucker分解
Tucker分解是⼀种⾼阶的主成分分析,它将⼀个张量表⽰成⼀个核⼼(core)张量沿每⼀个mode乘上⼀个矩阵。
对于三阶张量 来说,其Tucker分解为
容易看出,CP分解是Tucker分解的⼀种特殊形式:如果核⼼张量是对⾓的,且P=Q=R,则Tucker分解就退化成了CP分解。
三阶Tucker分解的展开形式为
Tucker分解可以推⼴到⾼阶张量
Tucker分解的计算
HOSVD:利⽤SVD对每个mode做⼀次Tucker1分解(截断或者不截断)。HOSVD不能保证得到⼀个较好的近似,但HOSVD的结果可以作为⼀个其他迭代算法(如HOOI)的很好的初始解。
为了导出HOOI迭代算法,先考虑⽬标函数:
从⽽应该满⾜
⽬标函数的平⽅变为:
所以问题可以进⾏如下转化:
利⽤交替求解的思想,问题变为解如下⼦问题:
五、张量分解相关开源库
幸运的是,现在已经有不少封装好的开源的张量分解相关的库,⽀持matlab,C++,python等多种语⾔。
Matlab: N-way Toolbox,CuBatch,PLS_Toolbox,Tensor Toolbox.
C++:HUJI Tensosr Library(HTL)
⾥⾯提供的函数主要有如下:
1、ALS交替最⼩⼆乘法求张量CP分解
P = CP_ALS(X,R)——计算张量X秩为R的最佳近似CP分解,P=[P.lambda, P.U]
[P,U0,out] = CP_ALS(…) also returns additional output that contains the input parameters.
% Examples:
% X = sptenrand([5 4 3], 10);
% P = cp_als(X,2);
% P = cp_als(X,2,’dimorder’,[3 2 1]);
% P = cp_als(X,2,’dimorder’,[3 2 1],’init’,’nvecs’);
% U0 = {rand(5,2),rand(4,2),[]}; %<– Initial guess for factors of P
% [P,U0,out] = cp_als(X,2,’dimorder’,[3 2 1],’init’,U0);
% P = cp_als(X,2,out.params); %<– Same params as previous run稻绿蝽
2、交替泊松回归求张量X的⾮负CP分解
M = CP_APR(X, R) computes an estimate of the best rank-R
郑祖康M = CP_APR(X, R, ‘param’, value, …)
[M,M0] = CP_APR(…) also returns the initial guess.
[M,M0,out] = CP_APR(…) also returns additional output.
3、乘数更新求⾮负CP分解
cp_nmu - Compute nonnegative CP with multiplicative updates.
cp_opt - Fits a CP model to a tensor via optimization.
cp_wopt - Fits a weighted CP model to a tensor via optimization.
create_guess - Creates initial guess for CP or Tucker fitting.
create_problem - Create test problems for tensor factorizations.
export_data - Export tensor-related data to a file.
import_data - Import tensor-related data to a file.
Y=khatrirao(A,B) 计算具有相同列数的矩阵A和B的khatri-rao积
4、构造稀疏均匀随机张量
sptenrand - Sparse uniformly distributed random tensor.
R=sptenrand(sz,density) creates a random sparse tensor of the specified sz with approximately density*prod(sz) nonzero entries.
R = sptanrand(sz,nz) creates a random sparse tensor of the specified sz with approximately nz nonzero entries.
% Example: R = sptenrand([5 4 2],12);
5、HOOI算法做张量Tucker分解
tucker_als - Higher-order orthogonal iteration.
举例:
% X = sptenrand([5 4 3], 10);
% T = tucker_als(X,2); %<– best rank(2,2,2) approximation
% T = tucker_als(X,[2 2 1]); %<– best rank(2,2,1) approximation
% T = tucker_als(X,2,’dimorder’,[3 2 1]);
周建人
% T = tucker_als(X,2,’dimorder’,[3 2 1],’init’,’nvecs’);
% U0 = {rand(5,2),rand(4,2),[]}; %<– Initial guess for factors of T
% T = tucker_als(X,2,’dimorder’,[3 2 1],’init’,U0);
6、各种矩阵,张量乘积等
六、张量分解应⽤
因为做的是跟交通有关的研究,前段时间看过⼀个张量分解在轨迹时间预测上的应⽤,列出来作为参考学习。

本文发布于:2024-09-22 03:27:21,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/531267.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:矩阵   分解   迭代   函数   极值   作为   过滤   预测
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议