【系统认识张量(一)】基础篇:什么是张量?

2025-09-09 20:08:22

【系统认识张量(一)】基础篇:什么是张量?

文章目录

【系统认识张量(一)】基础篇:什么是张量?前言一、基础概念1. 纤维、切片2. 矩阵化3. 秩一张量

二、张量的基础运算1.张量的N模乘法2. Kronecker积、Khatri-Rao积、Hadamard积

总结

前言

随着人工智能、大数据的发展,我们常常会得到高维数据,对其 认识 和 处理方法 与普通二维数据有着许多不同,对于三维及三维以上的数据,我们统称为 张量 。张量是对向量和矩阵的一种高维拓展。

一、基础概念

1. 纤维、切片

类似于矩阵的行、列,张量也有类似的概念,即纤维。 纤维(fiber),即只保留一个自由度,固定其他所有维度,呈现出条状。 切片(slices),只保留两个自由度,固定其他所有维度,呈现出片状(矩阵)。

2. 矩阵化

一个N阶张量的N模展开,如图所示,将一个三阶

(

3

×

3

×

3

)

(3\times3\times3)

(3×3×3)的张量

χ

\chi

χ的切片合成为一个大的矩阵,按照切片的分割方式不同,可以分为N种模式。 具体例子如下: 一个3x4x2的张量

χ

\chi

χ按照N模展开,即按照第n个维度展开,如下所示,为张量

χ

\chi

χ的两个切片 其按照三种模态展开,即按照不同方向的切片,进行合并。

3. 秩一张量

如果一个张量能被写成N个向量的 外积 ,则称这个张量为秩一张量。 这里需要注明的是:外积(Outer Product)这一概念与高中数学三维向量的外积(Exterior Product)的概念不同。

u

v

=

u

v

T

=

[

u

1

u

2

u

3

u

4

]

[

v

1

v

2

v

3

]

=

[

u

1

v

1

u

2

v

2

u

1

v

3

u

2

v

1

u

2

v

2

u

2

v

3

u

3

v

1

u

3

v

2

u

3

v

3

u

4

v

1

u

4

v

2

u

4

v

3

]

u \circ v = uv^T = \left[ \begin {array} {c} u_1 \\ u_2 \\ u_3 \\ u_4 \end {array} \right] \left[ \begin {array} {ccc} v_1 & v_2 & v_3 \end {array} \right] = \left[ \begin {array} {ccc} u_1v_1 & u_2v_2 & u_1v_3 \\ u_2v_1 & u_2v_2 & u_2v_3 \\ u_3v_1 & u_3v_2 & u_3v_3 \\ u_4v_1 & u_4v_2 & u_4v_3 \\ \end {array} \right]

u∘v=uvT=⎣⎢⎢⎡​u1​u2​u3​u4​​⎦⎥⎥⎤​[v1​​v2​​v3​​]=⎣⎢⎢⎡​u1​v1​u2​v1​u3​v1​u4​v1​​u2​v2​u2​v2​u3​v2​u4​v2​​u1​v3​u2​v3​u3​v3​u4​v3​​⎦⎥⎥⎤​

二、张量的基础运算

1.张量的N模乘法

张量

χ

\chi

χ与矩阵

U

U

U的N模乘法的公式如下: 看公式可能很难理解,具体通俗语言可以表示为:

首先按照张量

χ

\chi

χ的某一维度展开,得到相应矩阵

X

(

n

)

X_ {\left( n \right)}

X(n)​;随后将得到的矩阵

X

(

n

)

X_ {\left( n \right)}

X(n)​与矩阵

U

U

U相乘,得到新的矩阵

Y

Y

Y;最后将

Y

Y

Y矩阵恢复为原矩阵的相应维度(具体看如下例子)。

X

1

=

[

1

4

7

10

2

5

8

11

3

6

9

12

]

,

X

2

=

[

13

16

19

22

14

17

20

23

15

18

21

24

]

X_1 = \left[ \begin{array} {cccc} 1 & 4 & 7 & 10 \\ 2 & 5 & 8 &11 \\ 3 & 6 & 9 & 12 \end{array} \right] , X_2 = \left[ \begin{array} {cccc} 13 & 16 & 19 & 22 \\ 14& 17& 20&23\\ 15& 18& 21& 24 \end{array} \right]

X1​=⎣⎡​123​456​789​101112​⎦⎤​,X2​=⎣⎡​131415​161718​192021​222324​⎦⎤​

U

=

[

1

3

5

2

4

6

]

U = \left[ \begin{array}{ccc} 1&3&5\\ 2&4&6 \end{array} \right]

U=[12​34​56​]

Y

=

χ

×

n

U

Y

(

n

)

=

U

X

(

n

)

Y = \chi \times_n U \Leftrightarrow Y _ {\left( n \right)} = UX_ {\left( n \right)}

Y=χ×n​U⇔Y(n)​=UX(n)​

Y

1

=

[

22

49

76

103

28

64

100

136

]

