一、张量基础知识

1. 张量的定义


       首先我们来了解一下什么是张量,张量有四个定义:

  1. 张量是多维数组
  2. 张量是一种不随坐标系的改变而改变的几何对象
  3. 张量是向量和余向量,不会随着坐标系的改变而改变
  4. 张量是多重线性映射,即
    T : V ∗ × ⋯ × V ∗ ⏟ m × V × ⋯ × V ⏟ n → R , V 是 矢 量 空 间 , V ∗ 是 对 应 的 对 偶 空 间 T:\underbrace{V^* \times \cdots \times V^*}_m \times \underbrace{V \times \cdots \times V}_n \rightarrow \mathbb{R},\scriptsize V 是矢量空间,V^*是对应的对偶空间 Tm V××V×n V××VRVV

这里我们要学习的是张量与深度学习的相关知识,下面的几个定义是物理和工学领域内的张量定义,我们这里只考虑其在数学领域内的定义,也就是第一个:张量是一个多维数组

数组是有序的元素序列,我们将 不同维度的数组 定义为不同阶的张量:

  • 标量 (只有大小没有方向的数) 定义为 0 阶张量 ,如
    在这里插入图片描述

  • 一维数组 定义为 一阶张量 ,如下所示
    在这里插入图片描述

  • 将多个一维数组的拼接,即 矩阵 定义为 二阶张量
    在这里插入图片描述

  • 将多个 矩阵的叠加 定义为 三阶张量
    在这里插入图片描述

  • 下面我们类比一阶张量,将三阶张量排列为一个数组,数组的元素是三阶张量,如果我们将三阶张量记为
    在这里插入图片描述
    那么多个元素组成的数组就定义为 四阶张量 ,如下所示
    在这里插入图片描述

  • 同样,将四阶张量拼接,组成三阶张量的矩阵,称为 五阶张量 ,如下所示
    在这里插入图片描述

  • 对上面的定义进行循环重复,我们就可以定义更高阶的张量了


有了对不同张量的理解后,我们看一下张量具体可以 描述的对象 有哪些。

  • 一阶张量是一个一维数组,即一组数,我们可以将一组数表示为一个矢量,二阶张量是一个矩阵,因此我们可以将张量作为矢量和矩阵概念的推广。

  • 三阶张量
           对于 RGB 图片,我们可以理解为由三张分别表示 R,G,B 分量的图片堆叠而成,如下
    在这里插入图片描述
    对于每个分量图片,我们都可以看成一个矩阵,那么一张 RGB 图片就可以用三阶的张量进行表示。

  • 四阶张量
           对于多张 RGB 图片,我们可以用四阶张量进行表示,可以看作是三阶张量(单张RGB图像)的数组(多张 RGB 图片)。
    在这里插入图片描述

  • 五阶张量
           视频是由多张图片组成的,因此每个视频可以用一个四阶张量表示,显然,多个视频可以用五阶张量表示。

2. 指标符号


       在张量的讨论中,我们对于分量的表示和区分都使用下表字母来表示,下面我们来了解一下用指标符号表示表达式。


2.1 自由指标

对于下面的一组数:
a 1 , a 2 , a 3 , ⋯   , a n a_1,a_2,a_3,\cdots,a_n a1,a2,a3,,an

我们可以用以下的表达项来简写:
a i , i = 1 , 2 , ⋯   , n a_i,i=1,2,\cdots,n aii=1,2,,n

即用 i \pmb{i} iii (指标) 来表示将该项罗列,我们称这种在取值范围内对表达项进行罗列的指标为 自由指标,自由指标在表达项中只出现一次。


2.2 求和约定与哑指标

对于求和表达式:
S = ∑ i = 1 n a i x i = a 1 x 1 + a 2 x 2 + ⋯ + a n x n S=\sum_{i=1}^n a_ix_i=a_1x_1+a_2x_2+ \cdots +a_nx_n S=i=1naixi=a1x1+a2x2++anxn

我们约定将其简写为
S = a i x i S=a_ix_i S=aixi

求和约定的表达项 a i x i a_ix_i aixi i i i 出现两次,我们称在一个 表达项 中重复出现两次的指标为 哑指标 ,哑指标表示要对该表达项罗列后再求和只有在表达项中出现两次的才称为哑指标


现在,我们利用自由指标和哑指标来表示下式:
A 11 x 1 + A 12 x 2 + A 13 x 3 = b 1 A_{11}x_1+A_{12}x_2+A_{13}x_3=b_1 A11x1+A12x2+A13x3=b1

A 21 x 1 + A 22 x 2 + A 23 x 3 = b 2 A_{21}x_1+A_{22}x_2+A_{23}x_3=b_2 A21x1+A22x2+A23x3=b2

