这一节我们将会讨论向量和矩阵的基础概念,这些概念在机器学习中是非常重要的。
高中中,可能不少同学已经接触过向量的概念,不过我们还是简单的复习一下。
向量在数学中表示一个有方向和大小的量,通常在坐标系用一个箭头表示,箭头的长度表示向量的大小,箭头的方向表示向量的方向。与向量相对应的是标量,标量是只有大小而没有方向的量。
你可以将向量看作是一个有序的数列,这个数列中的每一个元素都是一个标量。
在机器学习中的绝大多数时间,我们将向量看待成一个存储了 d 个数值的列表,而不去担心其具体的几何意义。
对于一个 d 维的向量 v 其形式为:
v=v1v2⋮vd
在机器学习中,我们通常认为向量是一个列向量,即是竖着的向量,而不是横着的。
在高中,我们通常使用 v 或者 vˉ 来表示向量,而在机器学习中,我们通常使用 v (粗体小写) 来表示向量。
向量的长度被定义为几何距离,即每一个维度的平方和的平方根:
∥v∥=v12+v22+⋯+vd2
向量的基础运算包括:
向量的加法是指两个向量的对应元素相加,即:
v+u=v1v2⋮vd+u1u2⋮ud=v1+u1v2+u2⋮vd+ud
向量的减法是指两个向量的对应元素相减,即:
v−u=v1v2⋮vd−u1u2⋮ud=v1−u1v2−u2⋮vd−ud
向量的乘法是一个复杂的系统我们可以将其分为很多种情况。
向量的数乘:标量与向量的乘法是将标量与向量的每一个元素相乘,即:
αv=αv1v2⋮vd=αv1αv2⋮αvd
向量的点乘(Dot Product):又叫内积(inner product)。点乘是指两个向量对应元素相乘再相加,即:
v⋅u=v1v2⋮vd⋅u1u2⋮ud=v1u1+v2u2+⋯+vdud
向量的点乘有一个重要的性质,即:
v⋅u=∥v∥∥u∥cosθ
其中 θ 为两个向量之间的夹角。
在高中,我们通常使用 ⋅ 来表示点乘,而在机器学习中,我们通常使用 vTu 来表示点乘。我们将在后面的章节中详细介绍这个符号的含义。
有些书籍中也使用 ⟨v,u⟩ 来表示两个向量的点乘。
看到转置这个词,你可能会很困惑,不过不用担心,这个概念很简单。
简单来说,转置是将整个向量逆时针旋转 90 度。
对于向量的转置,对于向量来说就是将一个行向量转换为列向量,或者将一个列向量转换为行向量。即:
v=v1v2⋮vd⇒vT=[v1v2⋯vd]
vT=[v1v2⋯vd]⇒vTT=v1v2⋮vd
因此我们有一个非常良好的性质:
v=vTT
即转置的转置等于原向量。
我们通常使用转置来表示向量的点乘,即:
vTu=v⋅u=[v1,v2,⋯,vd]u1u2⋮ud=v1u1+v2u2+⋯+vdud
如果你已经掌握了向量的知识,那么矩阵就是一个非常简单的概念了。
矩阵是很多向量的集合,其表示为:
M=∣v1∣∣v2∣⋯∣vn∣
我们通常使用大写字母来表示矩阵。
矩阵的大小通常表示为 m×n,即有 m 行 n 列。因此我们也可以认为d 维向量是一个 d×1 的矩阵。
方阵是指行数和列数相等的矩阵,即 m=n。
矩阵的转置和向量的转置类似,即将矩阵的行和列互换:
M=v1↓⏐v2↓⏐⋯vn↓⏐⇒MT=–––––––––v1Tv2T⋮vnT⟶⟶⟶
转置会让一个 m×n 的矩阵变为一个 n×m 的矩阵。其中,原本位于 a 行 b 列的元素,会在转置后位于 b 行 a 列。
和向量一样,矩阵的转置也有 M=MTT。
矩阵的加法和减法是指两个矩阵的对应元素相加或相减。因此两个矩阵必须有相同的大小。考虑两个矩阵 A 和 B,其大小均为 m×n,则:
A+B=a1,1a2,1⋮am,1a1,2a2,2⋮am,2⋯⋯⋱⋯a1,na2,n⋮am,n+b1,1b2,1⋮bm,1b1,2b2,2⋮bm,2⋯⋯⋱⋯b1,nb2,n⋮bm,n=a1,1+b1,1a2,1+b2,1⋮am,1+bm,1a1,2+b1,2a2,2+b2,2⋮am,2+bm,2⋯⋯⋱⋯a1,n+b1,na2,n+b2,n⋮am,n+bm,n
减法同理。
矩阵的数乘是指一个标量与矩阵的每一个元素相乘。考虑一个矩阵 A,其大小为 m×n,标量为 α 则:
αA=αa1,1a2,1⋮am,1a1,2a2,2⋮am,2⋯⋯⋱⋯a1,na2,n⋮am,n=αa1,1αa2,1⋮αam,1αa1,2αa2,2⋮αam,2⋯⋯⋱⋯αa1,nαa2,n⋮αam,n
矩阵的乘法是一个比较复杂的运算,其的运算规则被作者称为横平竖直。
考虑两个矩阵 A 和 B,其大小分别为 m×n 和 n×p,则其乘积 C=AB 的大小为 m×p。
矩阵的乘法的规则是:
A=a1,1a2,1⋮am,1a1,2a2,2⋮am,2⋯⋯⋱⋯a1,na2,n⋮am,nB=b1,1b2,1⋮bn,1b1,2b2,2⋮bn,2⋯⋯⋱⋯b1,pb2,p⋮bn,p
A=−−−A1,A2,⋮Am,−−−B=∣B,1∣∣B,2∣⋯⋯⋯∣B,p∣
C=AB=−−−A1,A2,⋮An,−−−∣B,1∣∣B,2∣⋯⋯⋯∣B,n∣=A1,B,1A2,B,1⋮Am,B,1A1,B,2A2,B,2⋮Am,B,2⋯⋯⋱⋯A1,B,pA2,B,p⋮Am,B,p
我们可以改写成:
A=−−−α1α2⋮αm−−−B=∣β1∣∣β2∣⋯∣βp∣
C=AB=−−−α1α2⋮αm−−−∣β1∣∣β2∣⋯∣βp∣=α1β1α2β1⋮αmβ1α1β2α2β2⋮αmβ2⋯⋯⋱⋯α1βpα2βp⋮αmβp
上文描述了内积中的规则,即 m×n 的矩阵和 n×p 的矩阵相乘得到一个 m×p 的矩阵。记作 (m×n)⋅(n×p)→(m×p)。
如果我们将向量看作一个 d×1 的矩阵,则如果想使用和矩阵一致的乘法规则,则需要使得将原来 (1×d)⋅(1×d) 的运算其转化为 (1×d)⋅(d×1),最终会得到一个 1×1 的矩阵,即一个标量。而这个对于第一个乘子,我们就需要使用转置,即 (d×1)T⋅(d×1)=(1×d)⋅(d×1)=(1×1)。这也是为什么我们使用 vTu 来表示向量的点乘。