文章目录

  • 张量补全场景
  • 三阶张量
  • 张量运算
  • 内积
  • 外积
  • Kronecker 积 (Kronecker Product)
  • Hadamard乘积(Hadamard Product)
  • Khatri-Rao乘积 (Khatri-Rao Product)
  • n-mode 乘积
  • 张量与矩阵的模乘(Mode-n Product)
  • 示例
  • 数学示例
  • 具体步骤
  • 数学表达
  • 张量与向量的模积(Mode-n Product)
  • 概念理解
  • 数学描述
  • 公式
  • 数学示例
  • 张量分解模型
  • CP 分解
  • Tucker 分解
  • 低秩假设模型
  • 优化考虑和挑战
  • 总结
  • 奇异值收缩算法
  • 算法描述
  • 应用示例
  • 优势与局限


张量补全场景

python张量的MSE_python张量的MSE

三阶张量

python张量的MSE_python张量的MSE_02

张量运算

内积

给定两个张量 python张量的MSE_张量补全_03python张量的MSE_算法_04 ,它们的内积定义为它们对应元素的乘积的总和。形式化地,张量内积可以表示为:

python张量的MSE_张量_05

其中, python张量的MSE_张量_06 分别表示张量 python张量的MSE_张量补全_03python张量的MSE_算法_04

张量内积的计算可以用于衡量两个张量之间的相似度或相关性。例如,在张量分解中,我们**可以使用内积来度量原始张量与分解后的张量之间的近似程度。**此外,张量内积还可以用于张量的正交化、投影等操作,类似于向量的内积在向量空间中的应用。

需要注意的是,张量内积的计算通常需要考虑张量的高阶性质,因此计算复杂度较高,尤其是在处理大规模高阶张量时。

外积

对于高阶张量的外积【是线性代数中的外积而非解析几何中的外积(叉乘Cross Product)】,若 python张量的MSE_张量分解_09,则张量 python张量的MSE_算法_10 和张量 python张量的MSE_python张量的MSE_11 做外积运算
将生成一个 python张量的MSE_算法_12 阶张量 python张量的MSE_张量_13, 并且张量 python张量的MSE_张量_13, 中的元素:

python张量的MSE_算法_15

Kronecker 积 (Kronecker Product)

一种用于组合两个矩阵的运算,产生一个新的矩阵的操作。

让我们来举一个简单的例子,假设有两个矩阵 python张量的MSE_张量补全_16python张量的MSE_算法_10

python张量的MSE_张量补全_18python张量的MSE_算法_19

它们的 python张量的MSE_张量_20python张量的MSE_张量分解_21

首先,我们计算 python张量的MSE_张量补全_16python张量的MSE_算法_10

python张量的MSE_算法_24python张量的MSE_python张量的MSE_25python张量的MSE_python张量的MSE_26

因此,python张量的MSE_张量分解_21

python张量的MSE_张量分解_28

这就是 python张量的MSE_张量补全_16python张量的MSE_算法_10python张量的MSE_张量_20积。

Hadamard乘积(Hadamard Product)

python张量的MSE_算法_32 乘积(Hadamard Product)是指**两个具有相同维度的矩阵(或者向量)的对应元素相乘的运算。**也就是说,给定两个相同维度的矩阵 python张量的MSE_张量补全_16python张量的MSE_算法_10 ,它们的 python张量的MSE_算法_32 乘积 python张量的MSE_张量补全_36 是一个新的矩阵,其每个元素由矩阵 python张量的MSE_张量补全_16 和矩阵 python张量的MSE_算法_10

具体来说,如果 python张量的MSE_张量补全_16python张量的MSE_算法_10 是两个相同维度的矩阵,其元素分别为 python张量的MSE_张量_41python张量的MSE_张量_42 ,那么它们的python张量的MSE_算法_32 乘积 python张量的MSE_张量补全_36 的元素为 python张量的MSE_张量补全_45

python张量的MSE_算法_32 乘积通常用符号 python张量的MSE_python张量的MSE_47 表示,以区别于矩阵的标准矩阵乘积。它与矩阵乘积的不同之处在于,python张量的MSE_算法_32

