前言
在正式开始学习深度学习之前,我们还需要补充一些必要的线性代数基础知识。线性代数是深度学习的重要数学基础,向量、矩阵及其相关运算在后续学习中都有着广泛的应用。
考虑到大部分读者可能已经接触过部分线性代数知识,本文将重点梳理深度学习中常用的基础概念与运算,对于相对简单或已有一定了解的内容不再过多赘述,力求通过一篇文章完成必要的线性代数基础知识的补充,为后续学习深度学习相关理论与算法打下基础。
如果读者此前完全没有接触过线性代数,也可以通过网络另寻相关资源进行系统学习。
1 标量、向量、矩阵和张量
1.1 标量(Scalar)
标量就是一个单独的数。
例如:
温度:25
学习率:0.01
商品价格:99.9
在数学中,我们可以用字母 a 表示一个标量,例如:
a = 5
这里的 a 就是一个标量。
在深度学习中,损失值、学习率等都可以用标量表示。
你可以把标量理解为:一个数字。
1.2 向量(Vector)
如果把多个数字按照一定顺序排列起来,就可以形成一个向量。
例如,一个人有三个成绩:
这个向量包含三个元素,分别表示三门课程的成绩。
在深度学习中,一张经过处理的图片、一段文本的特征,或者一个样本的多个属性,都可能被表示为向量。
你可以把向量理解为:一组按照顺序排列的数字。
向量有一个需要注意的地方:数学中通常把向量写成列向量,也就是数字从上到下排列。不过,在代码中我们也经常看到一行数字组成的数组,具体形状取决于使用的工具和约定。
1.3 矩阵(Matrix)
如果把多个向量按照行和列排列起来,就可以形成矩阵。
例如,一个班级有三名学生,每名学生有两门课程的成绩:
这个矩阵有 3 行、2 列,因此它的形状是 3 × 2 。
因此,矩阵 A 的形状是 3 × 2,包含 6 个数字。
在深度学习中,矩阵经常用于存储一批样本的数据,或者表示神经网络中的权重。
你可以把矩阵理解为:按照行和列组织起来的二维数字表格。
1.4 张量(Tensor)
接下来是一个很重要的概念:张量。
初学者经常会觉得张量是一个特别复杂的数学对象,其实在这本书介绍的基础语境下,你可以先把它理解为一种能够统一表示不同维度数据的数学对象。
0阶张量:如标量,可以表示单个数字。
1阶张量:如向量,可以表示一组数字。
2阶张量:如矩阵,可以表示二维数字表格。
n阶张量:取用一个元素,需要 n 个索引。
阶(rank)= 索引个数
这里有一个容易混淆的细节:在严格的数学定义中,张量不只是“多维数组”;但在深度学习入门和编程实践中,把它先理解为多维数据的表示方式,是一种很实用的入门方法。
2 矩阵和向量的运算
2.1 矩阵加法与标量乘法
先从最简单的运算开始。
2.1.1 矩阵加法
假设有两个矩阵:
矩阵相加时,对应位置的数字分别相加:
你可以把它理解为两张数字表格进行对应位置的加法。
注意:矩阵加法通常要求两个矩阵的形状相同。例如,两个 2 × 2 的矩阵可以直接相加,但 2 × 2的矩阵不能直接与 3 × 2 的矩阵进行普通矩阵加法。
深度学习中会经常遇到类似的数值运算,例如对数据进行缩放,或者在公式中对某些项乘以一个系数。
2.1.2 向量加法与逐元素乘法
刚才我们学习了矩阵加法,向量也可以进行类似的运算。
假设有两个向量:
它们相加的结果是:
同样是对应位置的数字相加。
除此之外,还有一种运算叫作逐元素乘法,也就是对应位置的数字分别相乘:
这里的符号表示逐元素乘法。
它和我们接下来要学习的矩阵乘法不是一回事。两者的计算规则不同。
2.1.3 矩阵转置
这是第二章里一个很基础、但后面会经常出现的概念。
定义:矩阵转置就是把矩阵的行和列交换。
例如:
这个矩阵有 2 行、3 列。
转置后得到:
现在它有 3 行、2 列。
简单来说:
原来第一行的1, 2, 3,变成了转置矩阵的第一列。
原来第二行的 4, 5, 6,变成了转置矩阵的第二列。
矩阵转置通常用表示。
记住:转置不会改变元素本身,只会交换行和列的位置。
2.1.4 矩阵与向量相乘
先看一个简单例子:
计算时,我们需要让矩阵的每一行分别与向量进行对应计算:
这里有一个重要规则:
矩阵与向量相乘时,矩阵的列数必须等于向量的元素个数。
在这个例子中,矩阵是 2 × 2 ,向量
有 2 个元素,因此可以相乘,最后得到一个包含 2 个元素的向量。
这类运算在神经网络中非常重要。例如,输入数据可以表示为向量,模型的权重可以表示为矩阵,两者相乘就能计算出一组新的数值。
不过,神经网络中通常还会涉及偏置项和激活函数,我们后面学习神经网络时再详细讲解。
2.1.5 矩阵与矩阵相乘
矩阵乘法不是让对应位置直接相乘,而是让第一个矩阵的每一行,与第二个矩阵的每一列分别进行点积运算。
我们来看个例子:
你可以把整个过程记成一句话:左矩阵取行,右矩阵取列,对应相乘,再把结果相加。
矩阵乘法有一个必须掌握的规则:第一个矩阵的列数,必须等于第二个矩阵的行数。
假设:
,
那么它们相乘后:
2.2 点积
点积是线性代数中一种常见的向量运算,也是理解矩阵乘法的重要基础。在深度学习中,点积经常用于计算输入数据与模型参数之间的加权结果。
假设有两个维度相同的向量:
a = (a₁, a₂, …, aₙ)
b = (b₁, b₂, …, bₙ)
它们的点积定义为对应位置的元素分别相乘,再将所有乘积相加,即:
a · b = a₁b₁ + a₂b₂ + … + aₙbₙ
需要注意,点积的结果是一个标量,而不是向量或矩阵。
举个例子:
假设有两个向量:
a = (1, 2, 3)
b = (4, 5, 6)
那么它们的点积为:
a · b = 1×4 + 2×5 + 3×6 = 32
通过这个例子可以发现,点积的计算过程并不复杂,关键在于两个向量必须具有相同的维度,并按照对应位置进行乘法运算,最后将结果相加。
在深度学习中,点积有着广泛的应用。例如,在一个简单的神经元中,输入向量可以与权重向量进行点积,再加上偏置项,得到神经元的线性计算结果:
z = w · x + b
其中,x 表示输入数据,w 表示模型权重,b 表示偏置,z 表示线性计算结果。神经网络中的许多计算都建立在这一基本形式之上。
3 单位矩阵、逆矩阵与线性方程组
3.1 单位矩阵
单位矩阵是一种特殊的方阵,它的主对角线元素全部为 1,其余元素全部为 0。
例如,二阶和三阶单位矩阵分别为:
单位矩阵通常用字母表示,下标用于表示矩阵的阶数。
3.2 逆矩阵
如果矩阵存在另一个矩阵
,使得:
那么矩阵就称为
的逆矩阵。
注意,矩阵的乘法有顺序,所以定义要求左右相乘都得到单位矩阵。
3.3 奇异矩阵与非奇异矩阵
3.3.1 奇异矩阵
定义:奇异矩阵是没有逆矩阵的方阵。
例如:
它的第二列是第一列的两倍,因此两列存在重复的线性信息。
且计算行列式:
由于行列式为 0,所以这个矩阵没有逆矩阵,它是奇异矩阵。
3.3.2 非奇异矩阵
定义:非奇异矩阵就是存在逆矩阵的方阵。
4 线性相关、生成子空间与范数
4.1 线性组合
线性组合是指将多个向量分别乘以一个标量,再把得到的向量相加。
假设有两个向量:
分别给它们乘以系数 a 和 b ,再将结果相加,就得到:
这就是一个线性组合。
4.2 生成子空间
生成子空间可以理解为:给定一组向量,让它们通过所有可能的线性组合,能够得到的全部向量所构成的集合。
4.3 线性相关与线性无关
4.3.1 线性相关
如果一组向量中,至少有一个向量可以由其他向量通过线性组合得到,那么这组向量就是线性相关的。
例如:
可以发现:
第二个向量只是第一个向量的两倍,没有提供新的方向,因此这两个向量线性相关。
4.3.2 线性无关
如果一组向量中,没有任何一个向量可以由其他向量的线性组合得到,那么这组向量就是线性无关的。
例如:
这两个向量方向不同,不能通过其中一个向量的数乘得到另一个向量,因此它们线性无关。
4.4 向量空间与子空间
4.4.1 什么是向量空间
向量空间可以理解为一个由向量构成的集合,并且其中的向量在进行向量加法和数乘后,仍然满足相应的空间规则。
例如,二维实数向量空间可以表示为:
它包含所有由两个实数组成的向量。
4.4.2 什么是字空间
子空间是某个向量空间内部的一个子集,并且它本身也满足向量空间的基本运算规则。
例如,在二维空间中,所有形如
的向量构成一条经过原点的直线。这条直线是的一个子空间。
判断一个非空集合是否为子空间,通常需要检查:
包含零向量:零向量必须属于这个集合。
对加法封闭:集合中两个向量相加,结果仍在集合中。
对数乘封闭:集合中的向量乘以任意实数,结果仍在集合中。
4.5 范数
前面几节主要讨论向量之间的关系,而范数则用于衡量向量的大小。
常见的范数包括范数、
范数和
范数。
4.5.1
范数
范数是向量中所有元素的绝对值之和。
数学表达式为:
其中,表示向量中的第
个元素。
4.5.2
范数
范数是向量中各元素平方求和后再开平方,也就是我们熟悉的欧几里得长度。
数学表达式为:
另外,深度学习中也经常使用平方范数:
4.5.3
范数
范数也叫无穷范数,定义为向量中所有元素绝对值的最大值。
数学表达式为:
5 特征值、特征向量与矩阵分解
5.1 特征值与特征向量
通常情况下,一个矩阵与向量相乘,会改变向量的大小,也可能改变它的方向。
但有些特殊向量经过矩阵变换后,方向不会改变,只是长度发生缩放。这类特殊向量就是特征向量,对应的缩放系数就是特征值。
数学上,如果矩阵和非零向量
满足:
那么:
:矩阵,表示一种线性变换。
:特征向量,必须是非零向量。
:特征值,表示该方向上的缩放系数。
举个例子:
假设有一个矩阵:
以及向量:
计算矩阵与向量的乘积:
可以发现:
因此,是矩阵
的特征向量,对应的特征值为 2 。
再来看另一个向量:
同样计算可得:
所以,也是特征向量,对应的特征值为 3 。
如何求特征值与特征向量?
从定义出发:
将右边移到左边:
其中是单位矩阵。
要使这个方程存在非零解,矩阵必须是奇异矩阵,因此:
这个方程称为特征方程。求出它的根,就可以得到矩阵的特征值;再将特征值代回前面的方程,就可以求相应的特征向量。
对于初学者,先掌握这个求解思路即可,不需要一开始就练习复杂矩阵的特征值计算。
5.2 特征分解
什么是特征分解?
前面我们学习了单个特征值和特征向量。假如一个矩阵拥有足够多的线性无关特征向量,就可以把这些特征向量和特征值组合起来,将原矩阵表示为几个矩阵的乘积。
这个过程称为特征分解。
对于一个具有个线性无关特征向量的
矩阵
,可以写成:
其中:
:由特征向量组成的矩阵,每一列是一个特征向量。
:由特征值组成的向量。
:以这些特征值为主对角线元素的对角矩阵。
:矩阵
的逆矩阵。
这里的关键是:原来可能比较复杂的矩阵,可以通过特征向量矩阵、特征值对角矩阵和逆矩阵来表示。
需要注意,并不是每一个矩阵都能在实数范围内进行特征分解。
5.3 奇异值分解(SVD)
5.3.1 什么是奇异值分解?
奇异值分解的英文是 Singular Value Decomposition,简称 SVD。
它与特征分解有相似之处:都是将矩阵拆解成几个具有特定结构的矩阵,从而帮助我们分析原矩阵。
但两者有一个非常重要的区别:
特征分解要求矩阵满足相应的可分解条件。
每个实数矩阵都可以进行奇异值分解,包括非方阵。
假设是一个
的实数矩阵,则它可以表示为:
其中:
:一个
的正交矩阵。
:一个
的对角形矩阵。
:一个
的正交矩阵。
这里的不一定是方阵。所谓对角形矩阵,是指非零的对角元素位于主对角线位置,其余位置为零。
5.3.2 奇异值和奇异向量是什么?
在 SVD 中,有三个重要概念。
奇异值(Singular Value)
矩阵主对角线上的元素称为奇异值。奇异值是非负数,用于描述矩阵变换中的缩放程度。
左奇异向量(Left Singular Vector)
矩阵的列向量称为左奇异向量。
右奇异向量(Right Singular Vector)
矩阵的列向量称为右奇异向量。
矩阵 \(V\) 的列向量称为右奇异向量。
它们之间存在重要联系:
左奇异向量是
的特征向量。
右奇异向量是
的特征向量。
非零奇异值等于
或
的相应非零特征值的平方根。
这里的表示矩阵
的转置。
5.3.3 通过一个简单例子理解 SVD
假设:
可以将它分解为:
在这个简单例子中,可以取:
于是:
矩阵的两个奇异值是 3 和 2 。
这个例子与前面的特征分解很相似,因为矩阵本身就是对角矩阵。对于一般矩阵,、
和
则可能具有不同的形式。
5.3.4 特征分解和 SVD 的区别
比较内容 | 特征分解 | 奇异值分解(SVD) |
|---|---|---|
核心对象 | 特征值、特征向量 | 奇异值、左右奇异向量 |
适用矩阵 | 需要满足可分解条件 | 所有实数矩阵 |
能否处理非方阵 | 不能直接进行通常意义上的特征分解 | 可以 |
典型形式 | ||
重要用途 | 分析矩阵的特征方向与缩放 | 矩阵分析、降维、伪逆等 |
6 其他常见矩阵运算与应用
6.1 矩阵的迹(Trace)
6.1.1 矩阵的迹的定义
矩阵的迹通常记为,它指的是方阵主对角线上所有元素的和。
例如,给定矩阵:
主对角线上的元素是 1、5、9,因此:
这里需要注意:矩阵的迹只计算主对角线上的元素,不需要计算其他位置的元素。
对于一个的方阵
,可以写成:
其中,表示矩阵第
行、第
列的元素。
6.1.2 矩阵的迹的性质
矩阵的迹具有一些常见性质。
性质一:两个矩阵相加时,迹可以相加。
前提是矩阵和
的形状相同。
性质二:矩阵乘以标量时,迹也乘以相同的标量。
其中是一个标量。
性质三:矩阵与其转置的迹相同。
这是因为矩阵转置不会改变主对角线上的元素。
性质四:对于形状匹配的矩阵乘积,可以交换迹内部乘积的顺序。
这里要求和
的维度使两边的乘积都能够定义,且两边的迹都有定义。这个性质不意味着矩阵乘法本身可以随意交换顺序,而是指在该条件下,两个乘积的迹相等。
6.2 行列式(Determinant)
6.2.1 什么是行列式?
行列式通常记为或
,它是与方阵对应的一个数值。
行列式可以帮助我们判断矩阵是否可逆,也能够从几何角度反映矩阵变换对面积或体积的缩放情况。
需要区分:矩阵是一个由元素组成的数组,而行列式是根据方阵的元素计算得到的一个数。
6.2.2 二阶矩阵的行列式
对于二阶方阵:
它的行列式为:
6.2.3 行列式与矩阵可逆性的关系
对于方阵,有一个非常重要的判断条件:
也就是说:
当行列式不为零时,矩阵可逆,称为非奇异矩阵。
当行列式等于零时,矩阵不可逆,称为奇异矩阵。