Python快乐编程:人工智能深度学习基础
上QQ阅读APP看书,第一时间看更新

3.1 标量、向量、矩阵和张量

学习线性代数首先需要了解以下几个重要的数学概念。

1.标量(scalar)

一个标量便是一个单独的数,是计算的最小单元,一般采用斜体小写的英文字母表示。在介绍标量时通常会明确其所属的类型。例如,“sR”表示s属于实数标量。

2.向量(vector)

向量是由多个标量构成的一维数组,这些数是有序排列的。通过次序中的索引可以确定每个单独的数,通常赋予向量粗体的小写变量名称,比如x。通过下标索引来获取每一个元素,向量x的第一个元素用x1表示,第二个元素用x2表示,以此类推,第n个元素用xn表示。当需要明确表示向量中的元素时一般会将元素排列成一个方括号包围的纵列,格式如下所示:

3.矩阵(matrix)

矩阵是由标量构成的二维数组,其中的每一个元素被两个索引所确定。本书采用粗斜体的大写拉丁字母来表示矩阵,比如A,如果实数矩阵A的行数为m,列数为n,便可以用ARm×n来表示A矩阵。在表示矩阵中的元素时,通常使用其名称以小写不加粗的斜体形式,索引用逗号间隔。例如,a1,1表示矩阵左上角的元素,am,n表示矩阵中右下角的元素。表示垂直坐标i中的所有元素时,用“:”表示水平坐标。比如通过ai,:表示A矩阵中垂直坐标i上的一横排元素,这也被称为A矩阵的第i行(row)。同样地,a:,i表示A的第i列(column)。在需要明确表示矩阵中的元素时,可以将它们写在用方括号包围起来的数组中,具体形式如下所示:

如果现在有m个用户的数据,每条数据含有n个特征,那么这些用户数据实际上对应了一个m×n的矩阵;一张图由16×16个像素点组成,那这个图就是一个16×16的矩阵。

4.张量(tensor)

在某些情况下,需要用到高于二维坐标的数组。当一组数组中的元素分布在若干维坐标的规则网格中时被称为张量。本书使用黑斜体大写字母来表示张量,例如,用A来表示张量“A”。以二维空间下的三阶张量A为例,将张量A中的坐标为(ijk)的元素记作Aijk。为了更好地理解张量,在此将如图3.1的一张RGB图片表示成一个三阶张量,张量的3个维度分别对应图片的高度、宽度和色彩数据。RGB图片的色彩数据可以拆分为3张红色、绿色和蓝色的灰度图片,通过张量的形式来表示,如表3.1所示。

图3.1 RGB人像图

表3.1 通过张量的形式表示RGB彩色图片

表3.1中的横轴表示图片的宽度值;纵轴表示图片的高度值(仅截取其中一部分数据);表格中每个方格代表一个像素点,[1.0,0,0]表示红色(Red,后面简称R),[0,1.0,0]表示绿色(Green,后面简称G),[0,0,1.0]表示蓝色(Blue,后面简称B)。以表3.1中第一行第一列为例,表中数据为[1.0,1.0,1.0],表示RGB 3种颜色在图片的该位置的取值情况为R=1.0,G=1.0,B=1.0。

张量在深度学习中非常重要,它是一个深度学习框架中的核心组件之一,后续的所有运算和优化算法几乎都是基于张量进行的。将各种各样的数据抽象成张量表示,然后再输入神经网络模型进行后续处理是一种非常必要且高效的策略。如果不采用将数据抽象成张量的方法,就需要根据各种不同类型的数据分别定义不同的组织形式,这样十分低效。通过将数据抽象成张量,还可以在数据处理完成后方便地将张量再转换回想要的格式。例如,Python的NumPy包中numpy.imread和numpy.imsave两个方法,分别用来将图片转换成张量对象(即代码中的Tensor对象),以及将张量再转换成图片保存起来。

矩阵的初等变换是矩阵的一种非常重要的运算,它在求解线性方程组、逆矩阵中都起到了非常重要的作用。对于任意一个矩阵ARm×n,下面3种变换称为矩阵的初等行变换。

· 对调任意两行中的元素,记作rirj

· 以不为0的数k乘以矩阵某一行的所有元素,记作ri×k

· 把某一行的所有元素的k倍加到另一行的对应的元素上去,记作ri×k+rj

初等行变换和初等列变换同理,只需将上述3种变换中的行改成列即可。初等行变换和初等列变换统称为初等变换。

矩阵等价:如果矩阵A经过有限次初等变换变成矩阵B,那么称矩阵A与矩阵B等价,记作AB

矩阵之间的等价关系具有下面的性质。

· 自反性:AA

· 对称性:若AB,则BA

· 传递性:若ABBC,则AC

转置(Transpose)是矩阵的重要操作之一。矩阵的转置是以对角线为轴的镜像,这条从左上角到右下角的对角线被称为主对角线(Main Diagonal)。将矩阵A的转置表示为AT的表达式为(ATi,j=Aj,i,矩阵转置如图3.2所示。

图3.2 矩阵转置

向量可以看作是只有一列的矩阵,向量的转置可以看作是对只有一行元素的矩阵进行转置。可以将向量表示成行矩阵的转置,写在行中,然后使用转置将其变为标准的列向量,比如x=[x1x2x3]T

标量可以看作是只有一个元素的矩阵。因此,标量的转置等于它本身,a=aT。任何两个形状一样的矩阵之间都可以相加。两个矩阵相加是指对应位置的元素相加,比如C=A+B,其中cij=aij+bij

标量和矩阵相乘,或是和矩阵相加时,将其与矩阵的每个元素相乘或相加,比如D=a×B+c,其中dij=a×bij+c

在深度学习中,会用到一些非常规的符号。允许矩阵和向量相加,产生另一个矩阵:C=A+b,其中Cij=Aij+bj。换言之,向量b和矩阵A的每一行相加。使用这种速记方法时无须在加法操作前定义复制向量b到矩阵A的每一行。这种隐式地复制向量b到很多位置的方式,被称为广播(broadcasting),广播的相关内容可以回顾第2章中讲解的内容。