让我们来举一个简单的例子,假设有两个 python张量的MSE_算法_49 的矩阵 python张量的MSE_张量补全_16python张量的MSE_算法_10

python张量的MSE_张量补全_18python张量的MSE_算法_53

它们的 python张量的MSE_算法_32 乘积 python张量的MSE_张量补全_36

python张量的MSE_算法_56python张量的MSE_张量补全_57python张量的MSE_python张量的MSE_58

因此,python张量的MSE_张量补全_16python张量的MSE_算法_10python张量的MSE_算法_32 乘积 python张量的MSE_张量补全_36

python张量的MSE_张量分解_63

这就是 python张量的MSE_张量补全_16python张量的MSE_算法_10python张量的MSE_算法_32

Khatri-Rao乘积 (Khatri-Rao Product)

python张量的MSE_python张量的MSE_67

python张量的MSE_张量_68 乘积(Khatri-Rao Product)是一种用于组合两个矩阵列的运算,产生一个新的矩阵的操作。该运算通常用于张量分解因子分解等应用中。

给定两个矩阵 python张量的MSE_张量补全_16python张量的MSE_算法_10,它们的 python张量的MSE_张量_68 乘积 python张量的MSE_python张量的MSE_72 是一个新的矩阵,其每一列是矩阵 python张量的MSE_算法_73 的列向量与矩阵 python张量的MSE_张量补全_74

具体地,假设矩阵 python张量的MSE_张量补全_16python张量的MSE_算法_10 分别是 python张量的MSE_算法_77python张量的MSE_算法_78 的矩阵,其中 python张量的MSE_张量分解_79 是矩阵的列数(或者向量的长度)。那么它们的 python张量的MSE_张量_68 乘积 python张量的MSE_python张量的MSE_72 是一个 python张量的MSE_python张量的MSE_82 的矩阵,其每一列 python张量的MSE_张量_83 由矩阵 python张量的MSE_张量补全_16 的第 python张量的MSE_张量_83 列与矩阵 python张量的MSE_算法_10 的第 python张量的MSE_张量_83

数学上,python张量的MSE_张量_68

python张量的MSE_张量分解_89

其中,python张量的MSE_python张量的MSE_90python张量的MSE_算法_91 分别是矩阵 python张量的MSE_张量补全_16python张量的MSE_算法_10 的第 python张量的MSE_张量_94 列向量,python张量的MSE_张量分解_95

python张量的MSE_张量_68 乘积常用于张量分解和因子分解等问题中,用于构造张量的模式矩阵(模式张量)以及重构原始张量。它可以有效地表示数据的结构和关联信息,用于分析和理解多维数据。

让我们来举一个简单的例子,假设有两个 python张量的MSE_张量补全_97 的矩阵 python张量的MSE_张量补全_16python张量的MSE_算法_10

python张量的MSE_算法_100python张量的MSE_张量补全_101

它们的 python张量的MSE_张量_68 乘积 python张量的MSE_python张量的MSE_72

首先,我们将矩阵 python张量的MSE_张量补全_16 和矩阵 python张量的MSE_算法_10 的每一列向量做外积

python张量的MSE_张量_106

python张量的MSE_算法_107

因此,python张量的MSE_张量补全_16python张量的MSE_算法_10python张量的MSE_张量_68 乘积 python张量的MSE_python张量的MSE_72

python张量的MSE_张量补全_112

这就是 python张量的MSE_张量补全_16python张量的MSE_算法_10python张量的MSE_张量_68

n-mode 乘积

python张量的MSE_张量补全_116 乘积是张量分析中的一个重要操作,用于**将一个张量的某个模态(mode)与一个矩阵相乘,生成一个新的张量。**在 python张量的MSE_张量补全_116

假设我们有一个 python张量的MSE_张量_118 维张量 python张量的MSE_张量补全_03 ,其维度为 python张量的MSE_张量分解_120 ,以及一个矩阵 python张量的MSE_张量补全_16 ,其维度为 python张量的MSE_张量分解_122 。那么 python张量的MSE_算法_123 在第 python张量的MSE_张量补全_124 模态上与矩阵 python张量的MSE_算法_73 的乘积,记为 python张量的MSE_张量_126 ,可以定义为一个新的张量 python张量的MSE_算法_04 ,其维度为 python张量的MSE_张量分解_128 ,其元素 python张量的MSE_算法_129

