深度学习-必备的数学知识-线性代数
序言
为方便大家阅读,这里推出一个线性代数的合集。这与之前的内容是一致的。
我们在深度学习-简介和 深度学习-历史背景中已经初步了解的深度学习。在我们开始学习深度学习前还需要做些准备工作。就是学习应用数学和机器学习基础。 想要理解深度学习这些是必不可少的。
我将在这篇文章中为大家介绍一部分与深度学习有关的线性代数。
线性代数
我们先来了解线性代数中几个重要概念:标量、向量、矩阵、张量
重要概念
- 标量(scalar):标量是一个数。例如:1、2、3。我们使用斜体的小写变量名称表示标量,如 a a a。在定义标量的时候会注明标量属于哪种类型的数。如:在定义实数标量的时候,可能会说$ a \in R 表示直线的长度$
- 向量(vector):向量是一列数。我们使用粗体的小写变量名称表示向量,如:
x
\mathbf{x}
x.如果向量中有n个元素(数),且每个元素都属于R,我们则称
x
∈
R
n
\mathbf{x} \in R^n
x∈Rn.向量中的数是有序排列的,可以通过索引(次序的位置)获取向量中元素。对于元素我们使用带脚标的斜体表示。如向量中的第一个元素
x
1
x_1
x1,第二个元素
x
2
x_2
x2,第n个元素
x
n
x_n
xn。
我们可以将元素的索引作为一个集合,然后将集合写在脚标处表示向量中所有索引位于集合内的元素。例如:存在向量 x ∈ R 5 \mathbf{x} \in R^5 x∈R5,我们想要索引 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3。可以定义集合 S = 1 , 2 , 3 S={1,2,3} S=1,2,3。然后写作 x S \mathbf{x}_{S} xS。可以使用-符合表示集合的补集中的索引,如 x − S \mathbf{x}_{-S} x−S表示的是向量 x \mathbf{x} x中除 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3以外的所有元素构成的向量。
如果我们需要明确表示向量中的元素时,则将元素排列成方括号包围的纵列:
x = [ x 1 x 2 ⋮ x n ] \mathbf{x} = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix} x= x1x2⋮xn - 矩阵(matrix):矩阵是二维数组,大家可以将矩阵看成由n个列向量(或者说是一维数组)横向排列构成的。每个列向量都是矩阵的一列。我们使用粗体的大写变量名称表示矩阵。对于具有m行n列,且每个元素都属于R的矩阵,我们写作
A
∈
R
m
,
n
\mathbf{A} \in R^{m,n}
A∈Rm,n。如矩阵
A
\mathbf{A}
A。同样的我们也可以索引矩阵的元素。对于矩阵
A
\mathbf{A}
A的第i行,第j列的元素,我们表示为
A
i
,
j
A_{i,j}
Ai,j。我们可以使用:符号表示水平坐标或垂直坐标,以表示一行元素或一列元素,如
A
i
,
:
A_{i,:}
Ai,:表示第i行的所有元素,
A
:
,
j
A_{:,j}
A:,j表示第j列的所有元素。如果我们需要明确表示矩阵的元素时,我们将它们写作使用方括号包裹起来的数组中
[ A 1 , 1 A 1 , 2 A 2 , 1 A 2 , 1 ] \begin{bmatrix} A_{1,1} & A_{1,2} \\ A_{2,1} & A_{2,1} \\ \end{bmatrix} [A1,1A2,1A1,2A2,1] - 张量(tensor):一个数组的元素分布在若干维坐标的规则网格中,称之为张量。张量是标量、向量和矩阵概念的扩展。它是可以存放多维数据的数学对象。
0阶张量:标量
1阶张量:向量,也就是一维数组
2阶张量:矩阵,也就是二维数组
n阶张量:n维数组
我们使用 A \mathbf{A} A表示标量,标量 A \mathbf{A} A中坐标维(i,j,k)的元素记作 A i , j , k A_{i,j,k} Ai,j,k。
了解这四个重要概念,我们在来学习可以对它们进行的操作
操作
转置(transpose)是矩阵的操作之一,矩阵的转置是以主对角线为轴翻转的镜像。主对角线指的是从左上上角导右下角的对角线。矩阵的转置会将行变为,列变为行。m行n列的矩阵
A
∈
R
m
,
n
\mathbf{A} \in R^{m,n}
A∈Rm,n的转置记作
A
T
∈
R
n
,
m
\mathbf{A}^T \in R^{n,m}
AT∈Rn,m。 转置的定义如下:
(
A
T
)
i
,
j
=
A
j
,
i
(\mathbf{A}^T)_{i,j}=\mathbf{A}_{j,i}
(AT)i,j=Aj,i
向量可以看作只有一列的矩阵,所以向量的转置可以看作只有一行的矩阵。我们也可以将一行矩阵转置为列向量 即
[
x
1
,
x
2
,
x
3
]
T
=
x
[x_1,x_2,x_3]^T=x
[x1,x2,x3]T=x。
标量的转置等于它自身。 即
a
T
=
a
a^T=a
aT=a。
我们可以将行数和列数分别相同的两个矩阵进行相加,得到一个新矩阵。新矩阵的元素是两个矩阵对应位置元素相加得到的。形式化地说:如果有两个矩阵
A
∈
R
m
,
n
\mathbf{A} \in R^{m,n}
A∈Rm,n 和 矩阵
B
∈
R
m
,
n
\mathbf{B} \in R^{m,n}
B∈Rm,n,我们可以定义一个新矩阵
C
=
A
+
B
\mathbf{C}=\mathbf{A}+\mathbf{B}
C=A+B,其中每个元素
C
i
,
j
=
A
i
,
j
+
B
i
,
j
C_{i,j}=A_{i,j}+B_{i,j}
Ci,j=Ai,j+Bi,j。
标量与矩阵相乘或相加,就是将标量和矩阵的每个元素相乘或相加。形式化得说,如果有两个个标量
a
a
a和
b
b
b和矩阵
A
∈
R
m
,
n
\mathbf{A} \in R^{m,n}
A∈Rm,n,我们可以定义一个新的矩阵
B
=
a
⋅
A
+
b
\mathbf{B}=a\cdot\mathbf{A}+b
B=a⋅A+b,其中每个元素
B
i
,
j
=
a
⋅
A
i
,
j
+
b
B_{i,j}=a \cdot A_{i,j} + b
Bi,j=a⋅Ai,j+b.
在深度学习中允许向量和矩阵相加,这种操作称为广播(broadcasting)。这种运算中,向量被复制到矩阵的每一个或每一列,然后进行元素级加法运算。
如果我们有一个m行n列的矩阵A和一个长度为n的向量b,我们可以将b添加到A的每一行,得到一个新的矩阵C。形式化地说,我们有
C
=
A
+
b
\mathbf{C}=\mathbf{A}+\mathbf{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。
矩阵乘积
两个矩阵的矩阵乘积(matrix product)是第三个矩阵。写作
C
=
A
B
\mathbf{C}=\mathbf{A}\mathbf{B}
C=AB
为使矩阵乘积具有良定义,矩阵
A
\mathbf{A}
A的列数与矩阵
B
\mathbf{B}
B的行数必须相同。即
A
∈
R
m
×
n
\mathbf{A} \in R^{m\times n}
A∈Rm×n,
B
∈
R
n
×
p
\mathbf{B} \in R^{n\times p}
B∈Rn×p。那么矩阵
C
C
C的行数为m,列数为p,即
C
∈
R
m
×
p
C \in R^{m \times p}
C∈Rm×p。
具体的,乘法操作定义为
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
两个矩阵标准乘积不是将对应元素的乘积,对应元素的乘积称之为元素对应乘积(element-wise product) 或 Hadamard乘积(Hadamard product),记作
A
⊙
B
\mathbf{A} \odot \mathbf{B}
A⊙B。
两个相同维度的向量的点积(dot product,又称标量积和内积)是指两个向量对应元素的乘积的和。形式化的说,若
x
∈
R
m
\mathbf{x} \in R^m
x∈Rm,
y
∈
R
m
\mathbf{y} \in R^m
y∈Rm,则它们的点积定义为
x
⋅
y
=
∑
i
m
x
i
y
i
\mathbf{x} \cdot \mathbf{y}=\sum_{i}^{m}x_iy_i
x⋅y=i∑mxiyi
需要注意的是两个向量的点积是标量。
因为我们可以将向量看作一列的矩阵,所以我们可以将
x
⋅
y
\mathbf{x} \cdot \mathbf{y}
x⋅y看作矩阵乘积
x
T
y
\mathbf{x}^T\mathbf{y}
xTy。我们可以将
C
=
A
B
\mathbf{C}=\mathbf{A}\mathbf{B}
C=AB中计算
C
i
,
j
C_{i,j}
Ci,j的过程看作是在计算
A
\mathbf{A}
A的第i行和
B
\mathbf{B}
B的第j列之间的点积。
矩阵乘积具有很多的性质,比如:
矩阵乘积服从分配律:
A
(
B
+
C
)
=
A
B
+
A
C
\ \mathbf{A}(\mathbf{B}+\mathbf{C})=\mathbf{A}\mathbf{B}+\mathbf{A}\mathbf{C}
A(B+C)=AB+AC
矩阵乘积服从结合律:
A
(
B
C
)
=
B
(
A
C
)
\mathbf{A}(\mathbf{B}\mathbf{C})=\mathbf{B}(\mathbf{A}\mathbf{C})
A(BC)=B(AC)
但是矩阵乘积并不总是满足交换律:
A
B
≠
B
A
\mathbf{A}\mathbf{B} \neq \mathbf{B}\mathbf{A}
AB=BA
这很好理解,因为矩阵乘积涉及到了行和列的点积。当计算两个矩阵的乘积时,我们是将第一个矩阵的行和第二个矩阵的列进行点积,如果交换两个矩阵的顺序,那么就是将第二个矩阵的行和第一个矩阵的列进行点积,这可能会得到完全不同的结果。
此外还有一个重要的原因是:转换两个矩阵的顺序后,这两个矩阵的乘积可能没有定义。例如:我们有一个
m
×
n
m \times n
m×n的矩阵
A
\mathbf{A}
A和
n
×
p
n \times p
n×p的矩阵
B
\mathbf{B}
B,其中
p
≠
m
\mathbf{p \neq m}
p=m。对于
A
B
\mathbf{A}\mathbf{B}
AB,因为矩阵
A
\mathbf{A}
A的列数和矩阵
B
\mathbf{B}
B行数相同,所以有定义。但
B
A
\mathbf{B}\mathbf{A}
BA是没有定义的,因为矩阵
B
\mathbf{B}
B的列数和矩阵
A
\mathbf{A}
A行数不相同。
对于矩阵的转置我们有:
(
A
B
)
T
=
B
T
A
T
(\mathbf{A}\mathbf{B})^T=\mathbf{B}^T\mathbf{A}^T
(AB)T=BTAT
两个向量的点积满足交换律:
x
T
y
=
y
T
x
\mathbf{x}^T\mathbf{y}=\mathbf{y}^T\mathbf{x}
xTy=yTx
这一点很好证明:
我们对
x
T
y
\mathbf{x}^T\mathbf{y}
xTy 进行转置可以到
y
T
x
\mathbf{y}^T\mathbf{x}
yTx
我们知道两个向量的点积也是标量,而标量的转置是自身。所以我们有
x
T
y
=
(
x
y
)
T
=
y
T
x
\mathbf{x}^T\mathbf{y}= (\mathbf{x}\mathbf{y})^T=\mathbf{y}^T\mathbf{x}
xTy=(xy)T=yTx
线性方程组
形如
a
1
x
1
+
a
2
x
2
+
.
.
.
+
a
n
x
n
=
b
a_1x_1+a_2x_2+...+a_nx_n=b
a1x1+a2x2+...+anxn=b
的方程称为线性方程,其中
a
1
,
a
2
,
.
.
.
,
a
3
a_1,a_2,...,a_3
a1,a2,...,a3和
b
b
b是实数,
x
1
,
x
2
,
.
.
.
,
x
n
x_1,x_2,...,x_n
x1,x2,...,xn是未知量。
大家是否觉得这个式子很熟悉?是的,我们可以将它表示为两个向量
a
\mathbf{a}
a和
x
\mathbf{x}
x的点积等于
b
b
b。即
a
T
x
=
b
\mathbf{a}^T \mathbf{x}=b
aTx=b
其中
a
\mathbf{a}
a是已知的实数向量,
b
b
b为标量,
x
\mathbf{x}
x为未知向量。
由n个线性方程组成的方程组称为线性方程组。
形如
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
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
a1,1x1+a1,2x2+...+a1,nxn=b1a2,1x1+a2,2x2+...+a2,nxn=b2....am,1x1+am,2x2+...+am,nxn=bm
这个方程组相当于
m
×
n
m \times n
m×n的矩阵
A
\mathbf{A}
A和一个只有
n
n
n维向量(n行1列的矩阵)
x
\mathbf{x}
x的乘积,结果是n维向量(n行一列的矩阵)
b
\mathbf{b}
b。用数学语言表示:
A
x
=
b
(
1
)
\mathbf{A}\mathbf{x}=\mathbf{b}\\ (1)
Ax=b(1)
其中
A
∈
R
m
×
n
\mathbf{A} \in R^{m\times n}
A∈Rm×n是已知矩阵,
b
∈
R
m
\mathbf{b} \in R^m
b∈Rm 是已知向量,
x
∈
R
n
\mathbf{x} \in R^n
x∈Rn 是未知向量。
我们可以将上式重写为
A
1
,
:
x
=
b
1
A
2
,
:
x
=
b
2
.
.
.
.
A
m
,
:
x
=
b
m
\mathbf{A}_{1,:}\mathbf{x}=b_1\\ \mathbf{A}_{2,:}\mathbf{x}=b_2\\ ....\\ \mathbf{A}_{m,:}\mathbf{x}=b_m\\
A1,:x=b1A2,:x=b2....Am,:x=bm
对于大部分的矩阵
A
\mathbf{A}
A,我们都可以通过矩阵逆(matrix inversion)来求解式(1)。
矩阵
A
\mathbf{A}
A的矩阵逆记作
A
−
1
\mathbf{A^{-1}}
A−1,其定义的矩阵满足如下条件
A
A
−
1
=
I
n
\mathbf{A}\mathbf{A^{-1}}=\mathbf{I}_{n}
AA−1=In
上式中的
I
n
\mathbf{I}_{n}
In是单位矩阵(identity matrix)。
任意向量和单位矩阵相乘,都不会改变。我们将保持n维向量不变的单位矩阵记作
I
n
\mathbf{I}_{n}
In.
形式上,
I
∈
R
n
×
n
\mathbf{I} \in R^{n \times n}
I∈Rn×n
∀
x
∈
R
n
,
I
n
x
=
x
\forall \mathbf{x} \in R^{n} , \mathbf{I}_n\mathbf{x}=\mathbf{x}
∀x∈Rn,Inx=x
单位矩阵的结构很简单:所有沿主对角线的元素都是1,而其他位置的所有元素都是0。如下所示:
[
1
0
0
0
1
0
0
0
1
]
\begin{bmatrix} 1 &0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1\\ \end{bmatrix}
100010001
我们可以利用矩阵逆的特性,通过以下步骤求解式(1)
A
x
=
b
A
−
1
A
x
=
A
−
1
b
I
n
x
=
A
−
1
b
x
=
A
−
1
b
\mathbf{A}\mathbf{x}=\mathbf{b}\\ \mathbf{A}^{-1}\mathbf{A}\mathbf{x}=\mathbf{A}^{-1}\mathbf{b}\\ \mathbf{I}_{n}\mathbf{x}=\mathbf{A}^{-1}\mathbf{b}\\ \mathbf{x}=\mathbf{A}^{-1}\mathbf{b}
Ax=bA−1Ax=A−1bInx=A−1bx=A−1b
我们先研究
2
×
2
2\times 2
2×2的线性方程组,即
A
x
=
b
\mathbf{A}\mathbf{x}=\mathbf{b}
Ax=b
中的
A
∈
R
2
,
2
,
b
∈
R
2
,
x
∈
R
2
\mathbf{A} \in R^{2,2},\mathbf{b} \in R^2,\mathbf{x} \in R^2
A∈R2,2,b∈R2,x∈R2.
将方程组展开可以得到
A
1
,
1
x
1
+
A
1
,
2
x
2
=
b
1
A
2
,
1
x
1
+
A
2
,
2
x
2
=
b
2
A_{1,1}x_1+A_{1,2}x_2=b_1\\ A_{2,1}x_1+A_{2,2}x_2=b_2\\
A1,1x1+A1,2x2=b1A2,1x1+A2,2x2=b2
大家是否觉得这两个方程有些眼熟?
是的,这两个方程就是二维平面上的两个直线方程。这两个方程的解
{
x
1
,
x
2
}
\{x_1,x_2\}
{x1,x2}分别是对应直线上的点的坐标。
所以这个方程组的解就是这两条直线的交点坐标。
我们知道直线之间只有三种关系:平行、相交、重合。所以线性方程组的解也只有三种可能:无解、一个解、无限个解。
我们可以将这个结论扩展到
m
×
n
m \times n
m×n的线性方程组中,在m维空间中,一个线性方程组表示为一个超平面(hyperlane),线性方程组的解表示为这些超平面的交点。在二维空间中,一个超平面是一条直线;在三维空间中,一个超平面是一个平面;在四维及更高维度的空间中,超平面是一个 n-1 维的子空间。
从代数角度考虑,如果线性方程组存在两个解,那么我们就可以构造出无限个解.若
p
\mathbf{p}
p和
q
\mathbf{q}
q是线性方程组的两个解,则存在解
∀
a
∈
R
,
z
=
a
p
+
(
1
−
a
)
q
\forall a \in R ,\mathbf{z}=a\mathbf{p}+(1-a)\mathbf{q}
∀a∈R,z=ap+(1−a)q
大家可以将解带入原式求证。
现在让我们更细致的分析方程有多少个解。
在此之前我们需要先介绍一个概念:线性组合。
线性组合(linear combination)是一组向量和一组标量之间的代数运算,可以得到一个新的向量。给定一组向量
v
1
,
v
n
,
.
.
.
,
v
n
\mathbf{v}_1,\mathbf{v}_n,...,\mathbf{v}_n
v1,vn,...,vn和一组标量
a
1
,
a
2
,
.
.
.
,
a
n
\mathbf{a}_1,\mathbf{a}_2,...,\mathbf{a}_n
a1,a2,...,an,线性组合可以定义为:
a
1
v
1
+
a
2
v
2
+
.
.
.
+
a
n
v
n
a_1\mathbf{v}_1 + a_2\mathbf{v}_2 + ... + a_n\mathbf{v}_n
a1v1+a2v2+...+anvn
一组向量和任意标量生成的向量的集合称为生成子空间(span)。
我们来观察线性方程组
A
x
=
b
\mathbf{A}\mathbf{x}=\mathbf{b}
Ax=b
A
\mathbf{A}
A可以被看作是一组列向量组成,
x
\mathbf{x}
x可以被看作是一组标量组成。它们的结果
b
\mathbf{b}
b是一个向量,所以
A
x
\mathbf{A}\mathbf{x}
Ax就是线性组合。
A
x
=
∑
i
A
:
,
i
x
i
\mathbf{A}\mathbf{x}=\sum_{i}A_{:,i}x_i
Ax=i∑A:,ixi
所以如果
b
\mathbf{b}
b存在于
A
\mathbf{A}
A的生成子空间中,那么
A
x
=
b
\mathbf{A}\mathbf{x}=\mathbf{b}
Ax=b一定存在解。$
\mathbf{A}
的生成子空间称为
的生成子空间称为
的生成子空间称为\mathbf{A}
的列空间
(
c
o
l
u
m
n
s
p
a
c
e
)
或
的列空间(column space)或
的列空间(columnspace)或\mathbf{A}
的值域
(
r
a
n
g
e
)
。若使方程
的值域(range)。 若使方程
的值域(range)。若使方程\mathbf{A}\mathbf{x}=\mathbf{b}
对任意
对任意
对任意\mathbf{b} \in R^m
成立,需要
成立,需要
成立,需要\mathbf{A}
的列空间覆盖整个
的列空间覆盖整个
的列空间覆盖整个 R ^ m$。
A
\mathbf{A}
A的列空间覆盖整个$ R ^ m$意味着
A
\mathbf{A}
A至少有m列。这是因为一组向量线性组合的生成子空间的维度取决于这组向量的向量数量。换句话说,生成子空间的维度通常被描述为生成该子空间的最小向量集合大小。
如果
A
\mathbf{A}
A的列数小于m,那么
R
m
R^m
Rm中就会存在某个向量不在
A
\mathbf{A}
A的列空间中,那么该向量对应的
b
\mathbf{b}
b会使该方程无解。例如:一个矩阵
B
∈
R
3
×
2
\mathbf{B} \in R^{3 \times 2}
B∈R3×2的,它的列空间只能覆盖
R
2
R^2
R2。无论
x
\mathbf{x}
x取何值,也只能表示
R
3
R^3
R3空间中的二维平面。此时只有当
b
\mathbf{b}
b在该二维平面时,才有解。
对于
A
∈
R
m
×
n
\mathbf{A} \in R^{m \times n}
A∈Rm×n,
n
≥
m
n \geq m
n≥m 只是
A
x
=
b
\mathbf{A}\mathbf{x}=\mathbf{b}
Ax=b有解的必要不充分条件。因为$\mathbf{A}
可能存在冗余的列向量,也就是存在某个列向量可以由另它列向量的线性组合表示。例如
:
对于
可能存在冗余的列向量,也就是存在某个列向量可以由另它列向量的线性组合表示。例如:对于
可能存在冗余的列向量,也就是存在某个列向量可以由另它列向量的线性组合表示。例如:对于\mathbf{B} \in R^{2,2}
,如果
,如果
,如果\mathbf{B}{:,1}=\mathbf{B}{:,2}
。那么
。那么
。那么\mathbf{B}
的列空间和它的一个列向量构成的矩阵的列空间是一样的。这很好理解,线性组合的定义是
的列空间和它的一个列向量构成的矩阵的列空间是一样的。 这很好理解,线性组合的定义是
的列空间和它的一个列向量构成的矩阵的列空间是一样的。这很好理解,线性组合的定义是 a_1\mathbf{v}_1 + a_2\mathbf{v}_2 + … + a_n\mathbf{v}_n
。那么矩阵
。那么矩阵
。那么矩阵\mathbf{B}$的列空间就是
a
1
B
:
,
1
+
a
2
B
:
,
2
a_1\mathbf{B}_{:,1}+a_2\mathbf{B}_{:,2}
a1B:,1+a2B:,2。但是因为
B
:
,
1
=
B
:
,
2
\mathbf{B}_{:,1}=\mathbf{B}_{:,2}
B:,1=B:,2,所以
a
1
B
:
,
1
+
a
2
B
:
,
2
=
(
a
1
+
a
2
)
B
:
,
1
a_1\mathbf{B}_{:,1}+a_2\mathbf{B}_{:,2}=(a_1+a_2)\mathbf{B}_{:,1}
a1B:,1+a2B:,2=(a1+a2)B:,1
而
a
1
+
a
2
a_1+a_2
a1+a2可以由另一个实数表示,所以它们的生成子空间是相同的。
如果一组向量中的某个向量可以由其他向量的线性组合表示,我们则称这组向量是线性相关(linear dependence)。
如果一组向量中任意一个向量都不能由其他向量的线性组合表示则称为线性无关(linearly independent)。
如果向一组向量中插入一个线性相关的向量,并不会增加这组向量的生成子空间。而上文中的这句话:"这是因为一组向量的线性组合的生成子空间的维度取决于这组向量的向量数量"是不严谨的,更为严谨的说法是:这是因为一组向量的线性组合的生成子空间的维度取决于这组向量的线性无关的向量的数量。
这意味着,如果
A
x
=
b
\mathbf{A}\mathbf{x}=\mathbf{b}
Ax=b至少存在一个解,则
A
\mathbf{A}
A至少包含一组m个线性无关的向量。这是
A
x
=
b
\mathbf{A}\mathbf{x}=\mathbf{b}
Ax=b对于每一个向量
b
\mathbf{b}
b的取值都有解的充分必要条件。那什么时候只有一个解?什么时候有无限个解呢?这取决于线性无关向量的数量.对于
A
∈
R
m
×
n
\mathbf{A} \in R^{m \times n}
A∈Rm×n;若
m
=
n
m =n
m=n,且所有列向量都是线性无关的,则只有一个解;若
m
<
n
m < n
m<n,且
A
\mathbf{A}
A中多于m个线性无关向量,则有无限个解。
A
\mathbf{A}
A包含m个线性无关向量,则在m维列空间中,对m个列向量线性生成得到的每一个m维向量都是唯一的。所以对于特定的
b
\mathbf{b}
b只存在唯一个
x
\mathbf{x}
x使得
A
x
=
b
\mathbf{A} \mathbf{x}=\mathbf{b}
Ax=b。 其中
A
∈
R
m
×
n
\mathbf{A} \in R^{m \times n}
A∈Rm×n,
b
∈
R
m
\mathbf{b} \in R^m
b∈Rm,
x
∈
R
n
\mathbf{x} \in R^n
x∈Rn
A
\mathbf{A}
A中多于m个线性无关向量,这意味着它的生成子空间的维度一定大于m;而一个生成子空间中会包含无数个维度小于当前空间维度的子空间,那么对于特定的
b
\mathbf{b}
b,存在多个
x
\mathbf{x}
x 使得
A
x
=
b
\mathbf{A} \mathbf{x}=\mathbf{b}
Ax=b。其中
A
∈
R
m
×
n
\mathbf{A} \in R^{m \times n}
A∈Rm×n,
b
∈
R
m
\mathbf{b} \in R^m
b∈Rm,
x
∈
R
n
\mathbf{x} \in R^n
x∈Rn。
我们回顾矩阵逆求解方程组的方法
x
=
A
−
1
b
\mathbf{x}=\mathbf{A}^{-1}\mathbf{b}
x=A−1b
因为
A
−
1
\mathbf{A}^{-1}
A−1和
b
\mathbf{b}
b都是已知的,所以方程只有一个解
x
\mathbf{x}
x。这意味着,一个矩阵它的矩阵逆存在的充要条件是,这个矩阵是方阵(即行数和列数相同),并且所有列向量都是线性无关的。一个方阵的一个列向量是线性相关的,则称为奇异的(singular)。
矩阵逆的右乘定义为:
A
A
−
1
=
I
\mathbf{A}\mathbf{A}^{-1}=\mathbf{I}
AA−1=I
对于一个方阵
A
\mathbf{A}
A 和它的逆矩阵
A
−
1
\mathbf{A}^{-1}
A−1,无论是左乘还是右乘,都有
A
A
−
1
=
A
−
1
A
=
I
\mathbf{A}\mathbf{A}^{-1}=\mathbf{A}^{-1}\mathbf{A}=\mathbf{I}
AA−1=A−1A=I,其中
I
\mathbf{I}
I 是单位矩阵。
范数
范数(norm)是一个函数,它用来衡量向量的大小。形式上,
L
p
L^p
Lp范数定义为
∣
∣
x
∣
∣
p
=
(
∑
i
∣
x
i
∣
p
)
1
p
||x||_p=(\sum_{i}|x_i|^p)^{\frac{1}{p}}
∣∣x∣∣p=(i∑∣xi∣p)p1
其中
p
∈
R
p \in R
p∈R,
p
≥
1
p \geq 1
p≥1。
严格的说,范数是满足以下三个性质的函数:
- 非负性:
∀ x , f ( x ) ≥ 0. 当且仅当 x = 0 时, f ( x ) = 0 \forall \mathbf{x} ,f(\mathbf{x}) \geq 0. 当且仅当\mathbf{x} = 0 时,f(\mathbf{x}) = 0 ∀x,f(x)≥0.当且仅当x=0时,f(x)=0 - 齐次性:
∀ α ∈ R , f ( α x ) = ∣ α ∣ f ( x ) \forall \alpha \in R,f(\alpha\mathbf{x})=|\alpha|f(\mathbf{x}) ∀α∈R,f(αx)=∣α∣f(x) - 三角不等式
∀ x , ∀ y , f ( x + y ) ≤ f ( x ) + f ( y ) \forall \mathbf{x},\forall \mathbf{y},f(\mathbf{x}+\mathbf{y}) \leq f(\mathbf{x})+f(\mathbf{y}) ∀x,∀y,f(x+y)≤f(x)+f(y)
我们可以将向量 x \mathbf{x} x的范数看作是从原点到 x \mathbf{x} x的距离。 L 2 L^2 L2范数称为欧几里得范数(Euclidean norm)。它表示的是从原点出发到向量 x \mathbf{x} x确定的点的欧几里得距离。我们经常将 L 2 L^2 L2范数表示为 ∣ ∣ x ∣ ∣ ||x|| ∣∣x∣∣。
在机器学习问题中,需要区分恰好是零的元素和非零但值很小的元素时通常使用 L 1 L^1 L1范数
∣ ∣ x ∣ ∣ 1 = ∑ i ∣ x i ∣ ||x||_1=\sum_{i}|x_i| ∣∣x∣∣1=i∑∣xi∣
还存在一个不标准的范数 L 0 L^0 L0,它用来统计向量中非零元素的个数来衡量向量的大小。之所以说他不标准是因为它不满足齐次性这个性质。 α x \alpha\mathbf{x} αx并不会改变向量的非零元素的数目,即 f ( α x ) = f ( x ) f(\alpha\mathbf{x})= f(\mathbf{x}) f(αx)=f(x) ,所以 f ( α x ) ≠ ∣ α ∣ f ( x ) f(\alpha\mathbf{x})\neq |\alpha|f(\mathbf{x}) f(αx)=∣α∣f(x)。
L ∞ L^\infty L∞范数称为最大范数(max norm),它表示向量中具有最大幅值的元素的绝对值:
∣ ∣ x ∣ ∣ ∞ = max i ∣ x i ∣ ||\mathbf{x}||_\infty = \max_{i} |x_i| ∣∣x∣∣∞=imax∣xi∣
我们可以使用Frobenius范数(Frobenius norm)衡量矩阵的大小
∣ ∣ A ∣ ∣ F = ( ∑ i , j ∣ A i , j ∣ 2 ) 1 2 ||\mathbf{A}||_F=(\sum_{i,j} |A_{i,j}|^2)^\frac{1}{2} ∣∣A∣∣F=(i,j∑∣Ai,j∣2)21
我们可以使用范数表示两个向量的点积
x y = ∣ ∣ x ∣ ∣ 2 ∣ ∣ y ∣ ∣ 2 c o s ( θ ) \mathbf{x}\mathbf{y}=||x||_2||y||_2cos(\theta) xy=∣∣x∣∣2∣∣y∣∣2cos(θ)
其中 θ \theta θ是 x \mathbf{x} x和 y \mathbf{y} y之间的夹角。
特殊类型的矩阵和向量
这里将讲解三种类型的矩阵和两种类型的向量。
我们先从向量开始讲解。
单位向量(unit vector)是指具有单位范数(欧几里得空间(即常见的二维或三维空间)中,单位范数通常指的是
L
2
L^2
L2 范数为1)的向量。即
∣
∣
x
∣
∣
2
=
1
||x||_2=1
∣∣x∣∣2=1
如果
x
T
y
=
0
\mathbf{x}^T\mathbf{y}=0
xTy=0,那么
x
\mathbf{x}
x和
y
\mathbf{y}
y互相正交。若两个互相正交的向量都具有非零范数,则这两个向量之间的夹角
θ
\theta
θ为九十度。
如果两个互相正交的向量的范数都是1,则称为标准正交(orthonormal)。
如果一个方阵的行向量和列向量分别标准正交,则称这个方阵为正交矩阵(orthogonal matrix).即
A
T
A
=
A
A
T
=
I
\mathbf{A}^T\mathbf{A}=\mathbf{A}\mathbf{A}^T=\mathbf{I}
ATA=AAT=I
这意味着
A
−
1
=
A
T
\mathbf{A}^{-1}=\mathbf{A}^T
A−1=AT
若一个矩阵的转置等于它自身则称这个矩阵是对称(symmetric)矩阵,即
A
=
A
T
\mathbf{A}=\mathbf{A}^T
A=AT
对角矩阵(diagonal matrix)是指只有在主对角线上含有非零元素,其余位置全是零的矩阵。形式上,矩阵
A
\mathbf{A}
A是对角矩阵,当且仅当
i
≠
j
i \neq j
i=j时,
A
i
,
j
=
0
A_{i,j}=0
Ai,j=0时成立。这里需要注意,主对角线上的元素
A
i
,
i
A_{i,i}
Ai,i可以是任何实数,包括零。
我们使用
d
i
a
g
(
v
)
diag(\mathbf{v})
diag(v)表示主对角线上的元素由向量
v
\mathbf{v}
v给定的对角方阵。即
A
i
,
i
=
v
i
A_{i,i}=\mathbf{v}_i
Ai,i=vi。在计算
d
i
a
g
(
v
)
x
diag(\mathbf{v})\mathbf{x}
diag(v)x时,我们只需要将每个
x
i
x_i
xi放大
v
i
v_i
vi倍。
对角方阵的逆矩阵存在,当且仅当对角元素都是非零值.
d
i
a
g
(
v
)
−
1
=
d
i
a
g
(
1
/
v
1
,
2
/
v
2
,
.
.
.
,
1
/
v
n
T
)
diag(\mathbf{v})^{-1}=diag({1/v_1,2/v_2,...,1/v_n}^T)
diag(v)−1=diag(1/v1,2/v2,...,1/vnT)
对角矩阵不都是方阵,对于
A
x
\mathbf{A}\mathbf{x}
Ax,其中
A
=
d
i
a
g
(
v
)
,
A
∈
R
m
,
n
,
x
∈
R
n
\mathbf{A}=diag(\mathbf{v}),\mathbf{A} \in R^{m,n},\mathbf{x} \in R^n
A=diag(v),A∈Rm,n,x∈Rn时,当m<n时,那么在缩放后的元素末尾增加一些零.当m>n 时,那么在缩放后的元素末尾砍掉一些元素.
特征分解
在数学中,分解通常指的是将一个复杂的对象或结构分解为更简单的部件或组件。这个概念在许多数学领域都有应用。在线性代数中,矩阵分解是常见的一个主题,我们通过分解矩阵来发现它不明显的性质。
矩阵有许多种的分解方式:LU分解、QR分解、特征分解、奇异值分解等
矩阵的特征分解是指将矩阵分解成一组特征向量和一组特征值。
满足
A
v
=
λ
v
\mathbf{A}\mathbf{v}=\lambda\mathbf{v}
Av=λv
的向量
v
\mathbf{v}
v称为右特征向量(right eigenvector),特征向量与矩阵相乘相当于对于它自身进行缩放。需要注意,特征向量是非零向量。标量
λ
\lambda
λ称为特征值(eigenvalue)。
满足
v
T
A
=
v
λ
\mathbf{v}^T\mathbf{A}=\mathbf{v}\lambda
vTA=vλ
的特征向量称为左特征向量(left eigenvector);
在线性代数中,我们通常讨论的是右特征向量。
矩阵分解的目标是将找到一组线性无关的特征向量作为新的基(基是一个向量空间中的一组线性无关的向量,它们可以组合起来生成整个向量空间)。在这个基下,原矩阵可以被表示为一个
d
i
a
g
(
v
)
diag(\mathbf{v})
diag(v)。其中
v
\mathbf{v}
v是由特征值组成的向量。
并不是所有的矩阵都可以进行特征分解,主要是因为并不是每一个矩阵都由足够的线性无关的特征向量来构成一个完整的基。有些矩阵的特征分解还涉及到了复数。但是如果一个矩阵是对称的,那么它总是可以被特征分解,这桑因为对称矩阵总是可以找到一个由其特征向量构成的正交基。
对于每一个实对称矩阵,可以将它分解成实特征向量和实特征值:
A
=
Q
Λ
Q
T
\mathbf{A}=\mathbf{Q}\mathbf{\Lambda}\mathbf{Q}^T
A=QΛQT
其中矩阵
Q
\mathbf{Q}
Q是由特征向量为列向量组成的正交矩阵,矩阵
Λ
\mathbf{\Lambda}
Λ是以特征值为对角元素的对角矩阵。特征向量
Q
:
,
i
Q_{:,i}
Q:,i对应的特征值是
Λ
i
,
i
\Lambda_{i,i}
Λi,i。
让我们详细看一下这个式子。这个式子分两步运算:
第一步:计算
Q
Λ
\mathbf{Q}\mathbf{\Lambda}
QΛ,这一步将
A
\mathbf{A}
A 从原来的坐标系转换到特征向量构成的新坐标系中的对角矩阵。
第二步:计算(
Q
Λ
\mathbf{Q}\mathbf{\Lambda}
QΛ)
Q
T
\mathbf{Q}^T
QT 。乘以
Q
T
\mathbf{Q}^T
QT是将第一步得到的新坐标转换为原来的坐标。
特征分解可以被视为一种坐标系的转换。在特征分解中,我们找到一组新的基向量(即特征向量),这些基向量定义了一个新的坐标系。在这个新的坐标系中,原矩阵被表示为一个对角矩阵,其对角线上的元素是特征值。这个对角矩阵在新的坐标系中更容易处理,因为它只在对角线上有非零元素。所以,特征分解可以被看作是从原坐标系到特征向量定义的新坐标系的转换。
通过特征分解我们可以知道很多关于矩阵的信息:
- 矩阵是奇异的,当且仅当它含有零特征值
- 实对称矩阵的特征分解可以用于优化二次方程 f ( x ) = x T A x f(x)=x^T\mathbf{A}x f(x)=xTAx,其中现在 ∣ ∣ x ∣ ∣ 2 = 1 ||x||_2=1 ∣∣x∣∣2=1。如果 x \mathbf{x} x等于 A \mathbf{A} A的某个特征向量时, f f f将返回对应的特征值。在限制条件下,函数 f f f的最大值是最大特征值,最小值是最小特征值。
如果一个矩阵的所有特征值都是正数,则称为正定(positive definite);所有特征值都是非负数,则称为半正定(positive semidefinite);所有特征值都是负数,则称为负定(negative definite);所有特征值都是非正数,则称为半负定(negative semidefinite)。
奇异值分解
奇异值分解(singular value decomposition,SVD)是将矩阵分解成奇异向量(singular)和奇异值(singular value)。每一个实数矩阵都有一个奇异值分解。奇异值分解可以让我们得到一些与特征分解相同的信息。
我们将矩阵
A
\mathbf{A}
A分解成三个矩阵的乘积
A
=
U
D
V
T
\mathbf{A}=\mathbf{U}\mathbf{D}\mathbf{V}^T
A=UDVT
矩阵
U
\mathbf{U}
U和
V
\mathbf{V}
V被定义为正交矩阵,矩阵
V
\mathbf{V}
V是对角矩阵。
如果
A
\mathbf{A}
A是一个m行n列的矩阵,则
U
\mathbf{U}
U是一个m行m列的方阵,
D
\mathbf{D}
D是一个m行n列的矩阵,
V
\mathbf{V}
V是一个n行n列的方阵。
矩阵
U
U
U的列向量称为左奇异向量(left singular vector),它是
A
A
T
\mathbf{A}\mathbf{A}^T
AAT的特征向量;矩阵
V
\mathbf{V}
V的列向量被称为右奇异向量(right singular vector) ,它是
A
T
A
\mathbf{A}^T\mathbf{A}
ATA的特征向量;矩阵
D
\mathbf{D}
D的对角元素称为矩阵
A
\mathbf{A}
A的奇异值(singular value),非零奇异值是
A
T
A
\mathbf{A}^T\mathbf{A}
ATA特征值的平方根,同时也是
A
A
T
\mathbf{A}\mathbf{A}^T
AAT的平方根。
通过伪逆求解线性方程组
伪逆,又称为Moore-Penrose逆,它是一种广义的矩阵。我们可以找到任意一个矩阵的伪逆。矩阵
A
\mathbf{A}
A的伪逆定义为:
A
+
=
lim
x
→
0
(
A
T
A
+
α
I
)
−
1
A
T
\mathbf{A}^+=\lim_{x \to 0}(\mathbf{A}^T\mathbf{A}+\alpha\mathbf{I})^{-1}\mathbf{A}^T
A+=x→0lim(ATA+αI)−1AT
这个公式被称为Tikhonov正则化,或岭回归。计算矩阵伪逆的方法很多, 这是其中的一种。我们还可以通过奇异值(SVD)计算伪逆。
A
+
=
V
D
+
U
T
\mathbf{A}^+=\mathbf{V}\mathbf{D}^+\mathbf{U}^T
A+=VD+UT
其中
V
D
U
\mathbf{V} \mathbf{D} \mathbf{U}
VDU分别对应于奇异值分解中的三个矩阵。
- V \mathbf{V} V是右奇异向量组成的矩阵
- D + \mathbf{D}^+ D+是 D \mathbf{D} D的伪逆,是一个以奇异值为对角元素的对角矩阵。对角矩阵的伪逆是通过取原矩阵的对角线上元素的倒数得到的
- U \mathbf{U} U是左奇异向量组成的矩阵
对于一个 m × n m \times n m×n的矩阵 A \mathbf{A} A,其伪逆 A + \mathbf{A}^+ A+是一个 n × m n \times m n×m的矩阵, A + \mathbf{A}^+ A+满足以下四个条件:
- A A + A = A \mathbf{A}\mathbf{A}^+\mathbf{A}=\mathbf{A} AA+A=A
- A + A A + = A + \mathbf{A}^+\mathbf{A}\mathbf{A}^+=\mathbf{A}^+ A+AA+=A+
- ( A + A ) T = A + A (\mathbf{A}^+\mathbf{A})^T=\mathbf{A}^+\mathbf{A} (A+A)T=A+A
- ( A A + ) T = A A + (\mathbf{A}\mathbf{A}^+)^T=\mathbf{A}\mathbf{A}^+ (AA+)T=AA+
在求解线性方程
A
x
=
y
\mathbf{A}\mathbf{x}=\mathbf{y}
Ax=y时,如果
A
\mathbf{A}
A是可逆的,那么我们可以通过
x
=
A
−
1
b
\mathbf{x}=\mathbf{A}^{-1}\mathbf{b}
x=A−1b
来求解,但是并不是每一个矩阵都存在逆矩阵。对于不可以使用矩阵逆求解的方程,我们可以使用伪逆进行求解。
伪逆的一个重要性质是
A
A
+
A
=
A
\mathbf{A}\mathbf{A}^+\mathbf{A}=\mathbf{A}
AA+A=A,
所以
A
x
=
b
A
A
+
A
x
=
A
A
+
b
A
x
=
A
A
+
b
x
=
A
+
b
\mathbf{A}\mathbf{x}=\mathbf{b}\\ \mathbf{A}\mathbf{A}^+\mathbf{A}\mathbf{x}=\mathbf{A}\mathbf{A}^+\mathbf{b}\\ \mathbf{A}\mathbf{x}=\mathbf{A}\mathbf{A}^+\mathbf{b}\\ \mathbf{x}=\mathbf{A}^+\mathbf{b}
Ax=bAA+Ax=AA+bAx=AA+bx=A+b
x
=
A
+
b
\mathbf{x}=\mathbf{A}^+\mathbf{b}
x=A+b的解是满足
∣
∣
A
x
−
b
∣
∣
2
||\mathbf{A}\mathbf{x}-\mathbf{b}||_2
∣∣Ax−b∣∣2最小的解,换句话说
x
=
A
+
b
\mathbf{x}=\mathbf{A}^+\mathbf{b}
x=A+b的解是方程所有可行性解中欧几里得距离
∣
∣
x
∣
∣
2
||x||_2
∣∣x∣∣2最小的一个
迹运算
迹运算是线性代数中的一种运算, 它对应的是一个方程所有主对角线元素的和:
T
r
(
A
)
=
∑
i
A
i
,
i
Tr({\mathbf{A}})=\sum_{i}A_{i,i}
Tr(A)=i∑Ai,i
迹运算有着很多重要的性质。
对于任意方阵
A
\mathbf{A}
A和
B
\mathbf{B}
B
T
r
(
A
+
B
)
=
T
r
(
A
)
+
T
r
(
B
)
Tr(\mathbf{A}+\mathbf{B})=Tr(\mathbf{A})+Tr(\mathbf{B})
Tr(A+B)=Tr(A)+Tr(B)
对于任意方阵
A
\mathbf{A}
A和标量c
T
r
(
c
A
)
=
c
T
r
(
A
)
Tr(\mathbf{c\mathbf{A}})=cTr(\mathbf{A})
Tr(cA)=cTr(A)
标量的迹运算结果仍然是它自身
T
r
(
a
)
=
a
Tr(a)=a
Tr(a)=a
矩阵的迹运算结果等同于矩阵逆的迹运算结果
T
r
(
A
)
=
T
r
(
A
T
)
Tr(\mathbf{A})=Tr(\mathbf{A}^T)
Tr(A)=Tr(AT)
对一组矩阵乘积进行迹运算得到的迹与将这组矩阵的最后一个移至最前面之后相乘的迹是相同(要保证在移动后,矩阵乘积仍然成立)
T
r
(
A
B
.
.
N
)
=
T
r
(
N
A
B
.
.
)
Tr(\mathbf{A}\mathbf{B}..\mathbf{N})=Tr(\mathbf{N}\mathbf{A}\mathbf{B}..)
Tr(AB..N)=Tr(NAB..)
更一般的
T
r
(
∏
i
=
1
n
F
(
i
)
)
=
T
r
(
F
(
n
)
∏
i
=
1
n
−
1
F
(
i
)
)
Tr(\prod_{i=1}^{n}\mathbf{F}^{(i)})=Tr(\mathbf{F}^{(n)}\prod_{i=1}^{n-1}\mathbf{F}^{(i)})
Tr(i=1∏nF(i))=Tr(F(n)i=1∏n−1F(i))
迹运算还提供了描述矩阵Frobenius范式的方式:
∣
∣
A
∣
∣
F
=
T
r
(
A
A
T
)
||A||_{F}=\sqrt{Tr(\mathbf{A}\mathbf{A}^T)}
∣∣A∣∣F=Tr(AAT)文章来源:https://www.toymoban.com/news/detail-774153.html
行列式
矩阵特征值的乘积称为行列式,记作
d
e
t
(
A
)
det(A)
det(A)或
∣
A
∣
|\mathbf{A}|
∣A∣。
行列式有着许多重要的性质和应用:文章来源地址https://www.toymoban.com/news/detail-774153.html
- 行列式可以帮助我们判断一个矩阵是否可逆,如果一个矩阵的行列式为0,那么这个矩阵是不可逆的,如果一个矩阵的行列式不为0,那么这个矩阵是可逆的
- 行列式可以用来计算一个矩阵的伪逆
- 等等
到了这里,关于深度学习-必备的数学知识-线性代数(合集)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!