从零起步学习深度学习
前期准备
前期需理解深度学习所需的基本数学概念。我们从应用数学的一般概念开始,这能使我们定义许多变量的函数,找到这些函数的最高和最低点,并量化信念度。
线性代数
1. 标量、向量、矩阵和张量
标量 (scalar)
一个标量就是一个单独的数,不同于线性代数中大多数概念会涉及到多个数。我们用斜体表示标量。标量通常赋予小写的变量名称。当我们介绍标量时,会明确它们是哪种类型的数。
比如,在定义实数标量时,我们可能会说,S表示一条线的斜率
s
∈
R
.
s ∈ R.
s∈R.
在定义自然数标量时,我们可能会说,n表示元素的数目
n
∈
R
.
n ∈ R.
n∈R.
向量 (vector)
一个向量是一列数。这些数是有序排列的。通过次序中的索引,我们可以确定每个单独的数。通常我们赋予向量粗体的小写变量名称,比如 x 。向量中的元素可以通过带脚标的斜体表示。向量 x 的第一个元素是
x
1
x_1
x1,第二个元素是
x
2
x_2
x2,等等。我们也会注明存储在向量中的元素是什么类型的。如果每个元素都属于 R,并且该向量有 n 个元素,那么该向量属于实数集 R 笛卡尔乘积 n 次,表示为
R
n
R_n
Rn。当我们需要明确表示向量中的元素时,我们会将元素排列成一个方括号包围的纵柱:
x
=
[
X
1
X
2
.
.
.
x
n
]
x = \left[ \begin{matrix} X_1\\ X_2 \\ ... \\ x_n \end{matrix} \right]
x=⎣⎢⎢⎡X1X2...xn⎦⎥⎥⎤
我们可以把向量看作空间中的点,每个元素是不同的坐标轴上的坐标。有时我们需要指定向量中某个集合的元素。在这种情况下,我们定义一个包含这些索引的集合,然后将该集合写在脚标处。比如,指定
x
1
,
x
3
和
x
6
x_1,x_3 和 x_6
x1,x3和x6,我们定义集合 S = {1, 3, 6},然后写作
x
S
x_S
xS。我们用符号 - 表示集合的补集中的索引。比如
x
−
1
x_{-1}
x−1 表示 x 中除 x1 外的所有元素,
x
−
S
x_-{S}
x−S 表示 x 中除
x
1
,
x
3
,
x
6
x_1,x_3,x_6
x1,x3,x6 外所有元素构成的向量。
矩阵 (matrix)
矩阵是二维数组,其中的每一个元素被两个索引而非一个所确定。我们通常会赋予矩阵粗体的大写变量名称,比如
A
A
A。如果一个实数矩阵高度为 m,宽度为 n,那么我们说
A
∈
R
m
×
n
A∈ R_{m×n}
A∈Rm×n。我们在表示矩阵中的元素时,通常使用其名称以不加粗的斜体形式,索引用逗号间隔。比如,
A
1
,
1
A_{1,1}
A1,1 表示 A 左上的元素,
A
m
,
n
A_{m,n}
Am,n 表示 A 右下的元素。我们表示垂直坐标 i 中的所有元素时,用
:
:
: 表示水平坐标。比如,
A
i
,
:
A_{i,:}
Ai,: 表示 A 中垂直坐标 i 上的一横排元素。这也被称为 A 的第 i行 (row)。同样地,
A
:
,
i
A_{:,i}
A:,i 表示 A 的第 i 列 (column)。当我们需要明确表示矩阵中的元素时,我们将它们写在用方括号包围起来的数组中:
[
A
1
,
1
A
1
,
2
A
2
,
1
A
2
,
2
]
\left[ \begin{matrix} A_{1,1} & A_{1,2} \\ A_{2,1} & A_{2,2} \end{matrix} \right]
[A1,1A2,1A1,2A2,2]
张量 (tensor)
在某些情况下,我们会讨论不只两维坐标的数组。一般地,一组数组中的元素分布在若干维坐标的规则网格中,我们将其称之为张量。我们使用这种字体 A 来表示张量 “A’’。张量 A 中坐标为 (i, j, k) 的元素记作 A i , j , k 。 A_{i,j,k}。 Ai,j,k。
转置 (transpose)
是矩阵的重要操作之一。矩阵的转置是以对角线为轴的镜像,这条从左上角到右下角的对角线被称为主对角线 (main diagonal)。我们将矩阵 A 的转置表示为 A⊤,定义如下 ( A ⊤ ) i , j = A j , i . (A^⊤)_{i,j} = A_{j,i} . (A⊤)i,j=Aj,i.
总结
向量可以看作是只有一列的矩阵。对应地,向量的转置可以看作是只有一行的矩阵。有时,我们将向量表示成行矩阵的转置,写在行中,然后使用转置将其变为标准的列向量,比如
x
=
[
x
1
,
x
2
,
x
3
]
⊤
.
x = [x_1, x_2, x_3]^⊤.
x=[x1,x2,x3]⊤.
标量可以看作是只有一个元素的矩阵。因此,标量的转置等于它本身,
A
=
A
⊤
A = A^⊤
A=A⊤只要矩阵的形状一样,我们可以把两个矩阵相加。两个矩阵相加是指对应位置的元素相加,比如
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
i
,
j
=
a
⋅
B
i
,
j
+
c
.
D_{i,j} = a · B_{i,j} + c.
Di,j=a⋅Bi,j+c.在深度学习中,我们也使用一些不那么常规的符号。我们允许矩阵和向量相加,产生另一个矩阵:
C
i
,
j
=
A
i
,
j
+
b
j
C_{i,j} = A_{i,j} + b_j
Ci,j=Ai,j+bj换言之,向量 b 和矩阵 A 的每一行相加。
2. 矩阵和向量相乘
矩阵乘法是矩阵运算中最重要的操作之一。两个矩阵 A 和 B 的矩阵乘积 (matrixproduct) 是第三个矩阵 C。为了使乘法定义良好,矩阵 A 的列数必须和矩阵 B 的行数相等。如果矩阵 A 的形状是
m
×
n
,
m × n,
m×n,矩阵 B 的形状是
n
×
p
n × p
n×p,那么矩阵 C 的形状是
m
×
p
m × p
m×p。矩阵乘积可以作用于两个或多个并在一起的矩阵,例如
C
=
A
B
.
可
以
表
示
为
:
C
i
,
j
=
∑
k
A
i
,
k
B
k
,
j
.
(1)
C = AB.\\ \\ 可以表示为:C_{i,j} = ∑_k A_{i,k}B_{k,j} . \tag{1}
C=AB.可以表示为:Ci,j=k∑Ai,kBk,j.(1)两个相同维数的向量 x 和 y 的点积 (dot product) 可看作是矩阵乘积
x
⊤
y
x^⊤y
x⊤y。我们可以把矩阵乘积
C
=
A
B
C = AB
C=AB 中计算
C
i
,
j
C_{i,j}
Ci,j 的步骤看作是 A 的第 i 行和 B 的第 j 列之间的点积。
矩阵乘积运算有许多有用的性质,从而使矩阵的数学分析更加方便。比如,矩阵乘积服从分配律:
A
(
B
+
C
)
=
A
B
+
A
C
.
(2)
A(B + C) = AB + AC. \tag{2}
A(B+C)=AB+AC.(2)
矩阵乘积也服从结合律:
A
(
B
C
)
=
(
A
B
)
C
.
(3)
A(BC) = (AB)C. \tag{3}
A(BC)=(AB)C.(3)
不同于标量乘积,矩阵乘积并不满足交换律(AB = BA 的情况并非总是满足)。
然而,两个向量的点积 (dot product) 满足交换律:
x
⊤
y
=
y
⊤
x
.
(4)
x^⊤y = y^⊤x. \tag{4}
x⊤y=y⊤x.(4)
矩阵乘积的转置有着简单的形式:
(
A
B
)
⊤
=
B
⊤
A
⊤
.
(5)
(AB)^⊤ = B^⊤A^⊤. \tag{5}
(AB)⊤=B⊤A⊤.(5)
利用向量乘积是标量,标量转置是自身的事实,我们可以证明式(4):
x
⊤
y
=
x
⊤
y
)
⊤
=
y
⊤
x
.
(6)
x⊤y = x⊤y)⊤ = y⊤x. \tag{6}
x⊤y=x⊤y)⊤=y⊤x.(6)
由于重点不是线性代数,我们并不试图展示矩阵乘积的所有重要性质,但应该知道矩阵乘积还有很多有用的性质。
现在我们已经知道了足够多的线性代数符号,可以表达下列线性方程组:
A
x
=
b
(7)
Ax = b \tag{7}
Ax=b(7)
其中
A
∈
R
m
×
n
A ∈ R_{m×n}
A∈Rm×n 是一个已知矩阵,b 是一个已知向量,x 是一个我们要求解的未知向量。向量 x 的每一个元素 xi 都是未知的。矩阵 A 的每一行和 b 中对应的元素构成一个约束。我们可以把式(7)重写为
A
1
,
:
x
=
b
1
A
2
,
:
x
=
b
2
⋅
⋅
⋅
A
m
,
:
x
=
b
m
A_{1,:x} = b_1 \\ A_{2,:x} = b_2 \\ · · · \\ A_{m,:x} = b_m
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
.
A_{1,1}x_1 + A_{1,2}x_2 + · · · A_{1,nxn} = b_1 \\ A_{2,1}x_1 + A_{2,2}x_2 + · · · A_{2,nxn} = b_2 \\ · · · \\ A_{m,1}x_1 + A_{m,2}x_2 + · · · A_{m,nxn} = b_m.
A1,1x1+A1,2x2+⋅⋅⋅A1,nxn=b1A2,1x1+A2,2x2+⋅⋅⋅A2,nxn=b2⋅⋅⋅Am,1x1+Am,2x2+⋅⋅⋅Am,nxn=bm.
矩阵向量乘积符号为这种形式的等式提供了更紧凑的表示。