python张量的MSE_算法_130

换句话说, python张量的MSE_张量_126 的第 python张量的MSE_张量补全_124 维度的每个元素都是 python张量的MSE_算法_123 在第 python张量的MSE_张量补全_124 维度上的切片与矩阵 python张量的MSE_算法_73

python张量的MSE_张量补全_116 乘积在张量分解、张量压缩、特征提取等领域有着广泛的应用,是处理高维数据的重要工具。

张量与矩阵的模乘(Mode-n Product)

当我们谈到张量与矩阵的模乘时,我们实际上是在说:**将张量的某一维度与一个矩阵相乘,以转换那个维度的信息。**这个操作被称为“python张量的MSE_算法_137 python张量的MSE_python张量的MSE_138”,其中“python张量的MSE_张量_118”表示张量的哪一个维度正在被转换。

示例

假设你有一个三维张量 python张量的MSE_张量补全_03 (想象为一个学生-科目-学期的数据立方体),和一个矩阵 python张量的MSE_张量分解_141 (可能是一个新的学期的映射矩阵)。python张量的MSE_张量补全_142 乘积允许你通过矩阵 python张量的MSE_张量分解_141 来转换张量 python张量的MSE_张量补全_03

数学示例

先将张量矩阵化再将张量和矩阵相乘。不同的 python张量的MSE_张量补全_142

假设有一个张量:python张量的MSE_python张量的MSE_146

python张量的MSE_张量补全_147

和一个矩阵:python张量的MSE_python张量的MSE_148

我们可以将张量 python张量的MSE_python张量的MSE_146 按照 python张量的MSE_python张量的MSE_150 python张量的MSE_张量补全_151

python张量的MSE_张量补全_152

再将得到的矩阵 python张量的MSE_张量分解_153 和矩阵 python张量的MSE_张量补全_16

python张量的MSE_张量补全_155

python张量的MSE_张量_156

具体步骤

  1. 选择维度:确定你想要转换的维度,这里我们选择“学期”(假设它是第三维)。
  2. 应用矩阵:将矩阵 python张量的MSE_张量补全_157 应用于张量 python张量的MSE_算法_123 的第三维。这意味着,对于张量中的每一“页”(学生-科目的每一层),你都用矩阵 python张量的MSE_张量补全_157 去乘这一页,相当于在更新每个学生在新学期中的科目表现预期。

数学表达

如果 python张量的MSE_张量补全_03 是一个 python张量的MSE_张量补全_161 的张量,python张量的MSE_张量分解_141 是一个 python张量的MSE_算法_163 的矩阵,那么 python张量的MSE_算法_164 乘积 python张量的MSE_python张量的MSE_165 将会产生一个新的 python张量的MSE_算法_166 的张量。这个操作在数学上通常表示为:python张量的MSE_张量_167

  • 张量 python张量的MSE_算法_123 的第三维有 python张量的MSE_张量补全_169
  • 矩阵 python张量的MSE_张量补全_157 必须有 python张量的MSE_张量补全_169 列,因为每一列将与 python张量的MSE_算法_123
  • 结果是, python张量的MSE_张量补全_157 的每一行产生的新张量 python张量的MSE_张量补全_174 的一个条目,通过将 python张量的MSE_算法_123 第三维的所有 python张量的MSE_张量补全_169 个元素与 python张量的MSE_张量补全_157 相应行的 python张量的MSE_张量补全_169
  • python张量的MSE_张量分解_179

因此, python张量的MSE_张量分解_141 的列数必须与 python张量的MSE_张量补全_03

python张量的MSE_张量补全_142 乘积的一般数学表达式如下:

python张量的MSE_算法_183

这里 python张量的MSE_python张量的MSE_184 是张量 python张量的MSE_张量补全_03 在第 python张量的MSE_张量_118

张量与向量的模积(Mode-n Product)