A 31 x 1 + A 32 x 2 + A 33 x 3 = b 3 A_{31}x_1+A_{32}x_2+A_{33}x_3=b_3 A31x1+A32x2+A33x3=b3

因为一个自由指标表示将表达式的罗列,我们可以用自由指标将三个式子合并为一个:
A i 1 x 1 + A i 2 x 2 + A i 3 x 3 = b i A_{i1}x_1+A_{i2}x_2+A_{i3}x_3=b_i Ai1x1+Ai2x2+Ai3x3=bi

之后可以用哑指标将多个表达项合为一项:
A i j x j = b i A_{ij}x_j=b_i Aijxj=bi

  • i → i \rightarrow i 自由指标
  • j → j \rightarrow j 哑指标

指标可以用任意的字母表示,我们约定

  • 拉丁指标 i , j , k , ⋯ i,j,k,\cdots i,j,k, 为三维指标,即取值范围为 1 , 2 , 3 1,2,3 1,2,3
  • 希腊指标 α , β , γ , ⋯ \alpha,\beta,\gamma,\cdots α,β,γ, 为二维指标,取值范围为 1 , 2 1,2 1,2

我们可以用一个表达式中出现多对哑指标来表示 多重求和 ,如
a i j x i x j = ∑ i = 1 3 ∑ j = 1 3 a i j x i x j a_{ij}x_ix_j=\sum_{i=1}^3 \sum_{j=1}^3 a_{ij} x_i x_j aijxixj=i=13j=13aijxixj


2.3 δ i j \delta_{ij} δij 符号(Kronecker delta)

        δ i j \delta_{ij} δij 是张量中的一个基本符号,也称为单位张量,它的定义为
