线性代数
1. 标量、向量、矩阵、张量
学习线性代数,会涉及以下几个数学概念:
- 标量(scalar):
- 定义:一个标量就是一个单数的数,不同于线性代数中大多数概念会涉及到多个数。
- 表示法:我们用斜体表示标量。标量通常赋予小写的变量名称。
- 当我们介绍标量时,会明确它们是哪种类型的数。比如,在定义实数标量时,我们可能会说”让 s ∈ R s \in \mathbb{R} s∈R表示一条线的斜率“;在定义自然数标量时,我们可能会说” n ∈ N n \in \mathbb{N} n∈N表示元素的数目“。
- 向量(vector):
- 定义:一个向量是一个列数。这些数是有序排列的。通过次序中的索引,我们可以确定每个单独的数。
- 表示法:通常我们赋予向量粗体的小写变量名称,比如 x \boldsymbol{x} x。向量中的元素可以通过带脚标的斜体表示。
- 向量中元素表示法:向量 x \boldsymbol{x} x的第一个元素是 x 1 x_1 x1,第二个元素是 x 2 x_2 x2,等等。
- 我们也会注明存储在向量中的元素是什么类型的。如果每个元素都属于 R \mathbb{R} R,并且该向量有 n n n个元素,那么该向量属于实数集 R \mathbb{R} R笛卡尔乘积 n n n次,表示为 R n \mathbb{R}^n Rn。
- 当我们需要明确表示向量中的元素时,我们会将元素排列成一个方括号包围的纵柱:
x = [ x 1 x 2 ⋮ x n ] x = \left[ \begin{array}{c}x_1\\x_2\\ \vdots \\ x_n\end{array} \right] x= x1x2⋮xn - 另外,我们可以把向量看作空间中的点,每个元素是不同的坐标轴上的坐标。有时我们需要指定向量中某个集合的元素。在这种情况下,我们定义一个包含这些索引的集合,然后将该集合写在脚标处。比如,指定 x 1 x_1 x1, x 2 x_2 x2 和 x 3 x_3 x3我们定义集合 S = { 1 , 2 , 3 } S = \{1,2,3\} S={1,2,3},然后写作 x S x_S xS。我们用符号 − 表示集合的补集中的索引。比如 x − 1 x_{-1} x−1表示 x x x中除 x 1 x_1 x1外的所有元素, x S x_S xS表示 x x x中除, x 1 x_1 x1, x 2 x_2 x2, x 3 x_3 x3外所有元素构成的向量。
- 矩阵(matrix):
- 定义:矩阵是二维数组,其中的每一个元素被两个索引所确定。
- 矩阵表示法:通常会赋予矩阵粗体的大写变量名称,比如 A \boldsymbol{A} A。如果一个实数矩阵高度为 m m m,宽度为 n n n,那么我们说 A ∈ R m × n \boldsymbol{A} \in \mathbb{R}^{m \times n} A∈Rm×n。
- 矩阵中元素表示法:通常使用其名称以不加粗的斜体形式,索引用逗号间隔。
- 左上元素: A 1 , 1 \boldsymbol{A}_{1,1} A1,1表示 A \boldsymbol{A} A左上的元素
- 右下元素: A m , n \boldsymbol{A}_{m,n} Am,n表示 A \boldsymbol{A} A右下的元素
- 所有行元素: A i , : \boldsymbol{A}_{i,:} Ai,:表示 A \boldsymbol{A} A在 i i i行上的所有元素
- 所有列元素: A : , i \boldsymbol{A}_{:,i} A:,i表示 A \boldsymbol{A} A在 i i i列上的所有元素
- 需要明确表示矩阵中的元素时,我们会将元素排列成一个方括号包围的横柱: [ A 1 , 1 A 1 , 2 A 2 , 1 A 2 , 2 ] \left[\begin{array}{cc}\boldsymbol{A}_{1,1}&\boldsymbol{A}_{1,2}\\\boldsymbol{A}_{2,1}&\boldsymbol{A}_{2,2}\end{array}\right] [A1,1A2,1A1,2A2,2]
- 有时我们需要矩阵值表达式的索引。比如, f ( A ) i , j f(\boldsymbol{A})_{i,j} f(A)i,j表示函数 f f f作用在 A \boldsymbol{A} A上输出的矩阵的第 ( i , j ) (i,j) (i,j)个元素
- 张量(tensor):
- 定义:一组数据中的元素分布在若干维坐标的规则网络中,我们称之为张量。
- 表示法:我们使用粗体的大写字母表示。比如 A \bold{A} A。张量 A \bold{A} A中的坐标 ( i , j , k ) (i,j,k) (i,j,k)的元素记作 A i , j , k A_{i,j,k} Ai,j,k。
- 转置(transcope):
- 定义:是以从左上角到右下角的对角线为轴的矩阵镜像。这条对角线称为主对角线(main diagonal)。转置是矩阵的重要操作之一。
- 表示法: A ⊤ \boldsymbol{A}^\top A⊤表示 A \boldsymbol{A} A的转置。定义如下: ( A ⊤ ) i , j = A j , i (\boldsymbol{A}^\top)_{i,j} = \boldsymbol{A}_{j,i} (A⊤)i,j=Aj,i
- 向量的转置:
- 定义:向量可以看做是只有一列的矩阵,它的转置可以看作是只有一行的矩阵。
- 表示法:有时,我们将向量表示成行矩阵的转置,写在行中,然后使用转置将其变为标准的列向量。比如 x = [ x 1 , x 2 , x 3 ] ⊤ x = \left[ x_1,x_2,x_3 \right]^\top x=[x1,x2,x3]⊤
- 标量的转置:
- 定义:标量可以看作是只有一个元素的矩阵。因此,标量的转置等于它本身, a = a ⊤ a = a^\top a=a⊤
- 矩阵相加:
- 定义:指两个形状一样的矩阵对应位置的元素相加。比如 C = A + B \boldsymbol{C} = \boldsymbol{A} + \boldsymbol{B} C=A+B,其中 C i , j = A i , j + B i , j \boldsymbol{C}_{i,j} = \boldsymbol{A}_{i,j} + \boldsymbol{B}_{i,j} Ci,j=Ai,j+Bi,j。
- 标量和矩阵相乘或相加:
- 定义:将标量与矩阵的每个元素相乘或相加。比如 D = a ⋅ B + c \boldsymbol{D} = a \cdot \boldsymbol{B} + c D=a⋅B+c,其中 D i , j = a ⋅ B i , j + c \boldsymbol{D}_{i,j} = a \cdot \boldsymbol{B}_{i,j} + c Di,j=a⋅Bi,j+c
- 广播(broadcast):
- 在深度学习中,我们也使用一些不那么常规的的符号。我们允许矩阵和向量相加,产生另一个矩阵: C = A + b \boldsymbol{C} = \boldsymbol{A} + b C=A+b,其中 C i , j = A i , j + b j \boldsymbol{C}_{i,j} = \boldsymbol{A}_{i,j} + b_j Ci,j=Ai,j+bj。换言之,向量 b \boldsymbol{b} b和矩阵 A A A的每一行相加。这个速记方法使我们无需在加法操作前定义复制向量 b \boldsymbol{b} b到矩阵的每一行。这种隐式地复制向量 b \boldsymbol{b} b到很多为止的方式,被称为广播(broadcasting)。
2. 矩阵和向量相乘
- 矩阵乘法是矩阵运算中最重要的操作之一。
- 定义:如果矩阵 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 m×p。
- 作用:矩阵乘积可以作用于两个或多个并在一起的矩阵。例如: C = A B C = AB C=AB。具体地,该乘法操作定义为: C i , j = ∑ k A i , k B k , j C_{i,j} = \sum\limits_{k} A_{i,k}B_{k,j} Ci,j=k∑Ai,kBk,j。注意:两个矩阵的标准乘积不是指两个矩阵中对应元素的乘积。
- 元素对应乘积(element-wise product)或Hadamard积(Hadamard product),表示为 A ⊙ B \boldsymbol{A} \odot \boldsymbol{B} A⊙B
- 矩阵乘法运算性质:
- 分配律: A ( B + C ) = A B + A C \boldsymbol{A(B + C) = AB + AC} A(B+C)=AB+AC
- 结合律: ( A B ) C = A ( B C ) \boldsymbol{(AB)C = A(BC)} (AB)C=A(BC)
- 两个相同维数的向量 x x x和 y y y的点积(dot product)可看作是矩阵乘积 x ⊤ y x^\top y x⊤y。我们可以把矩阵乘积 C = A B C = AB C=AB中计算 C i , j C_{i,j} Ci,j的步骤看作是 A A A的第 i i i行和 B B B的第 j j j列之间的点积。
- 矩阵乘积的转置: ( A B ) ⊤ = B ⊤ A ⊤ \boldsymbol{(AB)^\top=B^\top A^\top} (AB)⊤=B⊤A⊤
- 利用向量乘积是标量,标量转置是自身的事实,我们可以证明: x ⊤ y = ( x ⊤ y ) ⊤ = y ⊤ x x^\top y = (x^\top y)^\top = y^\top x x⊤y=(x⊤y)⊤=y⊤x
- 线性方程组:
- 定义:线性方程组是矩阵和向量的乘积。
- 表示法:
A x = b \boldsymbol{Ax = b} Ax=b,其中 A ∈ R m × n \boldsymbol{A} \in \mathbb{R}^{m \times n} A∈Rm×n是一个已知矩阵, b \boldsymbol{b} b是一个已知向量, x \boldsymbol{x} x是一个要求解的未知向量。向量 x \boldsymbol{x} x的每一个元素 x i x_i xi都是未知的。矩阵 A \boldsymbol{A} A的每一行和 b \boldsymbol{b} b中对应的元素构成一个约束。即可以把 A x = b \boldsymbol{Ax = b} Ax=b重写为:
{ A 1 , : x = b 1 A 2 , : x = b 2 ⋮ A m , : x = b m \begin{cases}\begin{array}{c}\boldsymbol{A}_{1,:}x = b_1\\ \boldsymbol{A}_{2,:}x = b_2\\ \vdots\\ \boldsymbol{A}_{m,:}x = b_m \end{array}\end{cases} ⎩ ⎨ ⎧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{cases}\begin{array}{c} \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\\ \vdots\\ \boldsymbol{A}_{m,1}x_1+\boldsymbol{A}_{m,2}x_2+\cdots \boldsymbol{A}_{m,n}x_n= b_m \end{array}\end{cases} ⎩ ⎨ ⎧A1,1x1+A1,2x2+⋯A1,nxn=b1A2,1x1+A2,2x2+⋯A2,nxn=b2⋮Am,1x1+Am,2x2+⋯Am,nxn=bm
重要: 矩阵向量乘积符号为上面的等式提供了紧凑的表示。
3. 单位矩阵和逆矩阵
- 线性代数提供了被称为矩阵逆(Matrix Inverse)的强大工具,是我们能够解析地求解具有多值矩阵,如 A \boldsymbol{A} A的方程组 A x = b \boldsymbol{Ax = b} Ax=b。
- 单位矩阵(identity matrix)
- 定义:任意向量和单位矩阵相乘,都不会改变。我们将保持 n n n维向量不变的单位矩阵记作 I n \boldsymbol{I}_n 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 x \in \mathbb{R}^n, \boldsymbol{I}_n \boldsymbol{x} = \boldsymbol{x} ∀x∈Rn,Inx=x
- 矩阵逆(matrix inverse)
- 定义:如果矩阵 A \boldsymbol{A} A的逆矩阵存在,那么我们可以将 A − 1 \boldsymbol{A}^{-1} A−1看作是 A \boldsymbol{A} A的逆矩阵。定义为: A − 1 A = I n \boldsymbol{A^{-1} A = I_n} A−1A=In
- 表示法:矩阵 A \boldsymbol{A} A的矩阵逆(matrix inverse)记作 A − 1 \boldsymbol{A}^{-1} A−1。
- 求解线性方程组
A
x
=
b
\boldsymbol{Ax = b}
Ax=b步骤:
- 由 A − 1 A = I n \boldsymbol{A^{-1} A = I_n} A−1A=In、 I n x = x \boldsymbol{I_n x = x} Inx=x,可以得出: A − 1 b = x \boldsymbol{A^{-1} b = x} A−1b=x
- 推导过程:
{ A x = b A − 1 A x = A − 1 b I n x = A − 1 b x = A − 1 b \begin{cases}\begin{array}{l} \boldsymbol{Ax = b}\\ \boldsymbol{A^{-1} Ax = A^{-1} b}\\ \boldsymbol{I_n x = A^{-1} b}\\ \boldsymbol{x = A^{-1} b}\\ \end{array}\end{cases} ⎩ ⎨ ⎧Ax=bA−1Ax=A−1bInx=A−1bx=A−1b
4. 线性相关和生成子空间
- 如果逆矩阵 A − 1 \boldsymbol{A}^{-1} A−1存在,那么 A x = b \boldsymbol{Ax = b} Ax=b肯定对于每一个向量 b \boldsymbol{b} b恰好存在一个解。但是,对于方程组而言,对于向量 b \boldsymbol{b} b的某些值,有可能不存在解,或者存在无限多个解。存在多于一个解但是少于无限多个解的情况是不可能发生的;因为如果 x \boldsymbol{x} x和 y \boldsymbol{y} y都是某方程组的解,则: z = α x + ( 1 − α ) y z = \alpha \boldsymbol{x} + (1-\alpha) \boldsymbol{y} z=αx+(1−α)y,(其中 α \alpha α取任意实数)也是该方程组的解。
- 为了分析方程有多个解,我们可以将 A \boldsymbol{A} A的列向量看作是从原点(origin)(即元素都是零的向量)出发的不同方向,确定有多少种方法可以到达向量 b \boldsymbol{b} b。在这个观点下,向量 x \boldsymbol{x} x中的每个元素表示我们应该沿着这些方向走多远,即 x i x_i xi表示我们需要沿着第 i i i个向量的方向走多远: A x = ∑ i x i A : , i \boldsymbol{Ax} = \sum\limits_i x_i \boldsymbol{A}_{:,i} Ax=i∑xiA:,i
- 线性组合(linear combination):
- 定义:
- 一般而言,这种操作被称为线性组合(linear combination)。形式上,一组向量的线性组合,是值每个向量乘以对应标量系数之后的和,即: ∑ i c i v ( i ) \sum\limits_i c_i \boldsymbol{v}^{(i)} i∑civ(i)
- 定义:
- 生成子空间(span):
- 定义:
- 一组向量的生成子空间(span)是原始向量线性组合后所能抵达的点的集合。
- 定义:
- 列空间(column space):
- 定义:
- 确定 A x = b \boldsymbol{Ax = b} Ax=b是否有解,相当于确定向量 b \boldsymbol{b} b是否存在 A \boldsymbol{A} A列向量的生成子空间。这个特殊的生成子空间被称为 A \boldsymbol{A} A的列空间(column space)或者 A \boldsymbol{A} A的值域(range)。
- 为了使方程
A
x
=
b
\boldsymbol{Ax = b}
Ax=b对于任意向量
b
∈
R
m
\boldsymbol{b} \in \mathbb{R}^m
b∈Rm都存在解,我们要求
A
\boldsymbol{A}
A的列空间构成整个
R
m
\mathbb{R}^m
Rm。
- 如果 R m \mathbb{R}^m Rm中的某个点不在 A \boldsymbol{A} A的列空间中,那么该点对应的 b \boldsymbol{b} b会使得该方程没有解。
- 矩阵 A \boldsymbol{A} A的列空间是整个 R m \mathbb{R}^m Rm的要求,意味着 A \boldsymbol{A} A至少有 m m m列,即 n ≥ m n \ge m n≥m。否则, A \boldsymbol{A} A列空间的维数会小于 m m m。
- 例如,假设 A \boldsymbol{A} A是一个 3 × 2 3 \times 2 3×2的矩阵。目标 b \boldsymbol{b} b是3维的,但是 x \boldsymbol{x} x只有2维。所以无论如何修改 x \boldsymbol{x} x的值,也只能描绘出 R 3 \mathbb{R}^3 R3空间中的二维平面。当且仅当向量 b \boldsymbol{b} b在该二维平面中时,该方程有解。
- 不等式
n
≥
m
n \ge m
n≥m仅是方程对每一点都有解的必要条件。这不是一个充分条件,因为有些列向量可能是冗余的。
- 假设有一个 R 2 × 2 \mathbb{R}^{2 \times 2} R2×2中的矩阵,它的两个列向量是相同的。那么它的列空间和它的一个列向量作为矩阵的列空间是一样的。换言之,虽然该矩阵有2列,但是它的列空间仍然只是一条线,不能涵盖整个 R 2 \mathbb{R}^2 R2空间。
- 定义:
- 线性相关(linear dependence):
- 正式地说,这种冗余被称为线性相关(linear dependence)。
线性无关(linear independence): - 如果一组向量中的任意一个向量都不能表示成其他向量的线性组合,那么这组向量被称为线性无关(linear independence)。
- 正式地说,这种冗余被称为线性相关(linear dependence)。
- 如果某个向量是一组向量中某些向量的线性组合,那么我们将这个向量加入到这组向量后不会增加这组向量的生成子空间。这意味着,如果一个矩阵的列空间涵盖整个 R m \mathbb{R}^m Rm,那么该矩阵必须包含至少一组 m m m个线性无关的向量。这是式 A x = b \boldsymbol{Ax = b} Ax=b对于每一个向量 b \boldsymbol{b} b的取值都有解的充分必要条件。
- 值得注意的是,这个条件是说该向量集恰好有 m m m个线性无关的列向量,而不是至少 m m m个。不存在一个 m m m维向量的集合具有多于 m m m个彼此线性不相关的列向量,但是一个有多于 m m m个列向量的矩阵却有可能拥有不止一个大小为 m m m的线性无关向量集。
- 要想使矩阵可逆,我们还需要保证式 A x = b \boldsymbol{Ax = b} Ax=b对于每一个 b \boldsymbol{b} b值至多有一个解。为此,我们需要确保该矩阵至多有 m m m个列向量。否则,该方程会有不止一个解。
- 综上所述,这意味着该矩阵必须是有一个方阵(square matrix),即 m = n m = n m=n,并且所有列向量都是线性无关的。一个列向量线性相关的方阵被称作奇异矩阵(singular matrix)。
- 如果矩阵 A \boldsymbol{A} A不是一个方阵或者是一个奇异的方阵,该方程仍然可能有解。但是我们不能使用矩阵逆去求解。
- 目前为止,我们已经讨论了逆矩阵左乘: A − 1 A = I n \boldsymbol{A^{-1} A = I_n} A−1A=In。也可以定义逆矩阵右乘: A A − 1 = I \boldsymbol{A}\boldsymbol{A}^{-1} = \boldsymbol{I} AA−1=I。对于方阵而言,它的左逆和右逆是相等的。
5. 范数
- 范数(norm):在机器学习领域,我们经常使用范数来衡量向量的大小。
- 定义:
范数是一个函数,它衡量向量的大小。形式上, L p 范数定义 L^p范数定义 Lp范数定义如下: ∥ x ∥ p = ( ∑ i ∣ x i ∣ p ) 1 p \Vert \boldsymbol{x} \Vert_p = \left(\sum\limits_i |x_i|^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。
范数(包括 L p L^p Lp范数)是将向量映射到非负值的函数。直观上来说,向量 x \boldsymbol{x} x的范数是衡量从原点到点 x x x的距离。 - 更严格说,范数是满足下列性质的任意函数:
- f ( x ) = 0 → x = 0 f(\boldsymbol{x})=0 \to \boldsymbol{x} = 0 f(x)=0→x=0
- f ( x + y ) ≤ f ( x ) + f ( y ) f(\boldsymbol{x} + \boldsymbol{y}) \le f(\boldsymbol{x}) + f(\boldsymbol{y}) f(x+y)≤f(x)+f(y) (三角不等式(triangle inequality))
- ∀ α ∈ R , f ( α x ) = ∣ α ∣ f ( x ) \forall \alpha \in \mathbb{R}, f(\alpha \boldsymbol{x}) = |\alpha|f(\boldsymbol{x}) ∀α∈R,f(αx)=∣α∣f(x)
-
L
2
L^2
L2范数:
- L 2 L^2 L2范数:当 p = 2 p=2 p=2时, L 2 L^2 L2被称为欧几里得范数(Euclidean norm)。它表示从原点出发到向量 x \boldsymbol{x} x确定的点的欧几里得距离。( L 2 L^2 L2范数)十分频繁地出现在机器学习中 ,经常简化表示为 ∥ x ∥ \Vert \boldsymbol{x} \Vert ∥x∥,省略了下标2。
- 平方 L 2 L^2 L2范数:(平方 L 2 L^2 L2范数)也经常用来衡量向量的大小,可以简单地通过点击 x T x \boldsymbol{x}^T\boldsymbol{x} xTx计算。
- 两者区别:
- 平方 L 2 L^2 L2范数在数学和计算上都比 L 2 L^2 L2范数本身更方便。
- 平方 L 2 L^2 L2范数对 x \boldsymbol{x} x中每个元素的导数只取决于对应的元素,而 L 2 L^2 L2范数对 x \boldsymbol{x} x中每个元素的导数取决于整个向量(即向量中所有元素)。
- 在很多情况下,平方 L 2 L^2 L2范数也可能不受欢迎,因为它在原点附近增长得十分缓慢。
- 在某些机器学习应用中,区分元素值恰好是零还是非零小值是很重要的。在这些情况下,我们更倾向于使用在各个位置斜率相同,同时保持简单的数学形式的函数: L 1 L^1 L1范数。
-
L
1
L^1
L1范数:
- L 1 L^1 L1范数定义可以简化为: ∥ x ∥ 1 = ∑ i ∣ x i ∣ \Vert \boldsymbol{x} \Vert_1 = \sum\limits_i |x_i| ∥x∥1=i∑∣xi∣。
- 通常我们会使用 L 1 L^1 L1范数,来解决机器学习中零和非零元素之间的差异非常重要问题。每当 x \boldsymbol{x} x中某个元素从0增加 ϵ \epsilon ϵ,对应的 L 1 L^1 L1范数也会增加 ϵ \epsilon ϵ。
-
L
0
L^0
L0范数:
- 有时候我们会统计向量中非零元素的个数来衡量向量的大小。有些作者将这种函数称为“ L 0 L^0 L0范数”,但是这个术语在数学意义上是不对的。
- 向量的非零元素的数目不是范数,因为对标量放缩 α \alpha α倍不会改变该向量非零的数目。因此, L 1 L^1 L1经常作为表示非零元素数目的替代函数。
-
L
∞
L^{\infty}
L∞范数:
- 经常在机器学习中出现的 L ∞ L^{\infty} L∞范数,也被称为 m a x 范数 \bold{max}范数 max范数(max norm)。它表示向量中具有最大幅度的元素的绝对值: ∥ x ∥ ∞ = max i ∣ x i ∣ \Vert \boldsymbol{x} \Vert_{\infty} = \max\limits_i |x_i| ∥x∥∞=imax∣xi∣。
- Frobenius范数:
- 弗罗贝尼乌斯范数,简称F-范数,是一种矩阵范数。它表示矩阵中所有元素平方和的开方: ∥ A ∥ F = ∑ i , j A i j 2 \Vert \boldsymbol{A} \Vert_F = \sqrt{\sum\limits_{i,j} A_{ij}^2} ∥A∥F=i,j∑Aij2。
- 在深度学习中,我们经常使用F-范数来衡量矩阵的大小。类似于向量的 L 2 L^2 L2范数。
- 两个向量的点积(dot product)可以用范数来表示。
- 具体地, x T y = ∥ x ∥ 2 ∥ y ∥ 2 cos θ \boldsymbol{x}^T\boldsymbol{y}=\Vert \boldsymbol{x} \Vert_2 \Vert \boldsymbol{y} \Vert_2 \cos\theta xTy=∥x∥2∥y∥2cosθ
- 其中, θ \theta θ是向量 x \boldsymbol{x} x和 y \boldsymbol{y} y之间的夹角。
6. 特殊类型的矩阵和向量
- 有些特殊类型的矩阵和向量在机器学习中是特别有用的。
- 对角矩阵(diagonal matrix):
- 只在主对角线上含有非零元素,其他位置都是零。
- 矩阵 D \boldsymbol{D} D是对角矩阵,当且仅当对于所有的 i ≠ j , D i , j = 0 i \neq j, \boldsymbol{D}_{i,j} = 0 i=j,Di,j=0。
- 对角方阵的乘法计算很高效。
- 单位矩阵
I
n
\boldsymbol{I}_n
In是对角元素都是为1的对角矩阵。
- 我们用 diag ( v ) \text{diag}(\boldsymbol{v}) diag(v)表示一个对角元素由向量 v \boldsymbol{v} v中元素给定的对角方阵。
- 计算乘法 diag ( v ) x \text{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 \text{diag}(\boldsymbol{v})\boldsymbol{x} = \boldsymbol{v}\odot\boldsymbol{x} diag(v)x=v⊙x。
- 对角矩阵的逆矩阵计算也很高效。
- 对角矩阵的逆矩阵存在,当且仅当对角元素都是非零值,在这情况下,对角矩阵的逆矩阵是 D − 1 = diag ( v ) − 1 = diag ( [ 1 v 1 , … , 1 v n ] ) ⊤ \boldsymbol{D}^{-1} = \text{diag}(\boldsymbol{v})^{-1} = \text{diag}([\frac{1}{v_1},\dots,\frac{1}{v_n}])^\top D−1=diag(v)−1=diag([v11,…,vn1])⊤。
- 在很多情况下,我们可以根据任意矩阵导出一些通用的机器学习算法。
- 但通过将一些矩阵限制为对角矩阵,我们可以得到计算代价较低的(并且描述语言较少的)算法。
-
⋆
⋆
\bold{\star\star}
⋆⋆不是所有的对角矩阵都是方阵。长方形的矩阵也可能是对角矩阵。长方形对角矩阵没有逆矩阵。但仍然可以很快地计算它们的乘法。
- 对于一个长方形对角矩阵
D
\boldsymbol{D}
D而言,乘法
D
x
\boldsymbol{Dx}
Dx会涉及到
x
\boldsymbol{x}
x中每个元素的放缩。
- 如果 D \boldsymbol{D} D是瘦长型矩阵,那么放缩后末尾添加一些零。
- 如果 D \boldsymbol{D} D是胖宽型矩阵,那么放缩后去掉最后一些元素。
- 对于一个长方形对角矩阵
D
\boldsymbol{D}
D而言,乘法
D
x
\boldsymbol{Dx}
Dx会涉及到
x
\boldsymbol{x}
x中每个元素的放缩。
- 对称(symmetric)矩阵是转置和自己相等的矩阵:
A
=
A
⊤
\boldsymbol{A} = \boldsymbol{A}^\top
A=A⊤。
- 当某些依赖参数顺序的双参数函数生成元素时,对称矩阵是很有用的。例如,如果 A \boldsymbol{A} A是一个表示距离的矩阵, A i , j \boldsymbol{A}_{i,j} Ai,j表示点 i i i到点 j j j的距离,那么 A i , j = A j , i \boldsymbol{A}_{i,j} = \boldsymbol{A}_{j,i} Ai,j=Aj,i,因为距离函数是对称的。
- 单位向量(unit vector)是具有单位范数(unit norm)即长度为1的向量: ∥ x ∥ 2 = 1 \Vert \boldsymbol{x} \Vert_2 = 1 ∥x∥2=1。
- 正交(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,那么我们称他们是标准正交(orthonormal)。
- 正交矩阵(orthogonal matrix):
- 是指行向量是标准正交的,列向量是标准正交的方阵: Q ⊤ Q = I \boldsymbol{Q}^\top \boldsymbol{Q} = \boldsymbol{I} Q⊤Q=I。这意味着 Q − 1 = Q ⊤ \boldsymbol{Q}^{-1} = \boldsymbol{Q}^\top Q−1=Q⊤
- 用于求逆矩阵的计算代价小。
7. 特征分解
- 许多数学对象可以通过将它们分解成多个组成部分,或者找到它们的一些属性而更好理解,这些属性是通用的,而不是由我们选择表示它们的方式引起的。
- 特征分解(eigendecomposition)是使用最广的是矩阵分解的之一,即我们将矩阵分解成一组特征向量和特征值。
- 方阵
A
\boldsymbol{A}
A的特征向量(eigenvector)是指与
A
\boldsymbol{A}
A相乘后相当于对该向量进行放缩的非零向量
v
\boldsymbol{v}
v:
A
v
=
λ
v
\boldsymbol{Av} = \lambda\boldsymbol{v}
Av=λv。
- 标量 λ \lambda λ被称为这个特征向量对应的特征值(eigenvalue)。
- 类似地,我们也可以定义左奇异向量(left singular vector): v ⊤ A = λ v ⊤ \boldsymbol{v}^\top \boldsymbol{A} = \lambda \boldsymbol{v}^\top v⊤A=λv⊤
- 但通常我们更关注右奇异向量(right singular vector)。
- 如果 v \boldsymbol{v} v是 A \boldsymbol{A} A的特征向量,那么任何放缩后的向量 s v ( s ∈ R , s ≠ 0 ) s\boldsymbol{v}(s \in \mathbb{R}, s \neq 0) sv(s∈R,s=0)也是 A \boldsymbol{A} A的特征向量。此外, s v s\boldsymbol{v} sv和 v \boldsymbol{v} v有相同的特征值。基于这个原因,通常我们只考虑单位特征向量。
- 矩阵
A
\boldsymbol{A}
A的特征分解:
- 假设
A
\boldsymbol{A}
A有
n
n
n个线性无关的特征向量
{
v
1
,
…
,
v
n
}
\{\boldsymbol{v}_1,\ldots,\boldsymbol{v}_n\}
{v1,…,vn},对应的特征值
{
λ
1
,
⋯
,
λ
n
}
\{\lambda_1, \cdots ,\lambda_n\}
{λ1,⋯,λn}。我们将特征向量连接一个矩阵,使得每一列是一个特征向量:
V
=
[
v
1
⋯
v
n
]
\boldsymbol{V} = [\boldsymbol{v}_1 \cdots \boldsymbol{v}_n]
V=[v1⋯vn]。
类似地,我们也可以将特征值连接成一个向量: λ = [ λ 1 ⋯ λ n ] ⊤ \boldsymbol{\lambda} = [\lambda_1 \cdots \lambda_n]^\top λ=[λ1⋯λn]⊤。
因此, A \boldsymbol{A} A的特征分解(eigendecomposition)可以记作: A = V diag ( λ ) V − 1 \boldsymbol{A} = \boldsymbol{V} \text{diag}(\boldsymbol{\lambda}) \boldsymbol{V}^{-1} A=Vdiag(λ)V−1。 - 我们已经看到了构建剧透特定特征值和特征向量的矩阵,能够使我们在目标方向上延伸空间。然而,我们也常常希望将矩阵分解(decompose)成特征值和特征向量。
- 不是每一个矩阵都可以分解成特征值和特征向量。在某些情况下,特征分解会涉及到复数,而非实数。
- 每个实对称矩阵都可以分解成实特征值和实特征向量:
A
=
Q
Λ
Q
⊤
\boldsymbol{A} = \boldsymbol{Q}\boldsymbol{\Lambda}\boldsymbol{Q}^\top
A=QΛQ⊤。
- 其中, Q \boldsymbol{Q} Q是 A \boldsymbol{A} A的特征向量组成的正交矩阵, Λ \boldsymbol{\Lambda} Λ是对角矩阵。
- 特征值 Λ i , i \Lambda_{i,i} Λi,i对应的特征向量是矩阵 Q \boldsymbol{Q} Q的第 i i i列,记作 Q : , i \boldsymbol{Q}_{:,i} Q:,i。因为 Q \boldsymbol{Q} Q是正交矩阵,我们可以将 A \boldsymbol{A} A看作是沿方向 v i \boldsymbol{v}_i vi延展 λ i \lambda_i λi倍的空间。
- 虽然任意一个实对称矩阵 A \boldsymbol{A} A都有特征分解,但是特征分解可能并不唯一。
- 如果两个或多个特征向量拥有相同的特征值,那么这组特征向量生成子空间中,任意一组正交向量都是该特征值对特征向量。因此,我们可以使用任意一组正交向量作为 Q \boldsymbol{Q} Q的特征向量。按照惯例,我们通常按降序排列 Λ \Lambda Λ的条目。在该约定下,特征分解唯一当且仅当所有的特征值都是唯一的。
- 矩阵的特征分解给出了很多有关于矩阵的有用信息。
- 矩阵是奇异的当且仅当含有零特征值。
- 实对称矩阵的特征分解也可以用于优化二次方程 f ( x ) = x ⊤ A x f(\boldsymbol{x}) = \boldsymbol{x}^\top \boldsymbol{Ax} f(x)=x⊤Ax,其中限制 ∥ x ∥ 2 = 1 \Vert \boldsymbol{x} \Vert_2 = 1 ∥x∥2=1。
- 当 x \boldsymbol{x} x等于 A \boldsymbol{A} A的某个特征向量时, f f f将返回对应的特征值。在限制条件下,函数 f f f的最大值是最大特征值,最小值是最小特征值。
- 假设
A
\boldsymbol{A}
A有
n
n
n个线性无关的特征向量
{
v
1
,
…
,
v
n
}
\{\boldsymbol{v}_1,\ldots,\boldsymbol{v}_n\}
{v1,…,vn},对应的特征值
{
λ
1
,
⋯
,
λ
n
}
\{\lambda_1, \cdots ,\lambda_n\}
{λ1,⋯,λn}。我们将特征向量连接一个矩阵,使得每一列是一个特征向量:
V
=
[
v
1
⋯
v
n
]
\boldsymbol{V} = [\boldsymbol{v}_1 \cdots \boldsymbol{v}_n]
V=[v1⋯vn]。
- 正定/半正定/负定/半负定:
- 所有特征值都是正数的矩阵被称为正定(positive definite)
- 所有特征值都是非负数的矩阵被称为半正定(positive semidefinite)
- 所有特征值都是负数的矩阵被称为负定(negative definite)
- 所有特征值都是非正数的矩阵被称为半负定(negative semidefinite)
- 半正定矩阵保证: ∀ x , x ⊤ A x ≥ 0 \forall \boldsymbol{x}, \boldsymbol{x}^\top \boldsymbol{Ax} \ge 0 ∀x,x⊤Ax≥0
- 正定矩阵保证: x ⊤ A x = 0 ⟹ x = 0 \boldsymbol{x}^\top \boldsymbol{Ax} = 0 \Longrightarrow \boldsymbol{x} = 0 x⊤Ax=0⟹x=0
8. 奇异值分解(SVD)
- 分解矩阵的另一种分解方法:奇异值分解(singular value decomposition,SVD)。将矩阵分解为奇异向量(singular vector)和奇异值(singular value)。
- 通过奇异值分解,我们得到一些类似特征分解的信息。
- 每个实数矩阵都有一个奇异值分解,但不一定都有特征分解。例如,非方阵的矩阵没有特征分解,这时只能使用奇异值分解。
- 分解:
- 将矩阵 A \boldsymbol{A} A分解成三个矩阵的乘积: A = U Σ V ⊤ \boldsymbol{A} = \boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{V}^\top A=UΣV⊤。
- 假设 A \boldsymbol{A} A是 m × n m \times n m×n的矩阵,那么 U \boldsymbol{U} U是一个 m × m m \times m m×m的矩阵, Σ \boldsymbol{\Sigma} Σ是一个 m × n m \times n m×n的矩阵, V \boldsymbol{V} V是一个 n × n n \times n n×n的矩阵。
- 这些矩阵每一个都拥有特殊的结构。矩阵 U \boldsymbol{U} U和 V \boldsymbol{V} V是正交矩阵,而 Σ \boldsymbol{\Sigma} Σ是一个对角矩阵。注意,矩阵 Σ \boldsymbol{\Sigma} Σ不一定是方阵。
- 对角矩阵 Σ \boldsymbol{\Sigma} Σ对角线上的元素被称为矩阵 A \boldsymbol{A} A的奇异值。
- 矩阵 U \boldsymbol{U} U的列向量被称为左奇异向量(left singular vector)
- 矩阵 V \boldsymbol{V} V的列向量被称为右奇异向量(right singular vector)
- 事实上,我们可以用与
A
\boldsymbol{A}
A相关的特征分解
A
\boldsymbol{A}
A的奇异值分解。
- A \boldsymbol{A} A的左奇异向量(left singular vector)是 A A ⊤ \boldsymbol{AA^\top} AA⊤的特征向量。
- A \boldsymbol{A} A的右奇异向量(right singular vector)是 A ⊤ A \boldsymbol{A^\top A} A⊤A的特征向量。
- A \boldsymbol{A} A的非零奇异值是 A ⊤ A \boldsymbol{A^\top A} A⊤A特征值的平方根,同时也是 A A ⊤ \boldsymbol{AA^\top} AA⊤特征值的平方根。
- SVD最有用的一个性质可能是拓展矩阵求逆到非方阵上。
9. Moore-Penrose伪逆(穆尔-彭罗斯)
- 对于非方阵而言,其逆矩阵没有定义。假设在下面的问题,我们希望通过矩阵
A
\boldsymbol{A}
A的左逆
B
\boldsymbol{B}
B来求解线性方程,
A
x
=
y
\boldsymbol{A}\boldsymbol{x} = \boldsymbol{y}
Ax=y。
- 等式两边左乘左逆 B \boldsymbol{B} B后,得到 B A x = B y , x = B y \boldsymbol{B}\boldsymbol{A}\boldsymbol{x} = \boldsymbol{B}\boldsymbol{y},\boldsymbol{x} = \boldsymbol{B} \boldsymbol{y} BAx=By,x=By。
- 是否存在一个唯一的映射,将 A \boldsymbol{A} A映射到 B \boldsymbol{B} B,取决于问题的形式。
- 如果矩阵 A \boldsymbol{A} A的行数大于列数,那么上述方程可能没有解。
- 如果矩阵 A \boldsymbol{A} A的行数小于列数,那么上述矩阵可能有多个解。
- 矩阵
A
\boldsymbol{A}
A的伪逆定义为:
A
+
=
lim
a
→
0
(
A
⊤
A
+
α
I
)
−
1
A
⊤
\boldsymbol{A}^{+} = \lim\limits_{a \to 0}(\boldsymbol{A}^\top \boldsymbol{A} + \alpha \boldsymbol{I})^{-1} \boldsymbol{A}^\top
A+=a→0lim(A⊤A+αI)−1A⊤。
- 计算伪逆的实际算法是使用公式: A + = V Σ + U ⊤ \boldsymbol{A}^{+} = \boldsymbol{V}\boldsymbol{\Sigma}^{+} \boldsymbol{U}^\top A+=VΣ+U⊤。
- 其中,矩阵 U \boldsymbol{U} U, Σ \boldsymbol{\Sigma} Σ和 V \boldsymbol{V} V是矩阵 A \boldsymbol{A} A奇异值分解后得到的矩阵。
- 对角矩阵 Σ \boldsymbol{\Sigma} Σ的伪逆 Σ + \boldsymbol{\Sigma}^+ Σ+是其非零元素取倒数之后再转置得到的。
- 当矩阵 A \boldsymbol{A} A的列数多于行数时,使用伪逆求解线性方程是众多可能解法中的一种。具体地, x = A + y \boldsymbol{x = A^+ y} x=A+y是方程所有可行解中欧几里得范数 ∥ x ∥ 2 \Vert x \Vert_2 ∥x∥2最小的一个。
- 当矩阵 A \boldsymbol{A} A的行数多于列数时,可能没有解。在这种情况下,通过伪逆得到的 x \boldsymbol{x} x是使得 A x \boldsymbol{Ax} Ax和 y \boldsymbol{y} y的欧几里得距离 ∥ A x − y ∥ 2 \Vert \boldsymbol{Ax - y} \Vert_2 ∥Ax−y∥2最小的解。
10. 迹运算
- 迹运算返回的是矩阵对角元素的和: tr ( A ) = ∑ i = 1 n A i i \text{tr}(\boldsymbol{A}) = \sum\limits_{i=1}^n A_{ii} tr(A)=i=1∑nAii。
- 迹运算提供了另一种描述矩阵Frobenius范数的方式: ∥ A ∥ F = Tr ( A A ⊤ ) \Vert \boldsymbol{A} \Vert_F = \sqrt{\text{Tr}(\boldsymbol{A} \boldsymbol{A}^\top)} ∥A∥F=Tr(AA⊤)。
- 迹运算在转置运算下是不变的: Tr ( A ⊤ ) = Tr ( A ) \text{Tr}(\boldsymbol{A}^\top) = \text{Tr}(\boldsymbol{A}) Tr(A⊤)=Tr(A)。
- 多个矩阵乘积的迹运算: Tr ( A B C ) = Tr ( C A B ) = Tr ( B C A ) \text{Tr}(\boldsymbol{ABC}) = \text{Tr}(\boldsymbol{CAB}) = \text{Tr}(\boldsymbol{BCA}) Tr(ABC)=Tr(CAB)=Tr(BCA)。
- 标量的迹运算: a = Tr ( a ) a = \text{Tr}(a) a=Tr(a)。标量在迹运算后仍然是它自己。
11. 行列式
- 行列式,记作 det ( A ) \text{det}(\boldsymbol{A}) det(A),是一个将方阵 A \boldsymbol{A} A映射到实数的函数。行列式等于矩阵特征值的乘积。行列式的绝对值可以用来衡量矩阵相乘后空间扩大或者缩小了多少。