张量与向量的 Mode-n Product 是一个特殊情况的张量运算,其中张量的一个特定维度通过与一个向量相乘被压缩。这种操作经常用于降低张量的维度,从而集成或汇总某维度上的信息

概念理解

想象你有一个箱子,箱子里有多层不同颜色的珠子,每层珠子代表一个维度的数据。如果你想计算每层珠子的平均颜色(假设颜色可以数值化),你可能会用一个特定的向量(在这个例子中,一个等权重向量)来加权每层珠子的颜色,然后计算一个总平均值。

在张量的上下文中,这可以视为将一个高维数据(多层珠子)通过与一个向量(权重)相乘来简化成更低维的数据(颜色的平均值)。

数学描述

对于一个 N-维 张量 python张量的MSE_张量补全_03 和一个向量 python张量的MSE_张量_188 ,模-n乘积 python张量的MSE_张量_189 结果是一个 python张量的MSE_python张量的MSE_190 维张量。在这个操作中,向量 python张量的MSE_张量_188 的长度必须与张量 python张量的MSE_张量补全_03python张量的MSE_张量_118

公式

如果张量 python张量的MSE_张量补全_03 的尺寸为 python张量的MSE_python张量的MSE_195 ,向量 python张量的MSE_张量_188 的长度为 python张量的MSE_python张量的MSE_184 ,则 模-n 乘积 的结果张量 python张量的MSE_算法_04 的尺寸为 python张量的MSE_张量补全_199

python张量的MSE_张量分解_200

这个表达式意味着新的张量 python张量的MSE_算法_04 在除了第 python张量的MSE_张量_118 维之外的每个维度上的每个条目是原张量 python张量的MSE_张量补全_03python张量的MSE_张量_118 维上的条目与向量 python张量的MSE_张量_188

数学示例

也要先将张量矩阵化

张量与向量的模积(Mode-n Product)是一个高阶张量与向量在某个特定模式上的运算。为了简化理解,我们可以从一个三阶张量和一个向量的模积开始讨论。

假设我们有一个三阶张量 python张量的MSE_python张量的MSE_146 ,其维度为 python张量的MSE_python张量的MSE_207 ,意味着该张量有 python张量的MSE_张量_208 个层,每个层有 python张量的MSE_张量分解_209python张量的MSE_算法_210 列。同时,我们有一个向量 python张量的MSE_张量_188 长度为 python张量的MSE_张量分解_209。当我们进行第二模态python张量的MSE_张量_213的乘积时,向量 python张量的MSE_算法_214 将与张量 python张量的MSE_张量_215点积

举个例子:

设张量 python张量的MSE_python张量的MSE_146 的两个层分别是:
python张量的MSE_算法_217
python张量的MSE_张量_218

向量 python张量的MSE_张量_188 为:python张量的MSE_张量_220

在第二模态下与 python张量的MSE_python张量的MSE_146 的模积 python张量的MSE_python张量的MSE_222 结果是一个 python张量的MSE_张量分解_223

对于 python张量的MSE_张量补全_224

  • 第一行的结果为: python张量的MSE_张量补全_225
  • 第二行的结果为: python张量的MSE_算法_226
  • 第三行的结果为: python张量的MSE_张量分解_227
  • 第四行的结果为: python张量的MSE_张量_228

对于 python张量的MSE_算法_229

  • 第一行的结果为: python张量的MSE_张量分解_230
  • 第二行的结果为: python张量的MSE_张量补全_231
  • 第三行的结果为: python张量的MSE_算法_232
  • 第四行的结果为: python张量的MSE_张量分解_233

因此,结果张量是:
python张量的MSE_python张量的MSE_234

张量分解模型

python张量的MSE_python张量的MSE_235

CP 分解

张量CP分解,也称为 CANDECOMP/PARAFAC(CP)分解,是一种常用的高阶张量分解方法。它将一个高阶张量表示为若干低阶张量的加权和,其中每个低阶张量是因子张量的外积。CP分解的形式可以表示为:

python张量的MSE_张量补全_236

