标量(scalar):一个标量就是单独的一个数。一般用斜体的小写字母表示标量,会明确数的类型。例如, s ∈ R s \in \mathbb{R} s∈R 表示一个实数标量。
向量(vector):一个向量是一列数。一般用粗体的小写字母表示, x ∈ R n \boldsymbol{x} \in \mathbb{R}^{n} x∈Rn 表示该向量属于实数集 R \mathbb{R} R 的 n n n次笛卡尔乘积构成的集合。向量里的数是有序的,例如,向量 x \boldsymbol{x} x 的第一个元素是 x 1 x_{1} x1 。当我们需要明确向量中的元素,我们可以把向量表示为
x = [ x 1 x 2 ⋮ x n ] \boldsymbol{x}=\left[\begin{array}{c} x_{1} \\ x_{2} \\ \vdots \\ x_{n} \end{array}\right] x=⎣⎢⎢⎢⎡x1x2⋮xn⎦⎥⎥⎥⎤
向量可以视为空间中的点,每个元素是不同坐标轴上的坐标。
矩阵(matrix):一个矩阵是一个二维数组。一般用粗体的大写字母表示, A ∈ R m × n \boldsymbol{A} \in \mathbb{R}^{m \times n} A∈Rm×n 就表示一个高为 m m m,宽为 n n n的实数矩阵。 A m , n A_{m, n} Am,n表示矩阵中的一个元素, A i , : \boldsymbol{A}_{i,:} Ai,:表示 A \boldsymbol{A} A 的第 i i i 行(row), A : , i \boldsymbol{A}_{:,i} A:,i表示 A \boldsymbol{A} A 的第 i i i 列(column)。当我们需要明确矩阵中的元素时,我们可以把矩阵表示为
[ A 1 , 1 A 1 , 2 A 2 , 1 A 2 , 2 ] \left[\begin{array}{ll} A_{1,1} & A_{1,2} \\ A_{2,1} & A_{2,2} \end{array}\right] [A1,1A2,1A1,2A2,2]
张量(tensor):张量表示坐标超过两维的数组。一般使用不斜体的粗体大写字母表示,张量 A \text { A } A 中的一个元素可表示为 A i , j , k A_{i, j, k} Ai,j,k。
主对角线(main diagonal):从矩阵的左上角到右下角的直线是主对角线。
转置(transpose):矩阵的转置是以主对角线为轴的镜像。我们将矩阵 A \boldsymbol{A} A 的转置表示为 ( A ⊤ ) \left(\boldsymbol{A}^{\top}\right) (A⊤), 定义如下
( A ⊤ ) i , j = A j , i \left(\boldsymbol{A}^{\top}\right)_{i, j}=A_{j, i} (A⊤)i,j=Aj,i
广播(broadcasting):深度学习中允许矩阵和向量相加,产生另一个矩阵: C = A + b \boldsymbol{C}=\boldsymbol{A}+\boldsymbol{b} C=A+b, 其中 C i , j = A i , j + b j C_{i, j}=A_{i, j}+b_{j} Ci,j=Ai,j+bj。换言之,向量 b \boldsymbol{b} b和矩阵 A \boldsymbol{A} A的每一行相加。这种隐式地复制向量的方式被称作广播。
矩阵乘法(matrix product):如果矩阵 A \boldsymbol{A} A 的形状是 m × n m \times n m×n, 矩阵 B \boldsymbol{B} B 的形状是 n × p n \times p n×p, 那么矩阵 C \boldsymbol{C} C 的形状是 m × p 。 m \times p_{\text {。 }} m×p。 。矩阵乘法表示为
C = A B C=A B C=AB
具体地, 该乘法操作定义为
C i , j = ∑ k A i , k B k , j C_{i, j}=\sum_{k} A_{i, k} B_{k, j} Ci,j=k∑Ai,kBk,j
矩阵乘积满足分配律和结合律,但不满足交换律。
矩阵乘积的转置如下
( A B ) ⊤ = B ⊤ A ⊤ (\boldsymbol{A} \boldsymbol{B})^{\top}=\boldsymbol{B}^{\top} \boldsymbol{A}^{\top} (AB)⊤=B⊤A⊤
元素对应乘积(element-wise product):指使两个矩阵中对应元素相乘,记作 A ⊙ B \boldsymbol{A} \odot \boldsymbol{B} A⊙B。
点积(dot product):指使两个维度相同的向量做矩阵乘积,记作 x ⊤ y \boldsymbol{x}^{\top} \boldsymbol{y} x⊤y。点积满足交换律。
线性方程组:线性方程组可表示为:
A x = b \boldsymbol{A} \boldsymbol{x}=\boldsymbol{b} Ax=b
其中 A ∈ R m × n \boldsymbol{A} \in \mathbb{R}^{m \times n} A∈Rm×n 是一个已知矩阵, b ∈ R m \boldsymbol{b} \in \mathbb{R}^{m} b∈Rm 是一个已知向量, x ∈ R n \boldsymbol{x} \in \mathbb{R}^{n} x∈Rn 是一个我们要
求解的末知向量。向量 x x x 的每一个元素 x i x_{i} xi 都是末知的。矩阵 A \boldsymbol{A} A 的每一行和 b \boldsymbol{b} b 中对 应的元素构成一个约束。
该线性方程组还可表示为:
A 1 , : x = b 1 A 2 , : x = b 2 … A m , : x = b m \begin{gathered} \boldsymbol{A}_{1,:} \boldsymbol{x}=b_{1} \\ \boldsymbol{A}_{2,:} \boldsymbol{x}=b_{2} \\ \ldots \\ \boldsymbol{A}_{m,:} \boldsymbol{x}=b_{m} \end{gathered} A1,:x=b1A2,:x=b2…Am,:x=bm
或更明确的表示为:
A 1 , 1 x 1 + A 1 , 2 x 2 + ⋯ A 1 , n x n = b 1 A 2 , 1 x 1 + A 2 , 2 x 2 + ⋯ A 2 , n x n = b 2 … A m , 1 x 1 + A m , 2 x 2 + ⋯ A m , n x n = b m . \begin{gathered} \boldsymbol{A}_{1,1} x_{1}+\boldsymbol{A}_{1,2} x_{2}+\cdots \boldsymbol{A}_{1, n} x_{n}=b_{1} \\ \boldsymbol{A}_{2,1} x_{1}+\boldsymbol{A}_{2,2} x_{2}+\cdots \boldsymbol{A}_{2, n} x_{n}=b_{2} \\ \ldots \\ \boldsymbol{A}_{m, 1} x_{1}+\boldsymbol{A}_{m, 2} x_{2}+\cdots \boldsymbol{A}_{m, n} x_{n}=b_{m} . \end{gathered} A1,1x1+A1,2x2+⋯A1,nxn=b1A2,1x1+A2,2x2+⋯A2,nxn=b2…Am,1x1+Am,2x2+⋯Am,nxn=bm.
单位矩阵(identity matrix):单位矩阵是个正方形,沿主对角线的元素都是1,其他位置的元素都是0。如下图:
[ 1 0 0 0 1 0 0 0 1 ] \left[\begin{array}{lll} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array}\right] ⎣⎡100010001⎦⎤
任意向量和单位矩阵相乘,都不会改变。我们将保持 n n n 维向量不变的单位矩阵记作 I n ∘ \boldsymbol{I}_{n \circ} In∘ 形式上, I n ∈ R n × n \boldsymbol{I}_{n} \in \mathbb{R}^{n \times n} In∈Rn×n,
∀ x ∈ R n , I n x = x . \forall \boldsymbol{x} \in \mathbb{R}^{n}, \boldsymbol{I}_{n} \boldsymbol{x}=\boldsymbol{x} . ∀x∈Rn,Inx=x.
矩阵逆(matrix inversion):矩阵 A A A 的 矩阵逆记作 A − 1 A^{-1} A−1, 其定义的矩阵满足如下条件
A − 1 A = I n . \boldsymbol{A}^{-1} \boldsymbol{A}=\boldsymbol{I}_{n} \text {. } A−1A=In.
现在我们可以通过以下步骤求解线性方程组 :
A x = b A − 1 A x = A − 1 b I n x = A − 1 b x = A − 1 b . \begin{gathered} \boldsymbol{A} \boldsymbol{x}=\boldsymbol{b} \\ \boldsymbol{A}^{-1} \boldsymbol{A} \boldsymbol{x}=\boldsymbol{A}^{-1} \boldsymbol{b} \\ \boldsymbol{I}_{n} \boldsymbol{x}=\boldsymbol{A}^{-1} \boldsymbol{b} \\ \boldsymbol{x}=\boldsymbol{A}^{-1} \boldsymbol{b} . \end{gathered} Ax=bA−1Ax=A−1bInx=A−1bx=A−1b.
当然, 这取决于我们能否找到一个逆矩阵 A − 1 \boldsymbol{A}^{-1} A−1 。逆矩阵的存在是有条件的。
范数(norm):范数是可以衡量一个向量的大小的函数。 L p L^{p} Lp 范数定义如下
∥ x ∥ p = ( ∑ i ∣ x i ∣ p ) 1 p \|\boldsymbol{x}\|_{p}=\left(\sum_{i}\left|x_{i}\right|^{p}\right)^{\frac{1}{p}} ∥x∥p=(i∑∣xi∣p)p1
其中 p ∈ R , p ≥ 1 p \in \mathbb{R}, p \geq 1 p∈R,p≥1 。
当 p = 2 p=2 p=2 时, L 2 L^{2} L2 范数被称为 欧几里得范数(Euclidean norm)。
当 p = 1 p=1 p=1 时, L 1 L^{1} L1 范数可简化为
∥ x ∥ 1 = ∑ i ∣ x i ∣ \|x\|_{1}=\sum_{i}\left|x_{i}\right| ∥x∥1=i∑∣xi∣
L 1 L^{1} L1 范数相比 L 2 L^{2} L2 范数能更好的区分零和非零元素。
L ∞ L^{\infty} L∞范数被称为 最大范数(max norm)。
∥ x ∥ ∞ = max i ∣ x i ∣ \|\boldsymbol{x}\|_{\infty}=\max _{i}\left|x_{i}\right| ∥x∥∞=imax∣xi∣
衡量矩阵的大小可用用 Frobenius 范数 ( Frobenius norm ),
∥ A ∥ F = ∑ i , j A i , j 2 \|\boldsymbol{A}\|_{F}=\sqrt{\sum_{i, j} A_{i, j}^{2}} ∥A∥F=i,j∑Ai,j2
两个向量的点积可以用范数来表示。具体地,
x ⊤ y = ∥ x ∥ 2 ∥ y ∥ 2 cos θ \boldsymbol{x}^{\top} \boldsymbol{y}=\|\boldsymbol{x}\|_{2}\|\boldsymbol{y}\|_{2} \cos \theta x⊤y=∥x∥2∥y∥2cosθ
其中 θ \theta θ 表示 x x x 和 y y y 之间的夹角。
对角矩阵(diagonal matrix):只在主对角线上含有非零元素,其他位置都是零。形式上, 矩阵 D \boldsymbol{D} D 是对角矩阵, 当且仅当对于所有的 i ≠ j , D i , j = 0 i \neq j, D_{i, j}=0 i=j,Di,j=0 。我们用 diag ( v ) \operatorname{diag}(\boldsymbol{v}) diag(v) 表示一个对角元素 由向量 v v v 中元素给定的对角方阵。
对角矩阵的乘法很高效。计算乘法 diag ( v ) x \operatorname{diag}(\boldsymbol{v}) \boldsymbol{x} diag(v)x, 我们只需要将 x \boldsymbol{x} x 中的每个元素 x i x_{i} xi 放大 v i v_{i} vi 倍。换言之, diag ( v ) x = v ⊙ x ∘ \operatorname{diag}(\boldsymbol{v}) \boldsymbol{x}=\boldsymbol{v} \odot \boldsymbol{x}_{\circ} diag(v)x=v⊙x∘
计算对角方阵的逆矩阵也很高效。对角方阵的逆矩阵存在, 当且仅当对角元素都是非零值, 在这种情况下, diag ( v ) − 1 = diag ( [ 1 / v 1 , … , 1 / v n ] ⊤ ) \operatorname{diag}(\boldsymbol{v})^{-1}=\operatorname{diag}\left(\left[1 / v_{1}, \ldots, 1 / v_{n}\right]^{\top}\right) diag(v)−1=diag([1/v1,…,1/vn]⊤) 。
对称矩阵(symmetric matrix):转置和自己相等的矩阵。
单位向量(unit vector):具有单位范数(unit norm)的向量。
正交(orthogonal):如果 x ⊤ y = 0 \boldsymbol{x}^{\top} \boldsymbol{y}=0 x⊤y=0, 那么向量 x \boldsymbol{x} x 和向量 y \boldsymbol{y} y 互相正交 。如果两个向量都有非零范数,那么这两个向量之间的夹角为90度。
在 R n \mathbb{R}^{n} Rn 中, 至多有 n n n 个范数非零范数互相正交。也就是说,在二维空间中,最多就两个向量互相垂直,不会有三个向量互相垂直。
标准正交:如果向量之间不仅互相正交, 并且范数都为 1 , 那么我们称它们是标准正交。
正交矩阵(orthogonal matrix):指行向量和列向量是分别标准正交的方阵:
A ⊤ A = A A ⊤ = I \boldsymbol{A}^{\top} \boldsymbol{A}=\boldsymbol{A} \boldsymbol{A}^{\top}=\boldsymbol{I} A⊤A=AA⊤=I
这意味着
A − 1 = A ⊤ \boldsymbol{A}^{-1}=\boldsymbol{A}^{\top} A−1=A⊤
上式是由矩阵逆的定义得到的。
正交矩阵得到关注是因为求逆的计算代价很小。
迹运算:迹运算返回矩阵对角元素的和
Tr ( A ) = ∑ i A i , i \operatorname{Tr}(\boldsymbol{A})=\sum_{i} \boldsymbol{A}_{i, i} Tr(A)=i∑Ai,i
迹运算可以清除的表示一些矩阵运算。例如, 迹运算提供了另一种描述矩阵Frobenius范数的方式:
∥ A ∥ F = Tr ( A A ⊤ ) . \|A\|_{F}=\sqrt{\operatorname{Tr}\left(\boldsymbol{A A}^{\top}\right)} . ∥A∥F=Tr(AA⊤).
迹运算在转置运算下不变:
Tr ( A ) = Tr ( A ⊤ ) \operatorname{Tr}(\boldsymbol{A})=\operatorname{Tr}\left(\boldsymbol{A}^{\top}\right) Tr(A)=Tr(A⊤)
多个矩阵相乘得到的方阵的迹,和将这些矩阵中的最后一个挪到最前面之后相 乘的迹是相同的。当然,我们需要考虑挪动之后矩阵乘积依然定义良好:
Tr ( A B C ) = Tr ( C A B ) = Tr ( B C A ) \operatorname{Tr}(\boldsymbol{A} \boldsymbol{B C})=\operatorname{Tr}(\boldsymbol{C A} \boldsymbol{B})=\operatorname{Tr}(\boldsymbol{B} \boldsymbol{C A}) Tr(ABC)=Tr(CAB)=Tr(BCA)
即使循环置换后矩阵乘积得到的矩阵形状变了,迹运算的结果依然不变。例如,假 设矩阵 A ∈ R m × n \boldsymbol{A} \in \mathbb{R}^{m \times n} A∈Rm×n ,矩阵 B ∈ R n × m \boldsymbol{B} \in \mathbb{R}^{n \times m} B∈Rn×m ,我们可以得到
Tr ( A B ) = Tr ( B A ) \operatorname{Tr}(\boldsymbol{A B})=\operatorname{Tr}(\boldsymbol{B A}) Tr(AB)=Tr(BA)
尽管 A B ∈ R m × m \boldsymbol{A} \boldsymbol{B} \in \mathbb{R}^{m \times m} AB∈Rm×m 和 B A ∈ R n × n \boldsymbol{B A} \in \mathbb{R}^{n \times n} BA∈Rn×n 。
另一个有用的事实是标量在迹运算后仍然是它自己: a = Tr ( a ) a=\operatorname{Tr}(a) a=Tr(a) 。
如果逆矩阵 A − 1 \boldsymbol{A}^{-1} A−1存在,那么 A x = b \boldsymbol{A} \boldsymbol{x}=\boldsymbol{b} Ax=b肯定对于每一个向量 b \boldsymbol{b} b恰好存在一个解。
这里可以这样理解,因为 A − 1 \boldsymbol{A}^{-1} A−1存在,所以 A x = b \boldsymbol{A} \boldsymbol{x}=\boldsymbol{b} Ax=b必定可以写成 A − 1 A x = A − 1 b \boldsymbol{A}^{-1}\boldsymbol{A} \boldsymbol{x}=\boldsymbol{A}^{-1}\boldsymbol{b} A−1Ax=A−1b,即 x = A − 1 b \boldsymbol{x}=\boldsymbol{A}^{-1}\boldsymbol{b} x=A−1b,那么无论 b \boldsymbol{b} b取什么值,必定有个唯一的 x \boldsymbol{x} x与之对应。
但是实际上,对于 b \boldsymbol{b} b的某些值,有可能无解,也有可能有无数多个解,多于一个解少于无数个解的情况不存在。
因为方程恰好存在一个解,矩阵逆才有可能存在,所以接下来我们需要分析方程有多少个解。我们可以将 A \boldsymbol{A} A的列向量看作从原点出发的不同方向,确定有多少种方法可以到达向量 b \boldsymbol{b} b,向量 x \boldsymbol{x} x中每个元素表示沿着这个列向量走多远:
A x = ∑ i x i A : , i \boldsymbol{A} \boldsymbol{x}=\sum_{i} \boldsymbol{x}_{i}\boldsymbol{A}_{:,i} Ax=i∑xiA:,i
这里是说, A \boldsymbol{A} A中的每个列向量乘的都是相同的 x i x_{i} xi,所以可以理解为每个列向量缩放再向量相加,能不能和向量 b \boldsymbol{b} b重合。
这种操作叫线性组合(linear combination)。一组向量的线性组合是指每个向量乘以对应标量系数之后的和,即:
∑ i c i v ( i ) \sum_{i}c_{i}\boldsymbol{v}^{(i)} i∑civ(i)
一组向量的生成子空间(span)是原始向量线性组合后所能抵达的点的集合,即 b \boldsymbol{b} b的取值。
确定 A x = b \boldsymbol{A} \boldsymbol{x}=\boldsymbol{b} Ax=b是否有解相当于确定向量 b \boldsymbol{b} b是否再 A \boldsymbol{A} A列向量的生成子空间中。 A \boldsymbol{A} A列向量的生成子空间被称为 A \boldsymbol{A} A的列空间(column space)。
为了使 A x = b \boldsymbol{A} \boldsymbol{x}=\boldsymbol{b} Ax=b对于任意向量 b ∈ R m \boldsymbol{b} \in \mathbb{R}^{m} b∈Rm都有解,那么 A \boldsymbol{A} A的列向量要构成整个 R m \mathbb{R}^{m} Rm,也就是说 A \boldsymbol{A} A至少有 m m m列,即 n ⩾ m n \geqslant m n⩾m,这是方程对每一点有解的必要条件。我们还需要 A \boldsymbol{A} A的列向量是线性无关(linearly independent)的,即一组向量中的任意一个向量都不能表示成其他向量的线性组合,如若可以,则是线性相关(linearly dependence)的。也就是说 A \boldsymbol{A} A的列向量至少包含 m m m个线性无关的向量。若要保证方程只有一个解,那么 A \boldsymbol{A} A最多只能有 m m m个列向量。
因此,矩阵逆存在,意味着整个矩阵是个方阵(square),即 m = n m=n m=n,而且列向量是线性无关的。
列向量线性相关的方阵被称为奇异的(singular)方阵。奇异方阵的方程或者不是方阵的方程仍可能有解,但无法用矩阵逆去解。
方阵的左逆和右逆相等,因为他的行和列数目是一样的。
我们可以分解矩阵来发现矩阵表示成数组元素时不明显的函数性质。
特征分解(eigendecomposition)是将矩阵分解成一组特征向量和特征值。