DeepLearning深度学习(花书)读书笔记——线性代数(一)


第一部分 应用数学与机器学习基础

  本部分包含四个章节:线性代数、概率与信息论、数值计算和机器学习基础。在这部分介绍了深度学习所需的重要的基本数学概念。以及机器学习的基本目标,并描述了如何实现这些目标。四个章节层层递进,由浅入深逐步介绍到深度学习技术。
第2章 线性代数

  线性代数作为数学的一个分支,主要是面向连续数学而非离散数学,被广泛应用于科学和工程中。掌握好线性代数对于从事机器学习算法(尤其是深度学习算法)相关工作而言,是非常重要的。
  如果已掌握线性代数相关知识,可以跳过本章。如果未接触或已忘记相关知识,可以通过本章学习与深度学习相关的线性代数知识。但是,本书中只是介绍了与深度学习相关的知识,需要参考其它资料共同学习,从而真正理解并掌握这些知识。另外,本书略去了很多重要的但是对于理解深度学习非必需的知识。

1、标量、向量、矩阵和张量

  学习线性代数,会涉及以下几个数学概念:
  标量:一个标量就是一个单独的数。在介绍标量时,我们会明确它是哪种类型的数,如实数,自然数等。在数学公式中,用小写的斜体字母来表示标量。实际上,标题就是一个数。
  向量:一个向量就是一列数,这些数是有序排列的,通过索引可以获取向量中的单独的数。同样,也会明确向量中的元素是哪种类型的数。在数学公式中,用小写的粗体字母来表示向量,向量中的元素用带脚标的斜体字母表示,如 x i x_i xi。实际上,向量就是纵向排列的一维的数组。
  标准的向量是一纵列的数,当需要明确表示向量中的元素时,其写法如下:
x = [ x 1 x 2 ⋮ x n ] (2.1) \bm{x}= \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix} \tag{2.1} x= x1x2xn (2.1)
  矩阵:矩阵是一个二维数组,其中每一个元素由两个索引所确定。在数学公式中,用大写的粗体字母来表示矩阵,如 A \bm{A} A,矩阵中的元素以带两个脚标的大写斜体字母表示,脚标用逗号隔开,如 A i , j A_{i,j} Ai,j。此外,通过冒号来表示一整行或一整列元素,如 A i , : , A : , j A_{i,:},A_{:,j} Ai,:A:,j
  当需要明确表示向量中的元素时,其写法如下:
A = [ A 1 , 1 A 1 , 2 … A 1 , n A 2 , 1 A 2 , 2 … A 2 , n ⋮ ⋮ ⋱ ⋮ A m , 1 A m , 2 … A m , n ] (2.2) \bm{A}= \begin{bmatrix} A_{1,1} & A_{1,2} & \dots & A_{1,n} \\ A_{2,1} & A_{2,2} & \dots & A_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ A_{m,1} & A_{m,2} & \dots & A_{m,n} \\ \end{bmatrix} \tag{2.2} A= A1,1A2,1Am,1A1,2A2,2Am,2A1,nA2,nAm,n (2.2)
  张量:张量是一个超过二维的数组,元素分布在若干维的规则网格中。在数学公式中,表示方法和矩阵相似又略有不同,如 A \mathbf{A} A。其元素同样用一组逗号分隔的脚标来表示,如 A i , j , k A_{i,j,k} Ai,j,k.

  转置(transpose)是矩阵的重要操作之一,矩阵的转置是以对角线为轴的镜像,这条从左上角到右下角的对角线被称为主对角线。在数学公式中矩阵的转置表示为 A ⊤ \bm{A}^\top A,其定义如下:
( A ⊤ ) i , j = A j , i (2.3) (\bm{A}^\top)_{i,j}=A_{j,i} \tag{2.3} (A)i,j=Aj,i(2.3)
  矩阵转置示例如下,注意非方阵的对角线位置