其中, python张量的MSE_张量补全_03 是要分解的 python张量的MSE_python张量的MSE_238 的高阶张量, python张量的MSE_python张量的MSE_239 是分解的秩(rank), python张量的MSE_python张量的MSE_240 是权重因子python张量的MSE_python张量的MSE_241python张量的MSE_算法_242python张量的MSE_张量分解_243 分别是第一、第二和第三模态的因子向量, python张量的MSE_张量分解_95

CP 分解可以通过多种优化算法进行求解,其中最常见的是交替最小二乘法(Alternating Least Squares, ALS)和梯度下降法(Gradient Descent)。这些算法迭代更新因子向量和权重因子,直至达到收敛条件。

CP 分解在许多领域都有广泛的应用,比如信号处理、图像处理、推荐系统、生物信息学等。它可以用于数据压缩、特征提取、异常检测等任务,同时也可以提供对数据的解释和可解释性。

Tucker 分解

python张量的MSE_python张量的MSE_245 分解是一种多线性代数方法,主要用于对高阶张量(多维数据)进行分解和简化。这种分解方法可以看作是高阶数据的主成分分析(PCA),它将一个高阶张量分解为一组核心张量和一系列因子矩阵的乘积。

在具体操作中,给定一个 python张量的MSE_python张量的MSE_246阶张量 python张量的MSE_张量补全_03python张量的MSE_python张量的MSE_245 分解将其分解为一个核心张量 python张量的MSE_张量补全_249python张量的MSE_张量分解_250因子矩阵 python张量的MSE_张量补全_251。这种分解可以表示为:

python张量的MSE_张量_252

其中 python张量的MSE_张量补全_253 表示张量与矩阵的第 python张量的MSE_张量补全_254python张量的MSE_张量分解_255乘积。

每个因子矩阵 python张量的MSE_张量_256 对应于张量 python张量的MSE_张量补全_03 在第 n 维度上的线性变换,而核心张量 python张量的MSE_张量补全_249 则**指定了这些因子矩阵如何相互作用来近似原始张量。**通过选择适当大小的核心张量,python张量的MSE_python张量的MSE_245

python张量的MSE_python张量的MSE_245

低秩假设模型

一个基本的张量低秩补全问题可以表示为:

python张量的MSE_张量补全_261

这里:

  • python张量的MSE_算法_123 是我们想要恢复的完整张量。
  • python张量的MSE_python张量的MSE_263 指的是张量 python张量的MSE_算法_123 的秩,通常定义为张量分解中核心张量的秩或是分解中各个因子的维度。
  • python张量的MSE_张量分解_265 是部分观测到的张量,即包含已知元素的张量。
  • python张量的MSE_python张量的MSE_266
  • python张量的MSE_算法_267

优化考虑和挑战

实际应用中,直接优化秩是非常困难的,因为秩函数是非凸且不连续的。因此,通常采用秩的凸松弛,例如使用核范数(矩阵的奇异值之和)作为代替,从而将问题转化为一个凸优化问题:

python张量的MSE_张量_268

其中, python张量的MSE_张量_269 是矩阵 python张量的MSE_张量分解_270

  • 标准的 python张量的MSE_张量补全_271 展开:python张量的MSE_张量补全_272
  • python张量的MSE_python张量的MSE_273 展开:python张量的MSE_张量分解_274
  • 更加平衡,维数相差不是很大
  • 数据挖掘丢失的信息会较少
  • **“秩函数是非凸且不连续的”**怎么理解
    理解“秩函数是非凸且不连续的”这句话,需要从秩函数的数学性质在优化问题中的行为角度来探讨。以下是对这两个方面的详细解释:
  • 非凸性(Non-convexity)
  1. 凸集与凸函数
  • 凸集:如果一个集合中任意两点的连线段上的所有点也属于这个集合,则该集合是凸的。
  • 凸函数:一个函数是凸的,如果对于其定义域内的任意两点,函数在这两点之间的线段上的值不大于这两点的函数值的线性插值。形式上,对于任意 python张量的MSE_张量补全_275python张量的MSE_张量补全_276 ,有:python张量的MSE_python张量的MSE_277
  1. 秩函数的非凸性
  • 对于矩阵的秩函数 python张量的MSE_张量_278 ,考虑两个具有不同秩的矩阵 python张量的MSE_算法_279python张量的MSE_python张量的MSE_280 。如果我们取 python张量的MSE_python张量的MSE_281 为非零和非一的任意值,通常 python张量的MSE_张量补全_282 不会等于 python张量的MSE_张量补全_283 。实际上, python张量的MSE_张量补全_282 可能会比两者的秩都大或都小,这表明秩函数不满足凸函数的定义。
  • 不连续性(Discontinuity)
  1. 连续函数
  • 一个函数在某点连续,如果其在该点的极限值与函数值相等。即,当输入值趋向于某点时,输出值也应相应连续地趋向于该点的函数值。
  1. 秩函数的不连续性
  • 考虑一个矩阵序列,其中矩阵元素逐渐趋近于某个极限矩阵。如果极限矩阵的秩突然从序列中其他矩阵的秩跳跃到一个不同的值(例如,由于微小的扰动导致线性依赖关系的改变),则表明秩函数在该点不连续。这种情况在矩阵元素经微小变动导致线性独立变为线性依赖时尤为常见。

