线性代数
2.1 标量,向量,矩阵,张量
-
标量(scalar):一个标量就是一个单独的数
-
向量(vector):一个向量是一列数。 这些数是有序排列的。 通过次序中的索引,我们可以确定每个单独的数。当需要明确表示向量中的元素时,我们会将元素排列成一个方括号包围的纵列: x = [ x 1 x 2 x 3 ⋮ x n ] x=\begin{bmatrix} x_1 \\x_2 \\ x_3 \\\vdots\\x_n\end{bmatrix} x=⎣⎢⎢⎢⎢⎢⎡x1x2x3⋮xn⎦⎥⎥⎥⎥⎥⎤
-
矩阵(matrix):矩阵是一个二维数组,其中的每一个元素由两个索引所确定。当我们需要明确表示矩阵中的元素时,我们将它们写在用方括号括起来的数组中: [ A 1 , 1 A 1 , 2 A 2 , 1 A 2 , 2 ] \begin{bmatrix} A_{1,1} & A_{1,2} \\ A_{2,1} & A_{2,2} \\ \end{bmatrix} [A1,1A2,1A1,2A2,2]
-
张量:在某些情况下,我们会讨论坐标超过两维的数组。 一般地,一个数组中的元素分布在若干维坐标的规则网格中,我们称之为张量。
转置:矩阵的重要操作之一,将矩阵的行列互换得到的新矩阵称为转置矩阵。
( A i , j ) T = A j , i (A_{i,j})^T=A_{j,i} (Ai,j)T=Aj,i
只要矩阵形状一样我们可以把两个矩阵相加(对应位置元素相加):
C = A + B C=A+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
标量和矩阵相乘,或是和矩阵相加时,我们只需将其与矩阵的每个元素相乘或相加,比如 D = a ⋅ B + c D=a\cdot B+c D=a⋅B+c其中 D i , j = a ⋅ B i , j + c D_{i,j}=a\cdot B_{i,j}+c Di,j=a⋅Bi,j+c
在深度学习中也允许矩阵和向量相加,比如 C = A + b C=A+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 b b和矩阵 A A A的每一行相加。 这个简写方法使我们无需在加法操作前定义一个将向量 b b b复制到每一行而生成的矩阵。 这种隐式地复制向量 b b b到很多位置的方式,被称为广播(broadcasting)。
2.2 矩阵和向量相乘
矩阵乘法是矩阵运算中最重要的操作之一。 两个矩阵
A
A
A和
B
B
B的矩阵乘积是第三个矩阵
C
C
C。 为了使乘法定义良好,矩阵
A
A
A的列数必须和矩阵
B
B
B的行数相等。 如果矩阵
A
A
A的形状是
m
×
n
m\times n
m×n,矩阵
B
B
B的形状是
n
×
p
n\times p
n×p,那么矩阵
C
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_kA_{i,k}B_{k,j}
Ci,j=k∑Ai,kBk,j
矩阵乘积服从分配率
A
(
B
+
C
)
=
A
B
+
A
C
A(B+C)=AB+AC
A(B+C)=AB+AC也服从结合律
A
(
B
C
)
=
(
A
B
)
C
A(BC)=(AB)C
A(BC)=(AB)C但矩阵乘法并不满足交换律(
A
B
=
B
A
AB=BA
AB=BA并非总是成立),然而向量点积满足交换律
x
T
y
=
y
T
x
x^Ty=y^Tx
xTy=yTx矩阵转置也有如此性质
(
A
B
)
T
=
B
T
A
T
(AB)^T=B^TA^T
(AB)T=BTAT
我们可用线性代数符号表示线性方程组
A
x
=
b
Ax=b
Ax=b其中
A
∈
R
m
×
n
A\in \mathbb{R}^{m \times n}
A∈Rm×n是已知矩阵,
b
∈
R
m
b\in \mathbb{R}^m
b∈Rm是一个已知向量,
x
∈
R
m
x\in \mathbb{R}^m
x∈Rm是要求解的未知向量。我们可以把上式重写为
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+\cdots +A_{1,n}x_n=b_1\\A_{2,1}x_1+A_{2,2}x_2+\cdots +A_{2,n}x_n=b_2\\\vdots\\A_{m,1}x_1+A_{m,2}x_2+\cdots +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
2.3 单位矩阵和逆矩阵
单位矩阵:我们将保持
n
n
n维向量不变的单位矩阵记做
I
n
I_n
In,形式上
∀
x
∈
R
n
,
I
n
x
=
x
\forall x \in \mathbb{R}^n,I_nx=x
∀x∈Rn,Inx=x即任意向量和单位矩阵相乘都不会改变。如图所示为
I
3
I_3
I3
[
1
0
0
0
1
0
0
0
1
]
\begin{bmatrix} 1 & 0 &0 \\ 0 & 1&0 \\ 0&0&1\end{bmatrix}
⎣⎡100010001⎦⎤
矩阵
A
A
A的逆矩阵记作
A
−
1
A^{-1}
A−1,其定义的矩阵满足如下条件:
A
−
1
A
=
I
n
A^{-1}A=I_n
A−1A=In我们可以通过如下步骤求解
A
x
=
b
A
−
1
A
x
=
A
−
1
b
I
n
x
=
A
−
1
b
x
=
A
−
1
b
Ax=b\\A^{-1}Ax=A^{-1}b\\I_nx=A^{-1}b\\x=A^{-1}b
Ax=bA−1Ax=A−1bInx=A−1bx=A−1b当然,这取决于我们能否找到一个逆矩阵
A
−
1
A^{-1}
A−1。
2.4 线性相关和生成子空间
如果逆矩阵
A
−
1
A^{-1}
A−1存在,那么
A
x
=
b
Ax=b
Ax=b对于每一个向量b恰好存在一个解,但是,对于方程组而言,对于向量
b
b
b的某些值,有可能不存在解,或者存在无限多个解。 在多于一个解但是少于无限多个解的情况是不可能发生的;因为如果
x
x
x和
y
y
y都是某方程组的解,则
z
=
a
x
+
(
1
−
a
)
y
z=ax+(1-a)y
z=ax+(1−a)y
为了分析方程有多少个解,我们可以将
A
A
A的列向量看作从原点(元素都是零的向量)出发的不同方向,确定有多少种方法可以到达向量
b
b
b。 在这个观点下,向量
x
x
x中的每个元素表示我们应该沿着这些方向走多远,即
x
i
x_i
xi表示我们需要沿着第
i
i
i个向量的方向走多远:
A
x
=
∑
i
x
i
A
:
,
i
Ax=\sum_ix_iA_{:,i}
Ax=i∑xiA:,i一般而言这种组合成为线性组合(linear combination).
一组向量的生成子空间(span) 是原始向量线性组合后所能抵达的点的集合。确定
A
x
=
b
Ax=b
Ax=b是否有解相当于确定向量
b
b
b是否在
A
A
A列向量的生成子空间中,这个特点的子空间成为
A
A
A的值域。
为了使方程
A
x
=
b
Ax=b
Ax=b对于任意向量
b
∈
R
m
b \in \mathbb{R}^m
b∈Rm都存在解,我们要求
A
A
A的列空间构成整个
R
m
\mathbb{R}^m
Rm。 如果
R
m
\mathbb{R}^m
Rm中的某个点不在
A
A
A的列空间中,那么该点对应的
b
b
b会使得该方程没有解。 矩阵
A
A
A的列空间是整个
R
m
\mathbb{R}^m
Rm的要求,意味着
A
A
A至少有
m
m
m列,即
n
≥
m
n\geq m
n≥m。 否则,
A
A
A列空间的维数会小于
m
m
m。 例如,假设
A
A
A是一个
3
×
2
3\times 2
3×2的矩阵。 目标
b
b
b是
3
3
3维的,但是
x
x
x只有
2
2
2维。 所以无论如何修改
x
x
x的值,也只能描绘出
R
3
\mathbb{R}^3
R3空间中的二维平面。 当且仅当向量
b
b
b在该二维平面中时,该方程有解。
不等式 n ≥ m n\geq m n≥m仅是方程对每一点都有解的必要条件。 这不是一个充分条件,因为有些列向量可能是冗余的。 假设有一 R 2 × 2 \mathbb{R}^{2\times 2} R2×2中的矩阵,它的两个列向量是相同的。 那么它的列空间和它的一个列向量作为矩阵的列空间是一样的。 换言之,虽然该矩阵有 2 2 2列,但是它的列空间仍然只是一条线,不能涵盖整个 R 2 \mathbb{R}^2 R2空间。正式的这种冗余成为线性相关(linear dependence),如果一组向量中的任意一个向量都不能表示成其他向量的线性组合,那么这组向量称为线性无关。
2.5 范数
在机器学习中经常使用范数来衡量向量大小。形式上
L
p
L^p
Lp范数定义为:
∣
∣
x
∣
∣
p
=
(
∑
i
∣
x
i
∣
p
)
1
p
||x||_p=\left (\sum_i|x_i|^p\right)^{\frac 1p}
∣∣x∣∣p=(i∑∣xi∣p)p1其中
p
∈
R
,
p
≥
1
p\in \mathbb{R},p\geq 1
p∈R,p≥1。
范数是将向量映射到非负值得函数,直观上说向量
x
x
x的范数衡量从原点到
x
x
x的距离。严格上说范数是满足以下条件的任意函数:
- f ( x ) = 0    ⟹    x = 0 f(x)=0 \implies x=0 f(x)=0⟹x=0
- f ( x + y ) ≤ f ( x ) + f ( y ) f(x+y)\leq f(x)+f(y) f(x+y)≤f(x)+f(y)(三角不等式(triangle inequality))
- ∀ a ∈ R , f ( a x ) = ∣ a ∣ f ( x ) \forall a \in \mathbb{R},f(ax)=|a|f(x) ∀a∈R,f(ax)=∣a∣f(x)
常用的范数有
L
2
L^2
L2范数,最大范数。
深度学习中也常用Frobrnius范数衡量矩阵大小:
∣ ∣ A ∣ ∣ F = ∑ i , j A i , j 2 ||A||_F=\sqrt{\sum_{i,j}A^2_{i,j}} ∣∣A∣∣F=i,j∑Ai,j2
2.6特殊类型的矩阵和向量
- 对角矩阵(diagonal matrix):只有主对角线上含有非零元素。用 d i a g ( v ) diag(v) diag(v)表示对角元素由向量 v v v中元素给定对角方阵。
- 对称矩阵(symmetric):矩阵是转置和自己相等的矩阵。即 A = A T A=A^T A=AT
- 单位向量(unit vector):具有单位范数的向量,即
∣
∣
x
∣
∣
2
=
1
||x||_2=1
∣∣x∣∣2=1
如果 x T y = 0 x^Ty=0 xTy=0那么向量 x x x和 y y y正交,如果这些向量相互正交且范数为1,则成为标准正交(orthonormal) - 正交矩阵:指行向量和列向量是分别标准正交的方阵,即 A T A = A A T = I A^TA=A^AT=I ATA=AAT=I这意味着 A − 1 = A T A^{-1}=A^T A−1=AT
2.7特征分解
特征分解(eigendecomposition)是使用最广的矩阵分解之一,即将矩阵分解为一组特征向量和特征值。
方阵
A
A
A的特征向量(eigenvector)是指与
A
A
A相乘后相当于对该向量进行缩放的非零向量
v
v
v:
A
v
=
λ
v
Av=\lambda v
Av=λv
其中
λ
\lambda
λ成为这个特征向量的特征值(eigenvalue).
假设矩阵
A
A
A有
n
n
n个线性无关的特征向量
{
V
(
1
)
,
…
,
V
(
n
)
}
\begin{Bmatrix} V^{(1)}, & \dots ,V^{(n)} \end{Bmatrix}
{V(1),…,V(n)},对应着特征向量
{
λ
1
,
…
,
λ
n
}
\begin{Bmatrix} \lambda _1, & \dots ,\lambda _n \end{Bmatrix}
{λ1,…,λn}。我们将特征向量连接成一个矩阵,使得每一列是一个特征向量:
V
=
[
λ
1
,
…
,
λ
n
]
V=\begin{bmatrix} \lambda _1, & \dots ,\lambda _n \end{bmatrix}
V=[λ1,…,λn],同理将特征值连成向量
λ
=
[
λ
1
,
…
,
λ
n
]
T
\lambda=\begin{bmatrix} \lambda _1, & \dots ,\lambda _n \end{bmatrix}^{T}
λ=[λ1,…,λn]T,因此
A
A
A的特征分解可以记作
A
=
V
d
i
a
g
(
λ
)
V
−
1
A=Vdiag(\lambda)V^{-1}
A=Vdiag(λ)V−1
每一个实对称矩阵都可以分解成实特征向量和实特征值:
A
=
Q
Λ
Q
T
A=Q\Lambda Q^T
A=QΛQT其中Q是
A
A
A特征向量组成的正交矩阵,
Λ
\Lambda
Λ是对角矩阵。特征值
Λ
i
,
j
\Lambda _{i,j}
Λi,j对应的特征向量是矩阵
Q
Q
Q的第
i
i
i列,记作
Q
:
,
j
Q_{:,j}
Q:,j.
2.8奇异值分解
奇异值分解(singular value decomposition,.SVD):将矩阵分解为奇异向量(singular value vector)和奇异值(singular value).每一个实数矩阵都有一个奇异值分解,但不一定都有特征分解。奇异值分解将矩阵分解为三个矩阵的乘积:
A
=
U
D
V
T
A=UDV^T
A=UDVT
假设A是
m
×
n
m\times n
m×n的矩阵,
U
U
U则是一个
m
×
m
m\times m
m×m的矩阵,
D
D
D是一个
m
×
n
m\times n
m×n的矩阵,
V
V
V是一个
n
×
n
n\times n
n×n的矩阵。
U
U
U和
V
V
V都定义为正交矩阵,而
D
D
D定义为对角矩阵。
D
D
D对角线上的元素成为矩阵
A
A
A的奇异值,矩阵
U
U
U的列向量成为左奇异向量,矩阵
V
V
V的列向量成为右奇异向量。
2.9 Moore-Penrose伪逆
矩阵
A
A
A的伪逆定义为
A
+
=
lim
a
→
0
(
A
T
A
+
α
I
)
−
1
A
T
A^+=\lim_{a \to 0}(A^TA+\alpha I)^{-1}A^T
A+=a→0lim(ATA+αI)−1AT
计算方法:
A
+
=
V
D
+
U
T
A^+=VD^+U^T
A+=VD+UT其中矩阵
U
,
D
,
V
U,D,V
U,D,V是矩阵
A
A
A奇异值分解后得到的矩阵,对角矩阵
D
D
D的伪逆
D
+
D^+
D+是其非零元素取倒数之后转置得到的。
2.10 迹运算
迹运算返回的是矩阵对角元素的和:
T
r
(
A
)
=
∑
i
A
i
,
j
Tr(A)=\sum_i A_{i,j}
Tr(A)=i∑Ai,j
迹运算提供了另一种描述矩阵
F
r
o
b
e
n
i
u
s
Frobenius
Frobenius范数的方法
∣
∣
A
∣
∣
F
=
T
r
(
A
A
T
)
||A||_F= \sqrt {Tr(AA^T)}
∣∣A∣∣F=Tr(AAT)
2.11 行列式
行列式记作 d e t ( A ) det(A) det(A),将方阵A映射到实数的函数。行列式的值等于矩阵特征值的乘积。行列式的绝对值可以用来衡量矩阵参与矩阵乘法后空间扩大或者缩小了多少。如果行列式是0,那么空间至少沿着某一维完全收缩了使其失去了所有的体积。