目录
- 张量基本概念
- 张量的表示
- 张量基本运算
张量基本概念 说起张量,大家比较熟悉的也许就是tensorflow中的tensor了吧,tensor作为tensorflow的基本数据结构能够代表各种各样复杂的数据,它是现代机器学习的基础,下面来一步步深入的了解张量国度。
Jacob Biamonte(美国物理学家)在《Lectures on Quantum Tensor Networks》中这样描述Tensors are a mathematical concept that encapsulates and generalizes the idea of multilinear maps, i.e. functions of multiple parameters that are linear with respect to every parameter.即张量是一个数学概念,它封装和概括了多线性映射的思想,即相对于每个参数呈线性的多个参数的函数。尽管这样的描述非常非常抽象,可是它的优点在于准确,而不仅仅是标量、向量及矩阵的一般化。多线性映射请看下图
文章图片
也许你并不理解上面的说法,没关系,再来看看它的其他几种定义:
- 张量是多维数组,常见于各种人工智能软件
- 张量是某种几何对象,不会随着坐标系的改变而改变
- 张量是向量和余向量(covector)通过张量积(tensor product)组合而成的
文章图片
再来看更形象的一组图片
文章图片
图中分为两行,第一行是单个样本的维度,第二行是多个样本,即增加了样本维度,所以第一行的维度+1=第二行的维度。图中告诉我们0维张量也就是一个数,1维张量也就是一个矢量,2维张量就是一个矩阵、3维张量就是多个矩阵组成的立体,以此类推…。下面通过几个例子来了解一下张量对生活中各类数据的映射。
文章图片
图片被表示为4D张量,samples表示样本数、height表示样本高度、width表示样本宽度,channels表示通道数(彩色图为3,即RGB)。
视频被表示为5D张量,smaples表示样本数、frames表示帧序号、height表示每一帧的高度、width表示每一帧宽度、channels表示图片通道数。
再比如在建造一个小区的时,把一排砖头看作一阶张量,一堵墙看作二阶张量,一层楼看作三阶张量,一座楼看作四阶张量,一个小区看作五阶张量,多个小区就可以看作六阶张量,以此类推。通过这样的方式,我们就能通过这些索引定位到每一块砖头,也就意味着有了通过计算机批量操纵这些数据的能力,这就是为什么张量是机器学习的核心内容,因为机器学习对target function的求导、优化等操作,大多基于张量的表示和运算。
文章图片
同时学过python的同学应该对numpy库并不陌生,numpy.array其实也可以理解为张量,它表示张量的维度可以理解成“ [”的深度(如上图)。即有下面的对应关系,当[深度为n,也就表示n维的张量。当然不同张量之间还有很多的运算(缩并、内积、点积等),为了使用方便Google在2019年开源了TensorNetwork,它使用 TensorFlow 作为后端,针对 GPU 进行优化,与 CPU 上的运行速度相比实现了 100 倍的加速。希望大家都能多多尝试,确实是一个非常方便的框架,推荐搭配GPU食用☆ ̄(>。☆)!
除了在机器上表示,那么当我们利用张量进行运算时,如何在纸上表示呢,当当当当!有三种记法,其含义一致。
文章图片
其中 e 1 , e 2 , e 3 e_1, e_2, e_3 e1?,e2?,e3?是单位基矢量,满足
e i ? e j = { 1 i=j 0 i!=j e_i\cdot e_j= \begin{cases} 1& \text{i=j}\\ 0& \text{i!=j} \end{cases} ei??ej?={10?i=ji!=j?
张量基本运算 上面提到了张量的运算,包括和、差、数积、并积、内积、缩并、点积、双点积等操作。
【[量子计算,与你有关]张量与张量网络】和、差
两个同阶张量 A = A i j e i e j A=A_{ij}e_i e_j A=Aij?ei?ej?与 B = B i j e i e j B=B_{ij}e_i e_j B=Bij?ei?ej?之和(或差)是另一个同阶张量 T = T i j e i e j T=T_{ij}e_i e_j T=Tij?ei?ej?,即
T = A ± B T=A\pm B T=A±B
其分量关系为
T i j = T i j ± B i j \color{grey}T_{ij}=T_{ij}\pm B_{ij} Tij?=Tij?±Bij?
数积
张量A和一个数 λ \lambda λ(或标量函数) 相乘得另一同维同阶张量T
T = λ A T=\lambda A T=λA
其分量关系为
T i j = λ A i j T_{ij}=\lambda A_{ij} Tij?=λAij?
并积
两个同维不同阶(或同阶)张量 A A A和 B B B的并积 T是一个阶数等于 A A A、 B B B阶数之和的高阶张量。设 A = A i j k e i e j e k A=A_{ijk}e_i e_j e_k A=Aijk?ei?ej?ek?, B = B l m e l e m B=B_{lm}e_l e_m B=Blm?el?em?,则
T = A B = T i j k l m e i e j e k e l e m \color{green}T=AB=T_{ijklm}e_i e_j e_k e_l e_m T=AB=Tijklm?ei?ej?ek?el?em?
其分量关系为 T i j k l m = A i j k B l m T_{ijklm}=A_{ijk}B_{lm} Tijklm?=Aijk?Blm?,千万注意:A B ≠ B A AB\neq BA AB?=BA
缩并
缩并可是张量的核心运算之一,后面的张量网络是建立在缩并运算的基础之上的。若对基张量中的任意两个基矢量求点积,在张量将缩并为低二阶的新张量。在基张量中取不同基矢量的点积,则缩并的结果也不同,算法描述公式如下
R = T i j k e i e j e k = T i i k e k = R k e k ? R j = T i i j S = T i j k e i e j e k = T i j i e k = S j e j ? S j = T i j i ? R ≠ S \color{navy}R=T_{ijk}e_i e_j e_k=T_{iik}e_k =R_ke_k \Rightarrow R_j=T_{iij} \\ S=T_{ijk}e_i e_j e_k=T_{iji}e_k =S_je_j \Rightarrow S_j=T_{iji} \\ \Rightarrow R\neq S R=Tijk?ei?ej?ek?=Tiik?ek?=Rk?ek??Rj?=Tiij?S=Tijk?ei?ej?ek?=Tiji?ek?=Sj?ej??Sj?=Tiji??R?=S
再来看看几种典型的缩并情况
文章图片
内积
并积加缩并运算称为内积。例如 A = A i j k e i e j e k A=A_{ijk}e_i e_j e_k A=Aijk?ei?ej?ek?和 B = B l m e l e m B=B_{lm}e_l e_m B=Blm?el?em?的一种内积是(这里将 e i e_i ei?和 e m e_m em?进行缩并)
S = A i j k e i e j e k B l m e l e m = A i j k B l j e i e k e l \color{teal}S =A_{ijk}e_ie_je_kB_{lm}e_l e_m = A_{ijk}B_{lj}e_ie_ke_l S=Aijk?ei?ej?ek?Blm?el?em?=Aijk?Blj?ei?ek?el?
其分量关系为
S i k l = A i j k B l j S_{ikl}=A_{ijk}B_{lj} Sikl?=Aijk?Blj?
示例如图所示
文章图片
点积
前张量 A 的最后基矢量与后张量 B 的第一基矢量缩并的结果,记为 A ? B A\cdot B A?B,是最常用的一种内积
R = A ? B = A i j k B l m e i e j e k ? e l e m = A i j k B k m e i e j e m = R i j m e i e j e m R = A\cdot B = A_{ijk}B_{lm}e_i e_j e_k\cdot e_l e_m \\ =A_{ijk}B_{km}e_i e_je_m=R_{ijm}e_ie_je_m R=A?B=Aijk?Blm?ei?ej?ek??el?em?=Aijk?Bkm?ei?ej?em?=Rijm?ei?ej?em?
R i j m = A i j k B k m R_{ijm}=A_{ijk}B{km} Rijm?=Aijk?Bkm
从上述公式可知两个二阶张量的点积相当于矩阵乘法。
双点积
对前、后张量中两对近挨着的基矢量缩并的结果称为双点积,共有两种:
- 并双点积
T = A : B = A i j k B j k e i = T i e i T=A:B=A_{ijk}B_{jk}e_i=T_ie_i T=A:B=Aijk?Bjk?ei?=Ti?ei? - 串双点积
S = A ? ? B = A i j k B k j e i = S i e i S=A\cdot \cdot B=A_{ijk}B_{kj}e_i=S_ie_i S=A??B=Aijk?Bkj?ei?=Si?ei?
张量的各类运算总结起来如下图所示
文章图片