赞
踩
最近在学习张量相关,按照自己的理解总结了一下csdn上大佬们的资料,以供后续及时学习。具体学习流程可以借鉴:张量分解的学习和理解_WenbinYao&YouweiHu的博客-CSDN博客_张量分解的意义
张量分解学习(一 基础铺垫)_西瓜皮装猕猴桃的博客-CSDN博客
如果理解总结有误,欢迎大家指出~
张量可以理解为多维数组。一般一维数组,我们称之为向量(vector),二维数组,我们称之为矩阵(matrix);三维数组以及多位数组,我们称之为张量(tensor)。
张量可以存储对象更多的信息,比如图像(记录高度、宽度、颜色深度)、视频(记录高度、宽度、颜色深度、样本数、帧数)等,多用于深度学习中。
1、纤维
纤维是指从张量中抽取向量的操作。在矩阵中固定其中一个维度,可以得到行或者列。
张量的行定义为mode-1 fibers,符号为
张量的列定义为mode-2fibers,符号为
张量的高定义为mode-3fibers,符号为
2、切片
切片是指从张量中抽取矩阵的操作。对图中的张量分别按照I,J,K三个方向进行操作可以得到如下图所示的,,三个维度的切片。
3、张量的内积( innner product)
两个大小相等的张量对应位置元素相乘后在相加得到的标量即为张量内积。符号表示为<A,B>
4、张量外积(outer product)
张量外积为两个张量相乘在维度上的延伸。结果中每一维的元素对应的是这两个张量元素在这维的乘积。举个例子,比如两个向量外积就为一个矩阵,三个向量的外积就可以构成三维的空间。感觉有点像用火柴棒搭出图形(每个火柴棒可以看做一位的向量)。可以看图:
5、张量的模积
即张量与矩阵(或向量,只要比他低维就可)相乘,这时候就要用到纤维的思想,将张量抽取为一条条的向量与对象相乘。正式的定义如下:
在此对定义进行通俗的解释,就是张量的众多维度中,需要有一个阶包括的元素和矩阵U的阶相等,那么n模积就是将其中的用J替换。从维度上看,模积过后结果仍然是张量对应的维度(因为矩阵的两个维度上都大于1)。
对于张量和向量模积,和矩阵相乘的模积相似,向量对应的那一阶包括的元素要与张量中的相同,此时J=1,所以替换过去的话张量会降一维。
张量分解的目的,个人感觉是将一个大家伙拆分成一些小家伙,这样子更加方便运算;并且还可以通过分解张量去预测原来张量中的缺失值。
1、CP分解
将已知张量分解为若干个秩一张量的和(注:秩一张量指三个向量外积得到的向量)。如果一个张量能够以n个秩一张量的和表示,那么其秩为n。
我们可以以公式写出秩R的张量T:
其中 A = (a1,a2……aR) , B = (b1,b2……bR) , C = (c1,c2……cR)。A,B,C称为因子矩阵。
这个公式即是张量的CP分解。利用因子矩阵,一个三阶张量的CP分解可以写成展开形式
求解CP分解一般用的算法是交替最小二乘法(ALS)算法。
交替最小二乘法(ALS)算法:
为了找到使得矩阵A,B,C的乘积尽可能地逼近张量,采用最小化平方误差损失函数。
应用ALS,就是通过固定 B和 C 来求解 A , 固定 A和 B 来求解 C ,固定 A 和 C来求解 B ,就这样一直重复这个过程,直至满足某些收敛准则。
例如,当 B和 C固定时,这就变成了一个简单的线性最小二乘问题,上面的最小化目标函数的形式也可以根据CP分解的矩阵展开形式重写为以下这样:
之后不断地重复这个过程,直到满足某些收敛条件(例如, A B C不再变化,与原始张量的距离足够接近,或者达到了事先设定好地最大迭代轮数等等就可以求出需要的矩阵,并将该矩阵的数值带入,继续迭代求出剩余的矩阵。
2、tucker分解
Tucker分解可以看作是主成分分析(PCA)的一种高阶版本,其将张量分解为一个核张量与每一维度上对应矩阵的乘积。具体来说,以三阶张量 为例,其Tucker分解写为
其中, 是不同维度上的因子矩阵,这些矩阵通常被认为是不同维度上的主成分。称为核张量,其中的每个元素代表了不同成分之间的交互程度。
Tucker分解的矩阵化版本为
其中CP分解可以看做tucker分解的特殊情况,看图~
求解tucker分解的方法有HOSVD和HOOL,目前还么有看明白,等学会了再补全一下文章。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。