δ i j = { 1 i = j 0 i ≠ j      ( i , j = 1 , 2 , ⋯   , n ) \delta_{ij}= \begin{cases} 1 & i=j \\ 0 & i\neq j \end{cases}\ \ \ \ (i,j=1,2,\cdots,n) δij={10i=ji=j    (i,j=1,2,,n)

特性:

  1. δ i j \delta_{ij} δij 对于指标 i i i j j j 是对称的,即 δ i j = δ j i \pmb{\delta_{ij}=\delta_{ji}} δij=δjiδij=δjiδij=δji

  2. δ i j \delta_{ij} δij 的分量集合是一个单位矩阵。在三维空间中
    [ δ 11 δ 12 δ 13 δ 21 δ 22 δ 23 δ 31 δ 32 δ 33 ] = [ 1 0 0 0 1 0 0 0 1 ] \left[\begin{matrix} \delta_{11} & \delta_{12} & \delta_{13} \\ \delta_{21} & \delta_{22} & \delta_{23} \\ \delta_{31} & \delta_{32} & \delta_{33} \\ \end{matrix}\right]= \left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{matrix}\right] δ11δ21δ31δ12δ22δ32δ13δ23δ33=100010001

  3. δ i j \delta_{ij} δij 具有换标作用。如
    d s 2 = δ i j d x i d x j = d x i d x i = d x j d x j \mathrm{d} s^2= \delta_{ij} \mathrm{d} \textcolor{red}{x_i} \mathrm{d} \textcolor{red}{x_j} = \mathrm{d} \textcolor{red}{x_i} \mathrm{d} \textcolor{red}{x_i} = \mathrm{d} \textcolor{red}{x_j} \mathrm{d} \textcolor{red}{x_j} ds2=δijdxidxj=dxidxi=dxjdxj

           如果符号 δ i j \delta_{ij} δij 的两个指标中,有一个和同项中其它因子的指标相同,则可以把该因子的那个相同指标换成 δ i j \delta_{ij} δij 的另一个指标,而 δ i j \delta_{ij} δij 自动消失。这是因为:
    δ i j d x i d x j = δ 1 j d x 1 d x j + δ 2 j d x 2 d x j + δ 3 j d x 3 d x j \begin{aligned} \delta_{ \textcolor{red}{i} j} \mathrm{d} \textcolor{red}{x_i} \mathrm{d} x_j & =\delta_{ \textcolor{red}{1} j} \mathrm{d} \textcolor{red}{x_1} \mathrm{d} x_j + \delta_{ \textcolor{red}{2} j} \mathrm{d} \textcolor{red}{x_2} \mathrm{d} x_j + \delta_{ \textcolor{red}{3} j} \mathrm{d} \textcolor{red}{x_3} \mathrm{d} x_j \end{aligned} δijdxidxj=δ1jdx1dxj+δ2jdx2dxj+δ3jdx3dxj

    根据上面 δ i j \delta_{ij} δij 的定义我们可以知道,只有 i = j i=j i=j 时,对应的项不为 0 0 0 ,因此上式变为
    δ i j d x i d x j = δ 1 1 d x 1 d x 1 + δ 2 2 d x 2 d x 2 + δ 3 3 d x 3 d x 3 = d x 1 d x 1 + d x 2 d x 2 + d x 3 d x 3 = d x i d x i = d x j d x j \begin{aligned} \delta_{ \textcolor{red}{i} j} \mathrm{d} \textcolor{red}{x_i} \mathrm{d} x_j & =\delta_{ \textcolor{red}{1} 1} \mathrm{d} \textcolor{red}{x_1} \mathrm{d} x_1 + \delta_{ \textcolor{red}{2} 2} \mathrm{d} \textcolor{red}{x_2} \mathrm{d} x_2 + \delta_{ \textcolor{red}{3} 3} \mathrm{d} \textcolor{red}{x_3} \mathrm{d} x_3 \\ &=\mathrm{d} \textcolor{red}{x_1}\mathrm{d} x_1 + \mathrm{d} \textcolor{red}{x_2}\mathrm{d} x_2 + \mathrm{d} \textcolor{red}{x_3}\mathrm{d} x_3 \\ &= \mathrm{d} \textcolor{red}{x_i} \mathrm{d} x_i = \mathrm{d} \textcolor{red}{x_j} \mathrm{d} x_j \end{aligned} δijdxidxj=δ11dx1dx1+δ22dx2dx2+δ33dx3dx3=dx1dx1+dx2dx2+dx3dx3=dxidxi=dxjdxj

    类似的我们可以得到:
    δ i j a j k = a i k \delta_{ij}a_{jk}=a_{ik} δijajk=aik

    δ i j a k j = a k i \delta_{ij}a_{kj}=a_{ki} δijakj=aki

    δ i j δ j k = δ i k \delta_{ij} \delta_{jk}=\delta_{ik} δijδjk=δik

    δ i j δ j k δ k l = δ i l \delta_{ij} \delta_{jk} \delta_{kl}=\delta_{il} δijδjkδkl=δil

应用:

  • 三个相互正交的单位基矢量构成正交标准化基,它们具有如下的性质:

    1. 每个基矢的模为 1 1 1 ,即 e i ⋅ e j = 1 ( i = j ) e_i \cdot e_j=1 (i=j) eiej=1(i=j)
    2. 不同的矢量相互正交,即 e i ⋅ e j = 0 ( i ≠ j ) e_i \cdot e_j =0 (i\neq j) eiej=0(i=j)

    上面的两个性质可以用 δ i j \delta_{ij} δij 的形式统一表示,即:
    e i ⋅ e j = δ i j e_i \cdot e_j=\delta_{ij} eiej=δij


  • 矢量的点积可以表示为:
    a ⋅ b = ( a j e j ) ⋅ ( b k e k ) = a j b k ( e j e k ) = a j b k δ j k = a j b j = a k b k \begin{aligned} \pmb{a \cdot b} & =(a_j e_j)\cdot(b_k e_k)=a_j b_k (e_j e_k) \\ & = a_j b_k \delta_{jk} =a_j b_j =a_k b_k \end{aligned} ababab=(ajej)(bkek)=ajbk(ejek)=ajbkδjk=ajbj=akbk

2.4 e r s t e_{rst} erst 符号(排列符号或置换符号)

该符号在笛卡尔坐标系下的定义为
e r s t = { 1 当   r , s , t   为 正 序 排 列 时 − 1 当   r , s , t   为 逆 序 排 列 时 0 当   r , s , t   中 有 两 个 指 标 相 同 时 e_{rst}=\left\{ \begin{array}{rcl} 1 & &\small{当\ r,s,t \ 为正序排列时} &\\ -1 & &\small{当\ r,s,t \ 为逆序排列时} &\\ 0 & &\small{当\ r,s,t \ 中有两个指标相同时}& \end{array} \right. erst=110 r,s,t  r,s,t  r,s,t 


e r s t = 1 2 ( r − s ) ( s − t ) ( t − r ) e_{rst}=\frac{1}{2}(r-s)(s-t)(t-r) erst=21(rs)(st)(tr)

其中

  • ( 1 , 2 , 3 ) (1,2,3) (1,2,3) 及其轮流换位得到的 ( 2 , 3 , 1 ) (2,3,1) (2,3,1) ( 3 , 1 , 2 ) (3,1,2) (3,1,2) 称为正序排列
  • ( 3 , 2 , 1 ) (3,2,1) (3,2,1) 及其轮流换位得到的 ( 2 , 1 , 3 ) (2,1,3) (2,1,3) ( 1 , 3 , 2 ) (1,3,2) (1,3,2) 称为逆序排列

特性:

  1. e r s t e_{rst} erst 共有 27 27 27 个元素,其中三个元素为 1 1 1 ,三个元素为 − 1 -1 1 ,其余的都是 0 0 0
  2. 对其任意两个指标交换都是反对称的,即
    e r s t = − e s r t = − e r t s = − e t s r e_{rst}=-e_{srt}=-e_{rts}=-e_{tsr} erst=esrt=erts=etsr
  3. 当三个指标循环移位时, e r s t e_{rst} erst 的值不发生改变
    e r s t = e s t r = e t r s e_{rst}=e_{str}=e_{trs} erst=estr=etrs

2.5 张量方程

每一项都是由张量组成的方程称为 张量方程 ,如:
σ i j = C i j k l   ε k l      ⟹ σ = C : ε \sigma_{ij}=C_{ijkl} \ \varepsilon_{kl} \ \ \ \ \Longrightarrow \pmb{\sigma}=\pmb{C:\varepsilon} σij=Cijkl εkl    σσσ=C:εC:εC:ε

σ i j + f i = 0       ⟹ ∇ ⋅   σ + f = 0 \sigma_{ij} +f_i=0 \ \ \ \ \ \Longrightarrow \nabla \pmb{\cdot \ \sigma} + \pmb{f} = \pmb{0} σij+fi=0      σ σ σ+fff=000

特性:张量方程具有与坐标选择无关的性质,可用于描述客观物理线性的固有特性和普遍规律。



3. 张量代数


在了解张量的各种代数运算之前,我们先来看一下张量的表示方法。

       高阶张量我们使用粗体字母表示, χ ∈ R I 1 × I 2 × ⋯ × I N \pmb{\chi} \in \mathbb{R}^{I_1 \times I_2 \times \cdots \times I_N} χχχRI1×I2××IN,其表示 N N N 阶的张量, I n I_n In 表示第 n n n 维的大小。 N N N 阶张量 χ \pmb{\chi} χχχ 中的元素可以记为 x i 1 i 2 ⋯ i n x_{i_1 i_2 \cdots i_n } xi1i2in 。如 χ ∈ R 2 × 3 × 4 \pmb{\chi} \in \mathbb{R}^{2 \times 3 \times 4} χχχR2×3×4 ,表示大小为 2 × 3 × 4 2 \times 3 \times 4 2×3×4 的三维数组, x 214 x_{214 } x214 表示第二行、第一列、第四层的元素。

3.1 几种矩阵的特殊乘法

  1. Kronecker 乘积(张量积)
           对于两个矩阵 A ∈ R I × J \mathrm{A} \in \mathbb{R}^{I \times J} ARI×J B ∈ R K × L \mathrm{B}\in\mathbb{R}^{K\times L} BRK×L ,其 Kronecker 积被定义为如下的 ( I K ) × ( J L ) (IK) \times (JL) (IK)×(JL) 的矩阵,即将 A A A 的每个元素乘以矩阵 B B B ,我们用符号 ⊗ \otimes 来表示 Kronecker 乘积:
    A ⊗ B = [ a 11 B a 12 B … a 1 J B a 21 B a 22 B … a 2 J B ⋮ ⋮ ⋱ ⋮ a l 1 B a 12 B … a I J B ] \begin{aligned} \mathrm{A} \otimes \mathrm{B} &= \begin{bmatrix} a_{11}\mathrm{B} & a_{12}\mathrm{B} & \dots & a_{1J}\mathrm{B} \\ a_{21}\mathrm{B} & a_{22}\mathrm{B} & \dots & a_{2J}\mathrm{B} \\ \vdots & \vdots & \ddots & \vdots \\ a_{l1}\mathrm{B} & a_{12}\mathrm{B} & \dots & a{IJ}\mathrm{B} \end{bmatrix}\end{aligned} AB=a11Ba21Bal1Ba12Ba22Ba12Ba1JBa2JBaIJB

  2. Hadamard 乘积
           Hadamard 是对 相同大小的矩阵 进行的,它让相同位置的元素相乘,对矩阵 A , B ∈ R I × J A, B \in \mathbb{R}^{I \times J} A,BRI×J ,其 Hadamard 乘积记作 A ∗ B A*B AB
    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 ] \mathrm{A} * \mathrm{B} = \begin{bmatrix} a_{11}b_{11} & a_{12}b_{12} & \dots & a_{1J}b_{1J}\\ a_{21}b_{21} & a_{22}b_{22} & \dots & a_{2J}b_{2J}\\ \vdots & \vdots & \ddots & \vdots \\ a_{I1}b_{I1} & a_{I2}b_{I2} & \dots & a_{IJ}b_{IJ} \end{bmatrix} AB=a11b11a21b21aI1bI1a12b12a22b22aI2bI2a1Jb1Ja2Jb2JaIJbIJ

  3. Khatri - Rao 乘积
            Khatri - Rao 乘积是列对列的乘积,相乘的两个矩阵必须有相同的列数,矩阵 A ∈ R I × K \mathrm{A}\in\mathbb{R}^{I \times K} ARI×K B ∈ R L × K \mathrm{B}\in\mathbb{R}^{L\times K} BRL×K 的 Khatri - Rao 乘积记为 A ⊙ B \mathrm{A} \odot \mathrm{B} AB ,即将矩阵 A A A 的每一列和矩阵 B B B 的对应列进行 Kronecker 积:
    A ⊙ B = [ a 1 ⊗ b 1 a 2 ⊗ b 2 … a K ⊗ b K ] \mathrm{A}\odot \mathrm{B} = \begin{bmatrix} a_1 \otimes b_1 & a_2 \otimes b_2 & \dots & a_K \otimes b_K \end{bmatrix} AB=[a1b1a2b2aKbK]

    如,对矩阵 A = [ 1 2 3 4 ] = ( a 1 , b 1 ) A=\left[ \begin{matrix} 1 & 2 \\ 3 & 4 \end{matrix} \right]=(\boldsymbol{a_1},\boldsymbol{b_1} ) A=[1324]=(a1,b1) B = [ 5 6 7 8 9 10 ] = ( a 2 , b 3 ) B=\left[ \begin{matrix} 5 & 6 \\ 7 & 8 \\ 9 & 10 \end{matrix} \right]=(\boldsymbol{a_2},\boldsymbol{b_3} ) B=5796810=(a2,b3) 的 Khatri - Rao 乘积为
    A ⊙ B = ( a 1 ⊗ a 2 , b 1 ⊗ b 2 ) = [ [ 1 3 ] ⊗ [ 5 7 9 ] [ 2 4 ] ⊗ [ 6 8 10 ] ] A \odot B=(\boldsymbol{a_1}\otimes \boldsymbol{a_2},\boldsymbol{b_1}\otimes \boldsymbol{b_2})= \left[ \begin{matrix} \left[ \begin{matrix} 1 \\ 3 \end{matrix} \right] \otimes \left[ \begin{matrix} 5 \\ 7 \\ 9 \end{matrix} \right] & \left[ \begin{matrix} 2 \\ 4 \end{matrix} \right] \otimes \left[ \begin{matrix} 6 \\ 8 \\ 10 \end{matrix} \right] \end{matrix}\right] AB=(a1a2,b1b2)=[13]579[24]6810

3.2 特殊张量,主方向与主分量

  • 常用特殊张量

    1. 零张量
             若张量 T = 0 T=0 T=0 ,则
      T i j = 0 , T i j ′ = 0 T_{ij}=0,T_{ij}^{'}=0 Tij=0Tij=0

    2. 单位张量
             笛卡尔坐标系中分量为 δ i j \delta_{ij} δij 的二阶张量 I I I ,即:
      I = δ i j e i e j = e 1 e 1 + e 2 e 2 + e 3 e 3 I=\delta_{ij}e_i e_j=e_1 e_1 + e_2 e_2 +e_3 e_3 I=δijeiej=e1e1+e2e2+e3e3

      I i j = δ i j     且      I i j ′ = δ i j I_{ij}=\delta_{ij} \ \ \ \small{且}\ \ \ \ I_{ij}^{'}=\delta_{ij} Iij=δij       Iij=δij

      单位张量和任意张量的点积就等于该张量本身。

    3. 转置张量
             对于二阶张量 T = T i j e i e j T=T_{ij}e_i e_j T=Tijeiej ,由对换分量指标而基矢量顺序保持不变所得到的新张量
      T T = T j i e i e j = T i j e j e i T^T=T_{ji}e_i e_j=T_{ij} e_j e_i TT=Tjieiej=Tijejei

      称为张量 T T T 的转置张量。

    4. 对称张量
             满足 T = T T T=T^T T=TT,即 T i j = T j i T_{ij}= T_{ji} Tij=Tji 的张量。

    5. 反对称张量
             满足 T = − T T T=-T^T T=TT,即 T i j = − T j i T_{ij}= -T_{ji} Tij=Tji 的张量。

    6. 加法分解
             任意二阶张量 T T T 均可以分解为对称张量 S S S 和反对称张量 A A A 之和:
      T = S + A T=S+A T=S+A

      其中 S = 1 2 ( T + T T ) S=\frac{1}{2}(T+T^T) S=21(T+TT) A = 1 2 ( T − T T ) A=\frac{1}{2}(T-T^T) A=21(TTT)

    7. 置换张量
             笛卡尔系中以置换符号 e r s t e_{rst} erst 为分量的三阶张量为置换张量
      e = e r s t e r e s e t \pmb{e}=e_{rst} \pmb{e_r} \pmb{e_s} \pmb{e_t} eee=ersterereresesesetetet

  • 主方向与主分量
           二阶张量可以定义为一种由矢量 a \pmb{a} aaa b \pmb{b} bbb 的线性变换,即
    T ⋅ a = b    ;    T i j a j = b i \pmb{T \cdot a = b} \ \ ; \ \ T_{ij}a_j=b_i Ta=bTa=bTa=b  ;  Tijaj=bi

    一般来说,矢量 a \pmb{a} aaa b \pmb{b} bbb 并不同向。对于给定的任意二阶张量 T \pmb{T} TTT 能否找到某个矢量 v \pmb{v} vvv ,它在线性变换后能保持方向不变,即:
    T ⋅ v = λ v     ;     T i j v j = λ v i \pmb{T \cdot v }= \lambda \pmb{v} \ \ \ ; \ \ \ T_{ij} v_{j} =\lambda v_i TvTvTv=λvvv   ;   Tijvj=λvi

    根据上式,类比矩阵的特征向量的求法可以得到:
    ( T i j − λ δ i j ) v j = 0     ( i = 1 , 2 , 3 ) (T_{ij}-\lambda \delta_{ij})v_j=0 \ \ \ (i=1,2,3) (Tijλδij)vj=0   (i=1,2,3)

    其中 λ \lambda λ 是标量 , δ i j \delta_{ij} δij 是单位矩阵,该问题就转换为求 v j v_j vj 的线性齐次代数方程组,其存在非零解的充分必要条件是系数行列式为零,即:
    ∣ T 11 − λ T 12 T 13 T 21 T 22 − λ T 33 T 31 T 32 T 33 − λ ∣ = 0 \begin{vmatrix} T_{11}-\lambda & T_{12} & T_{13} \\ T_{21}& T_{22}-\lambda & T_{33} \\ T_{31}& T_{32} & T_{33}-\lambda \end{vmatrix}=0 T11λT21T31T12T22λT32T13T33T33λ=0

    将左边行列式展开可得:
    λ 3 − I 1 λ 2 + I 2 λ − I 3 = 0 \lambda ^3 - I_1 \lambda ^2 +I_2 \lambda - I_3 = 0 λ3I1λ2+I2λI3=0

    这是关于 λ \lambda λ 的特征方程,我们可以求出特征方程的三个解,是三个特征值,称为张量 T T T主分量 。当 T T T 是是对称张量时,存在三个实特征值 λ ( k ) \lambda_{(k)} λ(k) ,根据每个特征值,我们带入上面的等式,可以求出每个特征值对应的特征向量 v j ( k ) v_{j(k)} vj(k),通过该方法求得的三个单位矢量 v ( k ) = v j ( k ) e j \pmb{v}_{(k)}=v_{j(k)}\pmb{e}_j vvv(k)=vj(k)eeej 称为 张量 T T T 的主方向

           沿主方向 v ( 1 ) , v ( 2 ) , v ( 3 ) \pmb{v}_{(1)},\pmb{v}_{(2)},\pmb{v}_{(3)} vvv(1)vvv(2)vvv(3) 的正交坐标系称为张量 T T T主坐标系 。在主坐标系中,有
    T = λ ( 1 ) e ( 1 ) e ( 1 ) + λ ( 2 ) e ( 2 ) e ( 2 ) + λ ( 3 ) e ( 3 ) e ( 3 ) T=\lambda_{(1)}\pmb{e}_{(1)}\pmb{e}_{(1)}+ \lambda_{(2)}\pmb{e}_{(2)}\pmb{e}_{(2)}+ \lambda_{(3)}\pmb{e}_{(3)}\pmb{e}_{(3)} T=λ(1)eee(1)eee(1)+λ(2)eee(2)eee(2)+λ(3)eee(3)eee(3)



4. 张量展开

       首先我们对于一个如下的三阶张量,来了解几个概念。在这里插入图片描述

  • 纤维(fiber)

           纤维是从张量中抽取向量的操作。对于上面的张量来说,如果固定其中的两个维度,只保留一个维度可以变换,可以得到一个向量。

           如果保留第 k k k 个下标度可以改变,则我们称为张量的 mode-k fiber ,我们记为 χ i 1 ⋯ k − 1   :   k + 1 ⋯ i n \pmb{\chi}_{i_1\cdots k-1\ \pmb{:} \ k+1\cdots i_n} χχχi1k1 ::: k+1in,也就是将第 k 维的下标用 : \pmb{:} ::: 代替,表示其可以变化。对于三阶张量,其各维的 mode fiber 如下所示:
    在这里插入图片描述

  • 切片(slice)

           切片是从张量中抽取矩阵的操作。和纤维类似,我们可以保持两个下标可以改变,其余维度的下标固定,就可以得到切片,对于三阶张量的切片,我们分别记为 X i : : 、 X : j : 、 X : : k \pmb{X_{i::}}、\pmb{X_{:j:}}、\pmb{X_{::k}} Xi::Xi::Xi::X:j:X:j:X:j:X::kX::kX::k ,分别表示水平切片、侧面切片和正面切片,如下所示:
    在这里插入图片描述

4.1 张量展开(张量的矩阵化)

  • N N N 阶张量 χ \pmb{\chi} χχχ 沿 mode - n 展开成一个矩阵 X ( n ) \pmb{X}_{(n)} XXX(n) 的过程,也就是张量的矩阵化,它可以将高维的张量拆解为 2 阶的矩阵,基本操作 为:把张量 χ \pmb{\chi} χχχ 的每一根 mode - n fiber 按顺序插入矩阵的列中。

对于一个三维的张量如下:
在这里插入图片描述
我们可以用数据表示为:
τ = t 5 t 6 t 7 t 8 t 1 t 2 t 3 t 4 \pmb{\tau}=\begin{matrix} & & t_5 & t_6 \\ & & t_7 & t_8 \\ t_1 & t_2 & & \\ t_3 & t_4 & & \end{matrix} τττ=t1t3t2t4t5t7t6t8

如果我们对张量的每个维度进行索引,如下图所示:
在这里插入图片描述

那么我们可以用索引表示每个元素,如下:
τ = t 112 t 122 t 212 t 222 t 111 t 121 t 211 t 221 \pmb{\tau}=\begin{matrix} & & t_{112} & t_{122} \\ & & t_{212} & t_{222} \\ t_{111} & t_{121} & & \\ t_{211} & t_{221} & & \end{matrix} τττ=t111t211t121t221t112t212t122t222

对于张量
τ = 5 6 7 8 1 2 3 4 \pmb{\tau}=\begin{matrix} & & 5 & 6 \\ & & 7 & 8 \\ 1 & 2& & \\ 3 & 4 & & \end{matrix} τττ=13245768

其 mode - 1 矩阵 χ ( 1 ) \pmb{\chi}_{(1)} χχχ(1) 可以表示如下:

在这里插入图片描述
mode - 2 矩阵 χ ( 2 ) \pmb{\chi}_{(2)} χχχ(2) 可以表示如下:
在这里插入图片描述
mode - 3 矩阵 χ ( 3 ) \pmb{\chi}_{(3)} χχχ(3) 表示为:

在这里插入图片描述
注意:同一个 mode 下的矩阵化时,如果选择对 mode-n fiber 按不同的排列顺序组成矩阵,可能会得到不同的结果,但是只要这些排序方法时前后统一的,一般来说不会对计算带来影响。

例:假设某张量 X ∈ R 3 × 4 × 2 \mathcal{X} \in \mathbb{R}^{3 \times 4 \times 2} XR3×4×2 的正面切片如下:

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} = \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} X::1=123456789101112X::2=131415161718192021222324

根据上面的矩阵化,我们可以得到三个 mode 下的矩阵化结果如下:
X ( 1 ) = [ 1 4 7 10 13 16 19 22 2 5 8 11 14 17 20 23 3 6 9 12 15 18 21 24 ] 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(1)=123456789101112131415161718192021222324

X ( 2 ) = [ 1 2 3 13 14 15 4 5 6 16 17 18 7 8 9 19 20 21 10 11 12 22 23 24 ] 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(2)=147102581136912131619221417202315182124

X ( 3 ) = [ 1 2 3 4 5 … 9 10 11 12 13 14 15 16 17 … 21 22 23 24 ] 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} X(3)=[113214315416517921102211231224]

4.2 张量乘以矩阵

       张量和矩阵相乘就是先将张量矩阵化,然后用矩阵乘以矩阵化的张量,就转变为了矩阵和矩阵的乘积。两个矩阵相乘得到一个矩阵,再按照原来的方式将矩阵还原为张量就得到了结果张量。

       根据不同 mode 的矩阵化方式,我们可以计算张量在不同 mode 下和矩阵的乘积。

在这里插入图片描述
       我们直接来看例子,如果我们有一个张量
T = 5 6 7 8 1 2 3 4 \pmb{\mathcal{T}}=\begin{matrix} & & 5 & 6 \\ & & 7 & 8 \\ 1 & 2& & \\ 3 & 4 & & \end{matrix} TTT=13245768

和一个矩阵
A = [ a b c d ] A=\begin{bmatrix} a & b \\ c & d \end{bmatrix} A=[acbd]

先对张量进行 mode - 1 矩阵化,得到如下结果:
T ( 1 ) = [ 1 2 5 6 3 4 7 8 ] \pmb{\mathcal{T}}_{(1)}=\begin{bmatrix} 1 & 2 & 5 & 6 \\ 3 & 4 & 7 & 8 \end{bmatrix} TTT(1)=[13245768]

则张量和矩阵相乘可以表示为:
P = T × 1 A → P ( 1 ) = A T ( 1 ) = [ a b c d ] [ 1 2 5 6 3 4 7 8 ] = [ a + 3 b 2 a + 4 b 5 a + 7 b 6 a + 8 b c + 3 d 2 c + 4 d 5 c + 7 d 6 c + 8 d ] \begin{aligned} \mathcal{P}=\mathcal{T} \times_1 A \rightarrow \mathcal{P}_{(1)}=A \mathcal{T}_{(1)}& = \begin{bmatrix} a & b \\ c & d \end{bmatrix} \begin{bmatrix} 1 & 2 & 5 & 6 \\ 3 & 4 & 7 & 8 \end{bmatrix} \\ & =\begin{bmatrix} a+3b & 2a+4b & 5a+7b & 6a+8b \\ c+3d & 2c+4d & 5c+7d & 6c+8d \end{bmatrix} \end{aligned} P=T×1AP(1)=AT(1)=[acbd][13245768]=[a+3bc+3d2a+4b2c+4d5a+7b5c+7d6a+8b6c+8d]

之后将还原为张量:
P = 5 a + 7 b 6 a + 8 b 5 c + 7 d 6 c + 8 d a + 3 b 2 a + 4 b c + 3 d 2 c + 4 d \mathcal{P}= \begin{matrix} & & 5a+7b & 6a+8b\\ & & 5c+7d & 6c+8d\\ a+3b & 2a+4b & & \\ c+3d & 2c+4d & & \end{matrix} P=a+3bc+3d2a+4b2c+4d5a+7b5c+7d6a+8b6c+8d

注意,并不是任意 mode - n 的矩阵化的张量都是可以和矩阵相乘的,必须要保证 mode - n 的张量的行数等于要相乘矩阵的列数。

  • 66
    点赞
  • 355
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
PyTorch是一个开源的机器学习框架,主要用于构建深度学习模型。下面是一些PyTorch的基础代码知识: 1. 张量(Tensor)操作: - 创建张量:使用`torch.tensor()`函数可以创建一个张量。 - 张量的属性:可以使用`.shape`属性获取张量的形状,使用`.dtype`属性获取张量的数据类型。 - 张量的运算:可以进行加减乘除等基本运算,也可以使用函数`torch.add()`, `torch.sub()`, `torch.mul()`, `torch.div()`等进行运算。 2. 自动求导(Autograd): - 自动求导:PyTorch使用自动求导机制来计算梯度。要启用自动求导,只需将`requires_grad=True`设置为张量的参数。 - 梯度计算:通过调用`.backward()`方法可以计算张量的梯度。 - 禁用梯度跟踪:可以使用`torch.no_grad()`上下文管理器来禁用梯度的跟踪。 3. 神经网络模块: - 搭建网络:使用`torch.nn.Module`类可以定义神经网络模块。需要实现两个方法:`__init__()`和`forward()`。 - 参数优化:使用`torch.optim`模块可以定义优化器,如SGD、Adam等。可以通过`optimizer.zero_grad()`清零梯度,`optimizer.step()`更新参数。 4. 数据加载: - 数据集:可以使用`torch.utils.data.Dataset`类来定义自己的数据集。 - 数据加载器:使用`torch.utils.data.DataLoader`类可以创建数据加载器,用于批量加载数据。 5. 训练模型: - 训练循环:通常使用两个嵌套的循环来训练模型,外循环用于迭代训练轮数,内循环用于迭代数据批次。 - 前向传播和反向传播:在内循环中,通过前向传播计算输出,然后计算损失,最后使用反向传播计算梯度并更新参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值