前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >张量分解与应用-学习笔记[01]

张量分解与应用-学习笔记[01]

原创
作者头像
LyWang
修改于 2023-09-20 10:29:32
修改于 2023-09-20 10:29:32
3.2K0
举报

0. 前言

本笔记主要是围绕这篇学术期刊文章进行的:

Tensor Decomposition and Applications

此笔记本为笔者接触该领域的第一步,最适合从未接触过该领域的朋友。

希望能抛砖引玉,吸引更多的爱好者。

未来将以张量如何切入深度学习强化学习领域等方面进行研究和探讨。希望这个长篇能够坚持下去。

如果对应定义暂时无法寻找到中文名,将直接采用英文名。忘谅解。(反正写文献的时候也肯定是用英文嘛)

1. 介绍

  • 什么是张量(tensor)?简单地说,就是个多维数组。在本研究范围内, 不考虑任何物理和工学领域内的张量定义,而仅仅考虑其数学领域。正式的说,应该叫张量域(tensor fields)。第一阶张量(first-order tensor)是个向量(vector),第二阶张量(second-order tensor)是矩阵(matrix),更多阶的张量我们称之为高阶张量(higher-order tensor)。
  • 一个简单的3阶张量如图下所示。注意 i 是在我们平时所认为的 y 轴上,索引也不是从0开始,从1开始。1开始的地方也值得注意。虽然这不影响什么重要的推理,但会影响后面公式中的一些顺序和例子的结果。
一个简单的3阶张量图
一个简单的3阶张量图
  • 在接下来的文章中将启用以下常规字体设定。小写加粗字母例如 x 代表向量,大写加粗字母 X 代表矩阵,花体 \mathcal{X} 代表张量。

2. 基本定义

2.1 Fiber 与 Slice

  • 当我们将一个张量沿着他的第k个维展开的时候,我们就获得了mode-k fiber。例如,三阶张量 \mathcal{X} 的mode-1 fiber为: X_{:jk} 。换句话说,所有维度的index都维持不变,除了第k个维度被展开。
  • 同理,当我们除了2个维度展开以外维持所有index不变时,我们就获得了slice。例如,三阶张量 \mathcal{X} 的horizontal slice为: X_{i::} 。最为常用的slice为下图第二行第三个的frontal slice X_{::k} 。我们常常可以缩写为X_k。请务必牢记。
原文对fiber和slice的配图
原文对fiber和slice的配图

2.2 Norm 范数 与 inner product内积

  • 张量norm的定义和矩阵范数的定义类似,均为所有元素的平方之和开根。对于张量 \mathcal{X} \in\mathbb{R}^{I_1 \times I_2 \times \dots \times I_N} 来说:
||\mathcal{X}|| = \sqrt{\sum_{i1=1}^{I_1}\sum_{i2=1}^{I_2}\dots\sum_{iN=1}^{I_N}x^2_{i_1i_2\dotsi_N}}
  • 类似的,我们定义内积为2个维度相等的张量之间对应位置元素之积的和。这和矩阵定义是类似的。对于张量 \mathcal{X}, \mathcal{Y} \in\mathbb{R}^{I_1 \times I_2 \times \dots \times I_N} 来说:
\langle\mathcal \:{X}, \:\mathcal{Y} \: \rangle = \sqrt{\sum_{i1=1}^{I_1}\sum_{i2=1}^{I_2}\dots\sum_{iN=1}^{I_N}x^2_{i_1i_2\dotsi_N}}
  • 显然,\langle\mathcal{X},\:\mathcal{X}\rangle = ||X||^2

2.3 Rank-One Tensors 秩1张量

  • 即使范数和内积与矩阵类似,我们要对秩(rank)万分小心。后面我们马上会提到这是个非常棘手的概念。我们很多时候无法轻易地决定一个张量的秩是多少。 不过,秩1张量比较特别。他可以被向量(vector)的外积(outer product)所定义。
  • 对于一个N阶张量 \mathcal{X} \in\mathbb{R}^{I_1 \times I_2 \times \dots \times I_N} 来说,当可以被写成N个向量的外积时,此张量的秩为1:
\mathcal{X} = a^{(1)} \circ a^{(2)} \circ \dots \circ a^{(N)}
  • \circ 是外积的符号。每个张量的元素都可以被写成这些向量对应位置元素之积:
x_{i_1i_2\dots i_N} = a^{(1)}_{i_1} \circ a^{(2)}_{i_2} \circ \dots \circ a^{(N)}_{i_N}