,

Y

2

=

[

130

157

184

211

172

208

244

280

]

Y_1 = \left[ \begin{array} {cccc} 22&49&76&103\\ 28&64&100&136 \end{array} \right] , Y_2 = \left[ \begin{array} {cccc} 130&157&184&211\\ 172&208&244&280 \end{array} \right]

Y1​=[2228​4964​76100​103136​],Y2​=[130172​157208​184244​211280​]

2. Kronecker积、Khatri-Rao积、Hadamard积

这里提前介绍一些矩阵的乘积,与后面张量分解的介绍有关。

Kronecker积 ----

\otimes

⊗ 对于矩阵

A

R

I

×

J

\mathbf{A} \in \mathbb{R}^{I \times J}

A∈RI×J 和

B

R

K

×

L

\mathbf{B} \in \mathbb{R}^{K \times L}

B∈RK×L

A

B

=

[

a

11

B

a

12

B

a

1

J

B

a

21

B

a

22

B

a

2

J

B

a

I

1

B

a

I

2

B

a

I

J

B

]

=

[

a

1

b

1

a

1

b

2

a

1

b

3

a

J

b

L

1

a

J

b

L

]

\mathbf{A} \otimes \mathbf{B}=\left[\begin{array}{cccc} a_{11} \mathbf{B} & a_{12} \mathbf{B} & \cdots & a_{1 J} \mathbf{B} \\ a_{21} \mathbf{B} & a_{22} \mathbf{B} & \cdots & a_{2 J} \mathbf{B} \\ \vdots & \vdots & \ddots & \vdots \\ a_{I 1} \mathbf{B} & a_{I 2} \mathbf{B} & \cdots & a_{I J} \mathbf{B} \end{array}\right] \\ =\left[\begin{array}{lll}\mathbf{a}_{1} \otimes \mathbf{b}_{1} & \mathbf{a}_{1} \otimes \mathbf{b}_{2} \quad \mathbf{a}_{1} \otimes \mathbf{b}_{3} \quad \cdots \quad \mathbf{a}_{J} \otimes \mathbf{b}_{L-1} & \mathbf{a}_{J} \otimes \mathbf{b}_{L}\end{array}\right]

A⊗B=⎣⎢⎢⎢⎡​a11​Ba21​B⋮aI1​B​a12​Ba22​B⋮aI2​B​⋯⋯⋱⋯​a1J​Ba2J​B⋮aIJ​B​⎦⎥⎥⎥⎤​=[a1​⊗b1​​a1​⊗b2​a1​⊗b3​⋯aJ​⊗bL−1​​aJ​⊗bL​​]A的每个元素乘以B矩阵构成新的大矩阵

其结果为

(

I

K

)

×

(

J

L

)

(IK) \times (JL)

(IK)×(JL)大小的矩阵

Khatri–Rao积 ----

\odot

⊙ 注意这里的定义与上述Kronecker积是嵌套的

A

B

=

[

a

1

b

1

a

2

b

2

a

K

b

K

]

\mathbf{A} \odot \mathbf{B} = \left[ \begin{array} {cccc} a_1 \otimes b_1 & a_2 \otimes b_2 & \cdots & a_K \otimes b_K \end {array} \right]

A⊙B=[a1​⊗b1​​a2​⊗b2​​⋯​aK​⊗bK​​] 对应列向量的Kronecker积 当a和b是向量时,有:

a

b

=

a

b

a\otimes b = a \odot b

a⊗b=a⊙bHadamard积 ----

\ast

∗ 对于矩阵

A

R

I

×

J

\mathbf{A} \in \mathbb{R}^{I \times J}

A∈RI×J 和

B

R

K

×

L

\mathbf{B} \in \mathbb{R}^{K \times L}

B∈RK×L

A

B

=

[

a

11

b

11

a

12

b

12

a

1

J

b

1

J

a

21

b

21

a

22

b

22

a

2

J

b

2

J

a

I

1

b

I

1

a

I

2

b

I

2

a

I

J

b

I

J

]

\mathbf{A} \ast \mathbf{B}=\left[\begin{array}{cccc} a_{11} b_{11} & a_{12} b_{12} & \cdots & a_{1 J} b_{1 J} \\ a_{21} b_{21} & a_{22} b_{22} & \cdots & a_{2 J} b_{2 J} \\ \vdots & \vdots & \ddots & \vdots \\ a_{I 1} b_{I 1} & a_{I 2} b_{I 2} & \cdots & a_{I J} b_{I J} \end{array}\right]

A∗B=⎣⎢⎢⎢⎡​a11​b11​a21​b21​⋮aI1​bI1​​a12​b12​a22​b22​⋮aI2​bI2​​⋯⋯⋱⋯​a1J​b1J​a2J​b2J​⋮aIJ​bIJ​​⎦⎥⎥⎥⎤​ 对应位置的元素相乘

总结

以上就是张量的基础知识,这一部分较为简单,希望通过自己的总结能让后来者有所收获。