A = [ A 1 , 1 A 1 , 2 A 2 , 1 A 2 , 2 A 3 , 1 A 3 , 2 ]    ⟹    A ⊤ = [ A 1 , 1 A 2 , 1 A 3 , 1 A 1 , 2 A 2 , 2 A 3 , 2 ] \bm{A}= {\begin{bmatrix} \red{\bcancel{A_{1,1}}} & A_{1,2} \\ A_{2,1} & \red{\bcancel{A_{2,2}}} \\ A_{3,1} & A_{3,2} \end{bmatrix}} \implies \bm{A}^\top= \begin{bmatrix} \red{\bcancel{A_{1,1}}} & A_{2,1} & A_{3,1} \\ A_{1,2} & \red{\bcancel{A_{2,2}}} & A_{3,2} \end{bmatrix} A= A1,1 A2,1A3,1A1,2A2,2 A3,2 A=[A1,1 A1,2A2,1A2,2 A3,1A3,2]
  向量可以看作是只有一列的矩阵,对应的,向量的转置可以看作只有一行的矩阵。因此在文本行的书写中,可以通过将行矩阵进行转置作为标准的列向量来定义,比如: x = [ x 1 , x 2 , x 3 ] ⊤ \bm{x}=[x_1,x_2,x_3]^\top x=[x1,x2,x3]
  标量可以看作是只有一个元素的矩阵,标量的转置等于它本身,如 a = a ⊤ a=a^\top a=a

  矩阵形状一样时,可以对两个矩阵相加,即两个矩阵对应位置的元素相加,比如 C = A + B \bm{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 \bm{D}=a\cdot \bm{B}+c D=aB+c,其中 D i , j = a ⋅ B i , j + c D_{i,j}=a\cdot B_{i,j}+c Di,j=aBi,j+c

  特别的,在深度学习中,我们允许矩阵和向量相加,产生另一个矩阵,如 C = A + b \bm{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 \bm{b} b和矩阵 A \bm{A} A的每一列相加,通过简写方法使我们无需在加法操作前先定义一个将向量 b \bm{b} b复制到每一列而生成的矩阵 B \bm{B} B。这种隐式地复制向量到很多位置的方式称为广播

2、矩阵和向量相乘

  矩阵乘法是矩阵运算中最重要的操作之一。只有当矩阵 A \bm{A} A列数等于矩阵 B \bm{B} B行数时,才可以实现两个矩阵的乘法运算。即 A \bm{A} A的形状是 m × n m\times n m×n,矩阵 B \bm{B} B的形状是 n × p n\times p n×p,其矩阵乘法结果是第三个矩阵 C \bm{C} C,其形状为 m × p m\times p m×p。矩阵乘法数学公式可以用两个或多个并列放置的矩阵来表示,例如:
C = A B (2.4) \bm{C}=\bm{A}\bm{B} \tag{2.4} C=AB(2.4)
  其中,具体的乘法操作定义为:
C i , j = ∑ k A i , k B k , j (2.5) C_{i,j}=\sum_{k}A_{i,k}B_{k,j} \tag{2.5} Ci,j=kAi,kBk,j(2.5)
  从上面定义可知,两个矩阵的标准乘积不是指两个矩阵中对应元素的乘积。对应元素的乘积操作称为Hadamard乘积,它的数学公式为: A ⊙ B \bm{A}\odot\bm{B} AB
  两个相同维数的向量 x \bm{x} x y \bm{y} y点积可以看作是矩阵乘积 x ⊤ y \bm{x}^\top\bm{y} xy。同样,我们可以把矩阵乘积 C = A B \bm{C}=\bm{A}\bm{B} C=AB中计算 C i , j C_{i,j} Ci,j的步骤看作 A \bm{A} A的第 i i i行和 B \bm{B} B的第 j j j列之间的点积。

  矩阵的乘法运算有许多性质,如分配律:
A ( B + C ) = A B + A C (2.6) \bm{A}(\bm{B}+\bm{C})=\bm{A}\bm{B}+\bm{A}\bm{C} \tag{2.6} A(B+C)=AB+AC(2.6)
  结合律:
A ( B C ) = ( A B ) C (2.7) \bm{A}(\bm{B}\bm{C})=(\bm{A}\bm{B})\bm{C} \tag{2.7} A(BC)=(AB)C(2.7)
  矩阵乘积不满足交换律(并不是所有 A B = B A \bm{A}\bm{B}=\bm{B}\bm{A} AB=BA都成立),但两个向量的点积满足交换律:
x ⊤ y = y ⊤ x (2.8) \bm{x}^\top\bm{y}=\bm{y}^\top\bm{x} \tag{2.8} xy=yx(2.8)
  矩阵乘积的转置有简单的形式:
( A B ) ⊤ = B ⊤ A ⊤ (2.9) (\bm{A}\bm{B})^\top=\bm{B}^\top\bm{A}^\top \tag{2.9} (AB)=BA(2.9)
  除了上述矩阵乘法的性质,还有很多有用的性质。

  此外,还可以用矩阵和向量的乘积符号来表达线性方程组,这种形式使得方程组的书写更加紧凑:
A x = b (2.11) \bm{A}\bm{x}=\bm{b} \tag{2.11} Ax=b(2.11)
其中, A ∈ R m × n \bm{A}\in\R^{m\times n} ARm×n是一个已知矩阵, b ∈ R m \bm{b}\in\R^{m} bRm是一个已知向量, x ∈ R n \bm{x}\in\R^{n} xRn是要求解的未知向量。
  矩阵 A \bm{A} A的每一行和 b \bm{b} b中对应元素构成一个约束方程,如:
A 1 , : x = b 1 A 2 , : x = b 2 ⋮ A m , : x = b m \begin{gather} \bm{A_{1,:}x}=b_1 \\ \bm{A_{2,:}x}=b_2 \\ \vdots \\ \bm{A_{m,:}x}=b_m \tag{2.12} \end{gather} A1,:x=b1A2,:x=b2Am,:x=bm(2.12)
  这些方程更详细明确的写法是:
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{gather} A_{1,1}x_1+A_{1,2}x_2+\dots+A_{1,n}x_n=b_1 \\ A_{2,1}x_1+A_{2,2}x_2+\dots+A_{2,n}x_n=b_2 \\ \vdots \\ A_{m,1}x_1+A_{m,2}x_2+\dots+A_{m,n}x_n=b_m \tag{2.16} \end{gather} A1,1x1+A1,2x2++A1,nxn=b1A2,1x1+A2,2x2++A2,nxn=b2Am,1x1+Am,2x2++Am,nxn=bm(2.16)

3、单位矩阵和逆矩阵

  线性代数提供了称为矩阵逆的运算。对于大多数式(2-11): A x = b \bm{A}\bm{x}=\bm{b} Ax=b中的矩阵 A \bm{A} A,我们都能通过矩阵逆解析来求解方程组。
  首先,定义一个单位矩阵:所有沿主对角线的元素都是 1 1 1,其它位置 的所有元素都 0 0 0。例如:
[ 1 0 0 0 1 0 0 0 1 ] \begin{bmatrix} 1&0&0 \\ 0&1&0 \\ 0&0&1 \end{bmatrix} 100010001
  在数学公式中,将保持 n n n维向量不变的单位矩阵记作 I n \bm{I}_{n} In,形式上, I n ∈ R n × n \bm{I}_n\in\R^{n\times n} InRn×n。任意向量和单位矩阵相乘都不会改变,即:
∀ x ∈ R n , I n x = x (2.20) \forall\bm{x}\in\R^{n},\bm{I}_n\bm{x}=\bm{x} \tag{2.20} xRnInx=x(2.20)
  矩阵 A \bm{A} A矩阵逆记作 A - 1 \bm{A}^{\text{-}1} A-1,其定义满足如下条件:
A - 1 A = I n (2.21) \bm{A}^{\text{-}1}\bm{A}=\bm{I}_{n} \tag{2.21} A-1A=In(2.21)
  此时,对于式(2-11)的方程组,可以通过以下步骤求解:
A x = b ⇒ A - 1 A x = A - 1 b ⇒ I n x = A - 1 b ⇒ x = A - 1 b (2.25) \begin{array}{l} &\bm{A}\bm{x}=\bm{b} \\ \rArr&\bm{A}^{\text{-}1}\bm{A}\bm{x}=\bm{A}^{\text{-}1}\bm{b} \\ \rArr&\bm{I}_{n}\bm{x}=\bm{A}^{\text{-}1}\bm{b} \\ \rArr&\bm{x}=\bm{A}^{\text{-}1}\bm{b} \tag{2.25} \end{array} Ax=bA-1Ax=A-1bInx=A-1bx=A-1b(2.25)
  当然,这样求解是否可实现取决于能否找到一个逆矩阵 A - 1 \bm{A}^{\text{-}1} A-1,在接下来的章节中,会讨论逆矩阵 A - 1 \bm{A}^{\text{-}1} A-1的存在条件。
  另外,逆矩阵 A - 1 \bm{A}^{\text{-}1} A-1主要是作为理论工具使用,并不会在大多数软件程序中实际使用。因为逆矩阵 A - 1 \bm{A}^{\text{-}1} A-1在计算机上只能表现出有限的精度,但有效的使用向量 b \bm{b} b的算法通常可以得到更精确的 x \bm{x} x

PS:矩阵求逆的方法

对于2阶矩阵,一般用公式法: A - 1 = A ∗ ∣ A ∣ \bm{A}^{\text{-}1}=\frac {\bm{A}^*}{|\bm{A}|} A-1=AA
对于3阶及以上矩阵,一般用初等变换法
对于抽象矩阵,一般用公式推导证明。

4、线性相关和生成子空间

  在求解式(2-11)表示的方程组 A x = b \bm{A}\bm{x}=\bm{b} Ax=b过程中,如果假设矩阵 A \bm{A} A的逆矩阵 A - 1 \bm{A}^{\text{-}1} A-1存在,那么对于每一个向量 b \bm{b} b的值,式(2-11)都恰好存在一个唯一解。然而在事实上,对于向量 b \bm{b} b的某些值而言,方程组可能无解或存在无穷多个解。
  需要额外说明的是,对于某个向量 b \bm{b} b,方程组有大于一个且小于无穷的有限数量的解的情况是不存在的,因为如果两个向量 x \bm{x} x y \bm{y} y都是某方程组的解,基于下面公式,对于任意实数 α \alpha α,向量 z \bm{z} z都是方程组的解。
z = α x + ( 1 − α ) y (2.26) \bm{z}=\alpha\bm{x}+(1-\alpha)\bm{y} \tag{2.26} z=αx+(1α)y(2.26)
  从物理意义上讲,这个方程组的意义是:在规定每一步走的方向(矩阵 A \bm{A} A的每个列向量作为一个方向)的前提下,每一步走不同的距离(向量 x \bm{x} x的每个元素对应每一步走的距离),然后到达指定的位置(向量 b \bm{b} b。从坐标原点出发到达向量 b \bm{b} b的位置有多少种走法,就有多少个解 x \bm{x} x。该观点可以用以下数学公式表示:
A x = ∑ i x i A : , i (2.27) \bm{Ax}=\sum_{i}x_{i}\bm{A}_{:,i} \tag{2.27} Ax=ixiA:,i(2.27)
  在数学上,上面公式中的运算操作又称之为线性组合。一组向量的线性组合,是指每个向量乘以一个与之对应的标量系数之后的和,其结果是一个新的向量。即:
∑ i c i v ( i ) (2.28) \sum_{i}c_{i}\bm{v}^{(i)} \tag{2.28} iciv(i)(2.28)
  一组向量的生成子空间,是指这组原始向量,经过任意线性组合操作后,所能到达的位置(即生成的新向量)的集合。
  对于式(2-11)所表示的方程组而言,在给定 A \bm{A} A的条件下,不同的 x \bm{x} x得到不同的 b \bm{b} b。这些 b \bm{b} b所组成的集合,就叫做矩阵 A \bm{A} A列向量组的生成子空间。确定该方程组是否有解,相当于确定向量 b \bm{b} b是否在 A \bm{A} A列向量的生成子空间中。这个特殊的生成子空间,又叫作 A \bm{A} A列空间或者 A \bm{A} A值域
  为了使式(2.11)的方程组 A x = b \bm{Ax}=\bm{b} Ax=b对任意向量 b ∈ R m \bm{b}\in\R^{m} bRm都存在解,则整个集合 R m \R^{m} Rm都是由 A \bm{A} A的列空间构成的。因此, A \bm{A} A至少有 m m m列,即 n ⩾ m n\geqslant m nm
  但是,不等式 n ⩾ m n\geqslant m nm只是方程组对每一个向量都有解的必要条件,但不是充分条件,因为有些列向量可能是冗余的。在数学上,这种冗余称为线性相关。如果一组向量中,任意一个向量都不能表示成其它向量的线性组合,那么这组向量称为线性无关。如果某个向量是一组向量中某些向量的线性组合,那么将这个向量加入到这组向量中,并不能增加这组向量的生成子空间。因此,如果一个矩阵的列空间构成了整个集合 R m \R^m Rm,那么该矩阵至少含有一组 m m m个线性无关的列向量,这才是式(2-11)方程组 A x = b \bm{Ax}=\bm{b} Ax=b对任意向量 b ∈ R m \bm{b}\in\R^{m} bRm都存在解的充分必要条件。需要特别说明的是,这个条件中说的 m m m个,是指矩阵的列空间恰好有 m m m个线性无关向量,而不是至少有 m m m个线性无关向量。这是因为不存在一个 m m m维向量的集合具有多于 m m m个彼此线性不相关的向量,但是,一个有多于 m m m个列向量的矩阵(即 n > m n>m n>m时),可能存在不只一组数量为 m m m个的线性无关向量集。(即,对于矩阵 A ∈ R m × n n ⩾ m \bm{A}\in\R^{m\times n}\quad n\geqslant m ARm×nnm来说,如果包含线性无关的列向量,则只能同时包含 m m m个,但是可能包含不只一组。)
  上面的条件只是保证方程组至少有一个解,但如果要矩阵可逆,方程组必须只有唯一解。因此,还要保证矩阵 A \bm{A} A只有一组 m m m个线性无关的列向量。
  综上所述,矩阵 A \bm{A} A必须是一个方阵,即 n = m n=m n=m,并且所有列向量都是线性无关的。另外,一个列向量线性相关的方阵被称为奇异的。如果矩阵 A \bm{A} A不是一个方阵或都是一个奇异的方阵,该方程可能仍然有解,但是不能使用矩阵逆求解,因为这个时候,逆矩阵不存在。
  之前讨论了逆矩阵的左乘,同样,定义逆矩阵的右乘如下:
A A - 1 = I n (2.29) \bm{A}\bm{A}^{\text{-}1}=\bm{I}_{n} \tag{2.29} AA-1=In(2.29)
  对于方阵而言,它的左逆和右逆是相等的。

5、范数

  在机器学习中,我们经常使用被称为范数的函数来衡量向量大小。在数学形式上, L p L^{p} Lp范数定义如下:
∣ ∣ x ∣ ∣ p = ( ∑ i ∣ x i ∣ p ) 1 p (2.30) ||\bm{x}||_p=\big(\sum_i|x_i|^p\big)^{1\over p} \tag{2.30} ∣∣xp=(ixip)p1(2.30)
其中, p ∈ R , p > 1 p\in\R,p>1 pR,p>1
  范数是将向量映射到一个非负值的函数,物理意义上,就是向量 x \bm{x} x表示的点到原点的距离。更严格的说,范数是满足下列性质的任意函数:
∙ f ( x ) = 0 ⇒ x = 0 ∙ f ( x + y ) ⩽ f ( x ) ∗ f ( y ) ( 三角不等式 ) ∙ ∀ α ∈ R , f ( α x ) = ∣ α ∣ f ( x ) (z2.1) \begin{array}{l} \bullet\quad f(\bm{x})=0\rArr\bm{x}=0 \\ \bullet\quad f(\bm{x+y})\leqslant f(\bm{x})*f(\bm{y}) &(三角不等式)\\ \bullet\quad \forall\alpha\in\R,f(\alpha\bm{x})=|\alpha|f(\bm{x}) \end{array} \tag{z2.1} f(x)=0x=0f(x+y)f(x)f(y)αRf(αx)=αf(x)(三角不等式)(z2.1)
  当 p = 2 p=2 p=2时, L 2 L^2 L2范数称为欧几里得范数。它表示向量 x \bm{x} x代表的点到原点的欧氏距离。经常简单表示为 ∣ ∣ x ∣ ∣ ||\bm{x}|| ∣∣x∣∣。平方 L 2 L^2 L2范数因为可以通过点积 x ⊤ x \bm{x}^\top\bm{x} xx计算,也常被用来衡量向量大小。
  在某些机器学习应用中,区分恰好是零的元素和非零但很小的元素是很重要的,这时,一般使用 L 1 L^1 L1范数来衡量向量的大小, L 1 L^1 L1可以简写为:
∣ ∣ x ∣ ∣ 1 = ∑ i ∣ x i ∣ (2.31) ||\bm{x}||_1=\sum_i|x_i| \tag{2.31} ∣∣x1=ixi(2.31)
  有时候需要统计向量中非零元素的数目,由于非零元素的数目不是范数,对向量缩放操作不会改变该向量非零元素的数目,因此, L 1 L^1 L1经常作为表示非零元素数目的替代函数。
  另外一个经常在机器学习中出现的范数是 L ∞ L^\infin L范数,也被称为最大范数。这个范数表示向量中具有最大幅值(绝对值)的元素的绝对值:
∣ ∣ x ∣ ∣ ∞ = max ⁡ i ∣ x i ∣ (2.32) ||\bm{x}||_\infin=\max_i|x_i| \tag{2.32} ∣∣x=imaxxi(2.32)
  有时候也希望衡量矩阵的大小,在深度学习中,常见的做法是使用Forbenius范数,类似于向量的 L 2 L^2 L2范数,即:
∣ ∣ A ∣ ∣ F = ∑ i , j A i , j 2 (2.33) ||\bm{A}||_F=\sqrt{\sum_{i,j}A_{i,j}^2} \tag{2.33} ∣∣AF=i,jAi,j2 (2.33)
  两个向量的点积可以用范数来表示,具体如下:
x ⊤ y = ∣ ∣ x ∣ ∣ 2 ∣ ∣ y ∣ ∣ 2 cos ⁡ θ (2.34) \bm{x}^\top\bm{y}=||\bm{x}||_2||\bm{y}||_2\cos\theta \tag{2.34} xy=∣∣x2∣∣y2cosθ(2.34)
其中, θ \theta θ表示 x \bm{x} x y \bm{y} y之间的夹角。


下一篇文章:DeepLearning深度学习(花书)读书笔记——线性代数(二)

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LittleSlugBoZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值