总结

因此,“秩函数是非凸且不连续的”这句话的意义在于,当使用秩函数作为优化目标时,找到全局最优解或稳定的解变得困难,这是因为非凸性导致可能存在多个局部最优解,而不连续性则意味着小的输入变化可能导致输出结果的大幅跳跃。这些特性使得直接优化秩函数成为一个复杂且挑战性的任务。在实际应用中,通常采用一些替代方法(如核范数最小化)来避免这些问题。

  • 秩的凸松弛是什么
    “秩的凸松弛”(rank convex relaxation)通常指的是在优化问题中,用来近似秩函数(rank function)的一种凸函数。
    常用的秩的凸松弛方法包括核范数松弛(nuclear norm relaxation),它是秩函数的最优凸近似。核范数是矩阵奇异值的和,它可以有效地用来近似矩阵的秩,并且是一个凸函数,便于优化求解。

奇异值收缩算法

奇异值收缩算法(Singular Value Thresholding, SVT)是一种用于解决低秩矩阵恢复和矩阵补全问题的有效方法。该算法主要应用于数据压缩、图像恢复、协同过滤等领域,特别是在处理数据丢失或噪声干扰较大的情况下。

算法描述

奇异值收缩算法的基本思想是对矩阵进行奇异值分解(SVD),**然后通过一个阈值操作来修改奇异值,最后重构矩阵以实现数据的恢复或降噪。**具体步骤如下:

  1. 奇异值分解(SVD)
    对给定的矩阵 python张量的MSE_python张量的MSE_285
    python张量的MSE_python张量的MSE_286
    其中 python张量的MSE_张量分解_287python张量的MSE_python张量的MSE_288 是正交矩阵, python张量的MSE_张量_289 是对角矩阵,其对角线元素即为 python张量的MSE_python张量的MSE_285
  2. 奇异值收缩(Thresholding)
    对所有奇异值应用阈值函数 python张量的MSE_张量_291 ,该函数可以定义为:
    python张量的MSE_张量_292
    这里 python张量的MSE_算法_293 是原始的奇异值, python张量的MSE_张量_294 是经过阈值处理后的奇异值。阈值 python张量的MSE_算法_295
  3. 矩阵重构
    使用修改后的奇异值 python张量的MSE_张量_294 和原始的正交矩阵 python张量的MSE_张量补全_297 重构矩阵:python张量的MSE_张量分解_298
    其中 python张量的MSE_张量_299

应用示例

奇异值收缩算法在图像处理领域特别有用,比如在去除图像中的噪声或填补缺失像素时。例如,对于一个受损的图像,可以先对其进行 python张量的MSE_张量_300,然后通过适当选择阈值去除那些较小的奇异值(通常与噪声相关),最后重构图像以恢复原始图像的主要特征。

优势与局限

优势

  • 鲁棒性:对噪声和数据丢失具有较好的容忍度。
  • 灵活性:通过调整阈值 python张量的MSE_python张量的MSE_301

局限

  • 参数依赖:阈值 python张量的MSE_python张量的MSE_301
  • 计算成本:进行完整的奇异值分解可能在大规模数据集上非常耗时。