2.4 cubical 立方,Symmetry 对称 与 Supersymmetric 超对称

  • 当张量的所有维度大小相等时,我们称之为立方(cubical)。
  • 当立方张量中的任何一个元素的index被置换后(permutation)元素值不变时,我们称这个张量为超对称。
  • 例:对于3阶张量\mathcal{X} \in\mathbb{R}^{I \times I \times I} 来说,如果满足以下等式,则被称之为超对称。
x_{ijk} = x_{ikj} = x_{jik} = x_{jki} = x_{kij} = x_{kji} \quad \text{ for all $ i, j, k = 1,\dots,I.$}
  • 张量在某些mode下符合对称的条件, 这时候我们只叫他在 对应的mode下对称。例如,3阶张量`$\mathcal{X} \in\mathbb{R}^{I \times I \times K} $ 的frontal slice对称时,我们称该张量在mode 1和2之下对称。(这里有些拗口,可以理解为,展开1和2的情况,固定剩余维度的情况下,所获得的的slice是对称的)
X_k = X_k^T \quad \text{ for all $ k = 1,\dots,K.$}

2.5 Diagonal Tensors 对角张量

  • 如果一个张量\mathcal{X} \in\mathbb{R}^{I_1 \times I_2 \times \dots \times I_N} 的任何元素只有在i_1 \: = \: i_2 \: = \: \dots \: = i_N的时候不为0,也就是x_{i_1i_2 \dots i_N} \neq 0时,被称之对角张量。
  • 如果对角张量同时是立方的,则只有超对角线(superdiagonal)所经过的元素不为0
  • 值得注意的是,对角张量对任何维度比例的张量其实都成立。

2.6 Matricization 矩阵化

  • 矩阵化讲述了如何将高维张量拆解成2阶的矩阵。这是个极为重要的概念,日后将频繁出现在各种公式与定理之中。其文字化定义意外的简单,而数学定义较为繁琐。
  • 文字化定义:对于张量\mathcal{X} \in\mathbb{R}^{I_1 \times I_2 \times \dots \times I_N} 来说,我们称其mode-n的矩阵化为 X_{(n)}。通过把\mathcal{X} 的每一根mode-n fiber按序插入这个矩阵的列中,我们就完成了矩阵化。
  • 数学定义必须定义其顺序所以稍显复杂。我们定义一个从张量元素(i_1, i_2, \dots , i_N)到矩阵元素(i_n, j)的映射:
j \: = \: 1 + \sum_{k=1 \\ k\neq n} ^N (i_k-1)J_k \quad \text{ with } \quad J_k = \prod_{m=1\\m\neq n}^{j-1} I_m.
  • 例:假设某张量\mathcal{X} \in \mathbb{R}^{3 \times 4 \times 2}的frontal slices如下:
\begin{equation} X_1 = \begin{bmatrix} 1 & 4 & 7 & 10 \\ 2 & 5 & 8 & 11 \\ 3 & 6 & 9 & 12 \end{bmatrix} \text{,}\quad X_2 = \begin{bmatrix} 13 & 16 & 19 & 22 \\ 14 & 17 & 20 & 23 \\ 15 & 18 & 21 & 24 \end{bmatrix} \end{equation}.
  • 运用文字化定义,我们能很快的获得其3个mode下的矩阵化结果。如果你想挑战数学定义,你可能需要一个笔记本或者一段代码.
X_{(1)} = \begin{bmatrix} 1 & 4 & 7 & 10 & 13 & 16 & 19 & 22 \\ 2 & 5 & 8 & 11 & 14 & 17 & 20 & 23 \\ 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 \end{bmatrix},
X_{(2)} = \begin{bmatrix} 1 & 2 & 3 & 13 & 14 & 15 \\ 4 & 5 & 6 & 16 & 17 & 18 \\ 7 &8 & 9 & 19 & 20 & 21 \\ 10 & 11 & 12 & 22 & 23 & 24 \end{bmatrix},
X_{(3)} = \begin{bmatrix} 1 & 2 & 3 & 4 & 5 & \dots & 9 & 10 & 11 & 12 \\ 13 & 14 & 15 & 16 & 17 & \dots & 21 & 22 & 23 & 24 \end{bmatrix}.
  • 注意:不同的论文有时会在展开(unfold)时使用完全不同的排序方法。只要这些排序方法是前后统一的,一般来说不会给理论及计算带来影响。顺便,如果以本文的顺序来定义向量化的话。则为以下形式。
\mathbb{vec}(\mathcal{X}) = \begin{bmatrix} 1 \\ 2 \\ \vdots \\ 24 \end{bmatrix}.

2.7 Tensor Multiplication: The n-Mode Product 张量乘法之n-Mode乘积

  • 定义了上述概念后,我们终于可以定义张量乘法了。就像是矩阵乘法有其特别算法一样,张量也有类似的算法,只是更为复杂。本文将不会叙述一个完整的张量乘法定义,而是仅挑选其最为有意义的n-mode乘法来进行介绍。也就是张量与矩阵(或向量)在mode n之下的乘积。
  • 张量\mathcal{X} \in\mathbb{R}^{I_1 \times I_2 \times \dots \times I_N} 与矩阵\mathrm{U} \in \mathbb{R} ^{J \times I_n}的mode-n乘积我们写作\mathcal{X} \times_n U 其维度大小为 I_1 \times \dots \times I_{n-1} \times J \times I_{n+1} \times \dots \times I_N.。其每个元素可被写为:
(\mathcal{X} \times_n \mathrm{U})_{i_1\dots i_{n-1}ji_{n+1}\dots i_N} = \sum_{i_n = 1 } ^{I_n} x_{i_1i_2\dots i_N} \: u_{ji_n}.
  • 笔者是这么理解这个公式的:将没有选中的维度所组成的索引集为行,选中的维度展开为列,形成的矩阵与U相乘,便是n-mode张量乘法的结果。这个矩阵列就是之前矩阵化时所提到的,每个列都是原始张量的mode-n fiber。例如,对于一个5 \times 3 \times 2的张量与2 \times 9 的矩阵相乘,我们可以看做张量被矩阵化(此例为mode-3 因为只有第三个维度才可以和矩阵相乘)为$5 \times 3 = 15$行。这个15也就是除去被选中进行乘法的维度以外的剩余维度可索引元素最大数量。最后该矩阵乘法的结果为一个矩阵。这是我们原本所期待的张量乘积的n-mode矩阵化后的产物。由于多维索引被我们压缩在一起变成了行,为了还原张量结果,我们需要还回这些索引到本来的位置,于是便获得了真正的乘积\mathcal{Y}。用数学语言来说,便是如下等式:
\mathcal{Y} = \mathcal{X} \times_n \mathrm{U} \quad \Leftrightarrow \quad Y_{(n)} = \mathrm{UX}_{n}.
  • 再来一个具体的例子吧。令 \mathcal{X} 为2.6例子中的张量,令 \mathrm{U} = \begin{bmatrix} 1 & 3 & 5 \\ 2 & 4 & 6 \end{bmatrix}. 则他们的乘积\mathcal{Y} = \mathcal{X} \times_1 \mathrm{U} \in \mathbb{R}^{2 \times 4 \times 2}为:
\mathrm{Y}_1 = \begin{bmatrix}22 & 49 & 76 & 103 \\ 28 & 64 & 100 & 136 \end{bmatrix} , \quad \mathrm{Y}_2 = \begin{bmatrix} 130 & 157 & 184 & 211 \\ 172 & 208 & 244 & 280 \end{bmatrix}.

2.8 Properties of Mode-n Product 矩阵乘法的性质

  • 当张量和多个矩阵进行不同mode的连续相乘时,乘法的顺序和结果无关:
\mathcal{X} \times_m \mathrm{A} \times_n \mathrm{B} = \mathcal{X} \times_n \mathrm{B} \times_m \mathrm{A} \quad\text{ $(m \neq n)$}.
  • 当mode相同时,存在以下特性:
\mathcal{X} \times_n \mathrm{A} \times_n \mathrm{B} = \mathcal{X} \times_n (\mathrm{B} \mathrm{A}).
  • 张量\mathcal{X} \in\mathbb{R}^{I_1 \times I_2 \times \dots \times I_N} 与 向量 \mathrm{v} \in \mathbb{R}^{I_n}的n-mode乘法写作 \mathcal{X} \: \bar\times_n \: \mathrm{v}. 对每个元素来说下式成立。
(\mathcal{X} \: \bar\times_n \: \mathrm{v})_{ i_1 \dots i_{n-1} i_{n+1}\dots i_N } = \sum_{i_n = 1}^{I_n} x_{i_1 i_2 \dots i_N} \: v_{i_n}.
  • 因此,和向量的mode-n相乘等同于\mathcal{X}的每一根mode-n fiber与向量\mathrm{v}的内积。由于内积塌缩了这个维度,使得他的大小只有1,在这里我们选择泯灭了这个mode-n所对应的维度,使得结果必然为N-1阶。(在深度学习模型中,有很多时候我们能看到(1,64,64,4)之类的张量。对应了图片数量,尺寸,颜色等。显然笔者认为我们也可以定义另一种mode-n乘法使得结果变为\mathbb{R}^{i_1 \times \dots i_{n-1} \times \:\mathrm{1} \:\times i_{n+1}\times \dots \times i_N}。只是在本文的讨论范畴内,此选择是没有必要的。
  • \mathcal{X} 还是为2.6例子中的张量, 设 \mathrm{v} = \begin{bmatrix} 1 & 2 & 3 & 4 \end{bmatrix}^T,则
\mathcal{X} \: \bar\times_2 \: \mathrm{v} = \begin{bmatrix} 70 & 190 \\ 80 & 200 \\ 90 & 210\end{bmatrix}.
  • 由于mode-n向量乘法在定义里面减去了1个维度,这使得张量的连续向量乘法中,乘法的优先顺序变得很重要。换句话说,下列等式将成立:
\mathcal{X} \: \bar\times_m \: \mathrm{a} \: \bar\times_n \: \mathrm{b} = (\mathcal{X} \: \bar\times_m \: \mathrm{a}) \bar\times_{n-1} \: \mathrm{b} = (\mathcal{X} \: \bar\times_{m} \mathrm{b}) \: \bar\times_m \: \mathrm{a} \quad \text{ for $\:m<n$} .

本期到此结束,下一期将先回顾矩阵的Kronecker, Khatri-Rao及Hadamard乘法等概念后,继续介绍张量的基本性质。欢迎大家关注!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
腾讯云服务器安装shiny server
在浏览器中,打开您的CVM的公共IP地址并加上3838端口 (例如example.com:3838)。您应该看到Shiny Server欢迎页面:
用户1359560
2021/01/04
25.9K0
腾讯云服务器安装shiny server
单细胞系列教程:环境搭建(三)
在命令行运行下面的命令,如果是root帐号,请去除sudo,其他系统参考 > Install R
数据科学工厂
2023/01/25
6120
如何在Ubuntu 14.04上设置Shiny Server
Shiny是一个R包,允许用户将R代码转换为交互式网页。Shiny server是RStudio提供的服务器,可用于托管和管理Web上的Shiny应用程序。除了托管Shiny应用程序,Shiny Server还可以托管交互式R降价文档。Shiny Server既有免费的开源版本,也有付费专业版,包含更多功能。
无敌小笼包
2018/10/25
3.4K0
如何使用Shiny Server部署R应用程序
Shiny是R编程语言的库,允许您在本机R中创建交互式Web应用程序,而无需使用HTML,CSS或JavaScript等Web技术。将Shiny应用程序部署到Web上的方法有很多种; 本教程使用Shiny Server在Linode上托管示例Shiny应用程序。
宇cccc
2018/08/20
6.6K1
如何使用Shiny Server部署R应用程序
如何在Ubuntu和Debian上安装R.
R是包含了数据可视化功能的用于统计分析的编程语言。该语言通过Comprehensive R Archive Network(CRAN)拥有高度的可扩展性,该网络托管了10,000多个R包,用于生成出版数据,专用计算工具等。
魔法少女伊莉雅
2018/09/04
1.9K0
在我们的shiny服务器部署一个RNA-seq下游分析网页工具
源代码是公开的,在:https://github.com/szenitha/Shiny-Seq 所以我想着把它安装在我们自己的服务器里面,方便国内的粉丝使用! 所以大家给我了一个新的外号,宠粉狂魔!
生信技能树
2019/12/23
1.4K0
在我们的shiny服务器部署一个RNA-seq下游分析网页工具
在Ubuntu下安装单细胞3大R包
通常来说,很多R包的安装对R版本是有要求的,比如BiocManager需要 R (≥ 3.5.0),但是并不需要最新版R语言。
生信技能树
2019/07/26
2.5K0
如何部署 R 开发环境
R是一种开源编程语言,专门用于统计计算和图形绘制。R在统计的基础下,被广泛用于开发统计软件和数据分析。R是一种日益流行且可扩展的语言,拥有活跃的社区,为特定的研究领域提供了许多软件包,使其适用于许多领域。
大数据弄潮儿
2018/11/13
8120
如何部署 R 开发环境
单细胞分析环境搭建(三)
在命令行运行下面的命令,如果是root帐号,请去除sudo,其他系统参考 > Install R[1]
数据科学工厂
2023/02/27
5910
单细胞分析环境搭建(三)
如何在Debian 9上安装R
R是一种开源编程语言,专门用于统计计算和图形。在R统计计算基础的支持下,它被广泛用于开发统计软件和执行数据分析。R是一种日益流行且可扩展的语言,具有活跃的社区,为特定的研究领域提供了许多用户生成的软件包,使其适用于许多领域。
陈树丶
2018/11/20
1.6K0
在ubuntu20上面安装R4
使用root权限(系统管理员)安装最新版的R,我们的ubuntu是20,所以选择focal这个代号,然后是cran40,全部的代码如下:
生信技能树
2020/08/11
1.5K0
在ubuntu20上面安装R4
ubuntu10.04更新源_ubuntu修改更新源
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/19
7710
RNA-seq入门实战(零):RNA-seq流程前的准备——Linux与R的环境创建
连续两次求贤令:曾经我给你带来了十万用户,但现在祝你倒闭,以及 生信技能树知识整理实习生招募,让我走大运结识了几位优秀小伙伴!大家开始根据我的ngs组学视频进行一系列公共数据集分析实战,其中几个小伙伴让我非常惊喜,不需要怎么沟通和指导,就默默的完成了一个实战!
生信技能树
2022/06/27
3.1K0
RNA-seq入门实战(零):RNA-seq流程前的准备——Linux与R的环境创建
R包安装方式以及Github包安装报错解决
恰好看到了无法在线下载安装GitHub包?其实答案就隐藏在报错里面,正好之前也遇到了相似的报错,然后就整理一下笔记分享给大家叭!
生信菜鸟团
2023/09/09
2.9K1
R包安装方式以及Github包安装报错解决
在Ubuntu下安装旧版seurat
这里首推华为云:https://www.huaweicloud.com/pricing.html#/ecs
生信技能树
2019/07/30
2.1K0
在Ubuntu下安装旧版seurat
如何在CVM上安装R
R是一种开源编程语言,专门用于统计计算和图形绘制。R在统计的基础下,被广泛用于开发统计软件和数据分析。R是一种日益流行且可扩展的语言,拥有活跃的社区,为特定的研究领域提供了许多软件包,使其适用于许多领域。
信姜缘
2018/07/19
1.5K0
[书籍翻译系列]数据处理必备—R安装
Comprehensive R Archive Network CRAN是R包的最大集合。除了成功构建和安装之外,上传软件包的要求很少,因此文档和支持文件通常都很少,并且弄清楚如何使用这些软件包本身就是一个挑战。CRAN是R将搜索以查找要安装的软件包的默认存储库:
生信技能树jimmy
2020/03/27
5310
Rstudio Server + Docker + tensorflowR - 云端安装与使用R语言与GPU深度学习
版权声明:博主原创文章,微信公众号:素质云笔记,转载请注明来源“素质云博客”,谢谢合作!! https://blog.csdn.net/sinat_26917383/article/details/82880021
悟乙己
2019/05/26
2.2K0
R包终极解决方案
写在前面: 在如何通过Google来使用ggplot2可视化这篇文章中,我们曾经介绍过R语言在生物信息学中的重要性。 这篇文章也激发了很多小伙伴学习的热情。学习R语言必然会安装各种各样的包,很多人在这一步就遇到了困难, 刚开始学习R语言的时候我们经常会遇到各种包安装错误,比如 package ‘airway’ is not available(for R version 3.1.0)等等, 这篇文章我们就来系统性地整理一些新手可能遇到的问题以及解决方案。 当然,你不一定现在就会遇到,但是如果你遇到了,请记住
生信技能树
2018/03/08
2.6K0
R包终极解决方案
R 和 RStudio 的安装及 R Profile 的配置 & 爬取 CRAN 上的所有 R 包的名称、发布日期和标题
安装 R 现在最新版的 R 语言是 3.6.2 版本 (2019 年 12 月 12 日发布),该发行版的名字是 Dark and Stormy Night (漆黑暴风夜 ??),事实上只要用 3.0
王诗翔呀
2020/07/06
3.7K0
R 和 RStudio 的安装及 R Profile 的配置 & 爬取 CRAN 上的所有 R 包的名称、发布日期和标题
相关推荐
腾讯云服务器安装shiny server
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 0. 前言
  • 1. 介绍
  • 2. 基本定义
    • 2.1 Fiber 与 Slice
    • 2.2 Norm 范数 与 inner product内积
    • 2.3 Rank-One Tensors 秩1张量
    • 2.4 cubical 立方,Symmetry 对称 与 Supersymmetric 超对称
    • 2.5 Diagonal Tensors 对角张量
    • 2.6 Matricization 矩阵化
    • 2.7 Tensor Multiplication: The n-Mode Product 张量乘法之n-Mode乘积
    • 2.8 Properties of Mode-n Product 矩阵乘法的性质
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档