本章主要介绍与深度学习相关的线性代数知识。

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

  • 标量 (scalar) 、向量 (vector)、矩阵 (matrix)
  • 张量 (tensor) :一般地,一个数组中的元素分布在若干维坐标的规则网格中,称之为张量。
  • 转置 (transpose) : 以主对角线(左上到右下)为轴进行镜像操作。将矩阵 A <script type="math/tex" id="MathJax-Element-1">\mathbf{A}</script>转置表示为 AT <script type="math/tex" id="MathJax-Element-2">\mathbf{A}^\mathbf{T}</script>,定义如下:
    (AT)i,j=Aj,i(1)
    <script type="math/tex; mode=display" id="MathJax-Element-3">(\mathbf{A}^\mathbf{T})_{i,j}=\mathbf{A}_{j,i}\tag{1}</script>向量可以看作只有一列的矩阵。
  • 两个矩阵相加指矩阵形状相同,对应位置的元素相加: C=A+B <script type="math/tex" id="MathJax-Element-4">\mathbf{C}=\mathbf{A}+\mathbf{B}</script>,其中 Ci,j=Ai,j+Bi,j <script type="math/tex" id="MathJax-Element-5">C_{i,j}=A_{i,j}+B_{i,j}</script>。
  • 标量和矩阵相乘或相加,指标量与矩阵每个元素相乘。
  • 在深度学习中,允许矩阵和向量相加: C=A+b <script type="math/tex" id="MathJax-Element-6">\mathbf{C}=\mathbf{A}+\mathbf{b}</script>,表示向量 b <script type="math/tex" id="MathJax-Element-7">\mathbf{b}</script>和矩阵 A <script type="math/tex" id="MathJax-Element-8">\mathbf{A}</script>的每一行相加(需要列数相同),这种隐式地复制向量 b <script type="math/tex" id="MathJax-Element-9">\mathbf{b}</script>到很多位置的方式称为广播(broadcasting)。

    import numpy as np
    A = np.array([[1,2,3],[4,5,6]])
    b = [1,1,1]
    C = A+b
    print(C)
    
    [[2 3 4]
     [5 6 7]]
    
    bb = [1,1] 
    print (A + bb)
    
    ValueError: operands could not be broadcast together with shapes (2,3) (2,)

2.2 矩阵和向量相乘

  • 元素标准乘积:矩阵 A <script type="math/tex" id="MathJax-Element-10">\mathbf{A}</script>的形状是 m×n <script type="math/tex" id="MathJax-Element-11">m\times n</script>,矩阵 B <script type="math/tex" id="MathJax-Element-12">\mathbf{B}</script>的形状是 n×p <script type="math/tex" id="MathJax-Element-13">n \times p </script>,那么矩阵 C <script type="math/tex" id="MathJax-Element-14">\mathbf{C}</script>的形状是 m×p <script type="math/tex" id="MathJax-Element-15">m\times p</script> ,矩阵乘法:
    C=AB(2)
    <script type="math/tex; mode=display" id="MathJax-Element-16">\mathbf{C}=\mathbf{A}\mathbf{B}\tag{2}</script>具体地:
    Ci,j=kAi,kBk,j(3)
    <script type="math/tex; mode=display" id="MathJax-Element-17">C_{i,j} = \sum_kA_{i,k}{B}_{k,j}\tag{3}</script>
  • 元素对应乘积(element-wise product)或哈达玛Hadamard乘积,记为 AB <script type="math/tex" id="MathJax-Element-18">\mathbf{A}\odot\mathbf{B}</script>
  • 两个维数相同的向量 x <script type="math/tex" id="MathJax-Element-19">\mathbf{x}</script>和 y <script type="math/tex" id="MathJax-Element-20">\mathbf{y}</script>点积(dot product),可看作矩阵乘积 xTy <script type="math/tex" id="MathJax-Element-21">\mathbf{x}^\mathrm{T}\mathbf{y}</script>。表示对应元素相乘后求和得到标量。

2.3单位矩阵和逆矩阵

  • 单位矩阵(identity matrix):所有沿主对角线的元素都是1,其他位置元素为0,表示为 In <script type="math/tex" id="MathJax-Element-22">\mathbf{I}_n</script>。任意向量和单位矩阵相乘,都不会改变。latex矩阵写法latex矩阵写法[]

    100010   001133641223486   672288=133641223486   672288(4) <script type="math/tex" id="MathJax-Element-23"> \begin{equation} \begin{bmatrix} 1 & 0 & \cdots\ &0\\ 0 & 1 & \cdots\ & 0\\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots\ & 1\\ \end{bmatrix} \begin{bmatrix} 13 & 22 & \cdots\ &67\\ 36 & 34 & \cdots\ & 22\\ \vdots & \vdots & \ddots & \vdots \\ 41 & 86 & \cdots\ & 88\\ \end{bmatrix} =\begin{bmatrix} 13 & 22 & \cdots\ &67\\ 36 & 34 & \cdots\ & 22\\ \vdots & \vdots & \ddots & \vdots \\ 41 & 86 & \cdots\ & 88\\ \end{bmatrix} \end{equation}\tag{4}</script>

  • 矩阵 A <script type="math/tex" id="MathJax-Element-24">\mathbf{A}</script>的逆记作 A1 <script type="math/tex" id="MathJax-Element-25">\mathbf{A}^{-1}</script>,其定义为: A1A=In <script type="math/tex" id="MathJax-Element-26">\mathbf{A}^{-1}\mathbf{A}=\mathbf{I}_n</script>。

2.4 线性相关和生成子空间

2.5范数

  • Latex输入双竖线:一道杠用 |x| 就行,或 \vert,或者左右分别用 \lvert、\rvert,两道杠用 \Vert,或左右用 \lVert、\rVert
  • boldmath 公式加粗斜体但是mathjax不支持? 用\vec加个箭头
  • Lp <script type="math/tex" id="MathJax-Element-27">L^p</script> 范数定义:
    x⃗ p=(i|xi|p)1p(5)
    <script type="math/tex; mode=display" id="MathJax-Element-28">\lVert\vec{x}\rVert_p=\left(\sum_i|x_i|^p\right)^\frac{1}{p}\tag{5}</script>
    • p=2 <script type="math/tex" id="MathJax-Element-29">p=2</script> 时, L2 <script type="math/tex" id="MathJax-Element-30">L^2</script>称为欧几里得范数(Euclidean norm),表示从原点出发到向量 x⃗  <script type="math/tex" id="MathJax-Element-31">\vec{x}</script>的欧几里得距离,通常简化为 x <script type="math/tex" id="MathJax-Element-32">\Vert{x}\Vert</script>。
    • p=1 <script type="math/tex" id="MathJax-Element-33">p=1</script> 时, L1 <script type="math/tex" id="MathJax-Element-34">L^1</script>范 数:
      x1=i|xi|(6)
      <script type="math/tex; mode=display" id="MathJax-Element-35">\Vert{x}\Vert_1=\sum_i|x_i|\tag{6}</script>
    • p= <script type="math/tex" id="MathJax-Element-36">p=\infty </script>,最大范数(max norm),表示最大幅值的元素绝对值:
      x=maxx|xi|(7)
      <script type="math/tex; mode=display" id="MathJax-Element-37">\Vert{x}\Vert_\infty=\underset{x}{\max}|x_i|\tag{7}</script>
    • 深度学习中,衡量矩阵大小用Frobenius范数(Frobenius norm):
      AF=i,jA2i,j(8)
      <script type="math/tex; mode=display" id="MathJax-Element-38">\Vert{\mathbf{A}}\Vert_F=\sqrt{\sum_{i,j}A_{i,j}^2}\tag{8}</script>,类似于向量的 L2 <script type="math/tex" id="MathJax-Element-39">L^2</script>范数。

2.6特殊矩阵和向量

  • 对角矩阵(diagonal matrix)只在主对角线上有非零元素。
  • 单位向量(unit vector)是具有单位犯数(unit norm)的向量:
    x⃗ 2=1(9)
    <script type="math/tex; mode=display" id="MathJax-Element-40">\Vert{\vec{x}}\Vert_2=1\tag{9}</script>,
    如果 x⃗ Ty⃗ =0 <script type="math/tex" id="MathJax-Element-41">\vec{x}^\mathrm{T}\vec{y}=0</script>,则 x⃗  <script type="math/tex" id="MathJax-Element-42">\vec{x}</script>和 y⃗  <script type="math/tex" id="MathJax-Element-43">\vec{y}</script>正交(orthogonal),夹角 90 <script type="math/tex" id="MathJax-Element-44">90^{\circ}</script>。
  • 标准正交(orthonormal):这些向量不仅互相正交,并且范数都为1。
  • 正交矩阵(orthogonal matrix)指行向量和列向量是分别标准正交的方阵:
    ATA=AAT=I(10)
    <script type="math/tex; mode=display" id="MathJax-Element-45">\mathbf{A}^\mathrm{T}\mathbf{A}=\mathbf{A}\mathbf{A}^\mathrm{T}=\mathbf{I}\tag{10}</script>即:
    A1=AT(11)
    <script type="math/tex; mode=display" id="MathJax-Element-46">\mathbf{A}^{-1}=\mathbf{A}^\mathrm{T}\tag{11}</script>

2.7 特征分解

  • 特征向量和特征值查看如何理解特征值,理解了之后具体看计算例子特征值计算
    在这里说一下特征向量(eigenvector) v <script type="math/tex" id="MathJax-Element-47">\mathbf{v}</script>,矩阵 A <script type="math/tex" id="MathJax-Element-48">\mathbf{A}</script>,特征值(标量) λ <script type="math/tex" id="MathJax-Element-49">\lambda</script>。满足:

    Av=λv(11)
    <script type="math/tex; mode=display" id="MathJax-Element-50">\mathbf{A}\mathbf{v}=\lambda\mathbf{v}\tag{11}</script>

    举例: A=[2231] <script type="math/tex" id="MathJax-Element-51">\mathbf{A}= \begin{bmatrix} 2&3\\ 2&1\\ \end{bmatrix}</script>,按特征值计算,解得

    λ=1,4
    <script type="math/tex; mode=display" id="MathJax-Element-52">\lambda = -1,4</script>(具体参考上文第二篇[特征值计算](http://blog.csdn.net/u010182633/article/details/45921929)),当 λ=1v=[11] <script type="math/tex" id="MathJax-Element-53">\lambda=-1,\mathbf{v} =\begin{bmatrix} -1\\ 1\\ \end{bmatrix}</script>,所以形式上:
    [2231][11]=λ[11]
    <script type="math/tex; mode=display" id="MathJax-Element-54"> \begin{bmatrix} 2&3\\ 2&1\\ \end{bmatrix}\begin{bmatrix} -1\\ 1\\ \end{bmatrix}=\lambda\begin{bmatrix} -1\\ 1\\ \end{bmatrix}</script>可以计算得到上式左侧结果为 [11] <script type="math/tex" id="MathJax-Element-55"> \begin{bmatrix} 1\\ -1\\ \end{bmatrix}</script>,和 [11] <script type="math/tex" id="MathJax-Element-56">\begin{bmatrix} -1\\ 1\\ \end{bmatrix}</script>在方向上相同,只是乘了长度**特征值 λ <script type="math/tex" id="MathJax-Element-57">\lambda</script>**

  • 特征分解(eigendecomposition):

    A=Vdiag(λ)V1
    <script type="math/tex; mode=display" id="MathJax-Element-58">\mathbf{A}=\mathbf{V}diag(\lambda)\mathbf{V}^{-1}</script> ,根据如何理解特征值描述:

    特征值就是运动的速度
    特征向量就是运动的方向
    旋转拉伸

    结合上文看,在求解特征值时用到了特征分解。

  • 所有特征值都是非负数的矩阵称为半正定(positive semidefinite)

    x,xTAx0 <script type="math/tex" id="MathJax-Element-59">\forall{\mathbf{x}},\mathbf{x}^\mathrm{T}\mathbf{A}\mathbf{x} \ge0</script>

  • 所有特征值都是正数的矩阵称为正定(positive definite)

    x,xTAx0 <script type="math/tex" id="MathJax-Element-60">\forall{\mathbf{x}},\mathbf{x}^\mathrm{T}\mathbf{A}\mathbf{x} \ge0</script>,且若 xTAx=0 <script type="math/tex" id="MathJax-Element-61">\mathbf{x}^\mathrm{T}\mathbf{A}\mathbf{x} =0</script> , x=0 <script type="math/tex" id="MathJax-Element-62">\mathbf{x}=0</script>

  • 所有特征值都是负数的矩阵称为负定(negative definite)

  • 所有特征值都是非负数的矩阵称为半负定(negative semidefinite)

2.8奇异值分解

与特征分解类似,奇异值分解(singular value decomposition,SVD),将矩阵分解成奇异向量(singular vector)和奇异值(singular value),将 A <script type="math/tex" id="MathJax-Element-63">\mathbf{A}</script>分解为三个矩阵的乘积:

A=UDVT
<script type="math/tex; mode=display" id="MathJax-Element-64">\mathbf{A}=\mathbf{U}\mathbf{D}\mathbf{V}^\mathrm{T}</script>假设 A <script type="math/tex" id="MathJax-Element-65">\mathbf{A}</script> 为 m×n <script type="math/tex" id="MathJax-Element-66">m\times n</script>,那么 U <script type="math/tex" id="MathJax-Element-67">\mathbf{U}</script> 为 m×m <script type="math/tex" id="MathJax-Element-68">m\times m</script>, V <script type="math/tex" id="MathJax-Element-69">\mathbf{V}</script> 为 n×n <script type="math/tex" id="MathJax-Element-70">n\times n</script>。 D <script type="math/tex" id="MathJax-Element-71">\mathbf{D}</script>对角线上的元素称为矩阵 A <script type="math/tex" id="MathJax-Element-72">\mathbf{A}</script>的 奇异值 U <script type="math/tex" id="MathJax-Element-73">\mathbf{U}</script> V <script type="math/tex" id="MathJax-Element-74">\mathbf{V}</script>分别为 左奇异向量,右奇异向量

2.9 Moore-Penrose伪逆

由于非方矩阵没有逆矩阵定义。利用2.8节奇异值分解,对矩阵 A <script type="math/tex" id="MathJax-Element-75">\mathbf{A}</script> 的伪逆:

A+=VD+UT
<script type="math/tex; mode=display" id="MathJax-Element-76">\mathbf{A}^+=\mathbf{V}\mathbf{D}^+\mathbf{U}^\mathrm{T}</script>其中 D+ <script type="math/tex" id="MathJax-Element-77">\mathbf{D}^+</script>是通过 D <script type="math/tex" id="MathJax-Element-78">\mathbf{D}</script>对角矩阵非零元素取倒数之后转置得到。可求:
x=A+y
<script type="math/tex; mode=display" id="MathJax-Element-79">\mathbf{x}=\mathbf{A}^+\mathbf{y}</script>

  • 若矩阵 A <script type="math/tex" id="MathJax-Element-80">\mathbf{A}</script>行数大于列数,一般逆方法没有解,通过伪逆使得 Ax <script type="math/tex" id="MathJax-Element-81">\mathbf{A}\mathbf{x}</script>和 y <script type="math/tex" id="MathJax-Element-82">\mathbf{y}</script>的欧几里得距离 Axy2 <script type="math/tex" id="MathJax-Element-83">\Vert{\mathbf{A}\mathbf{x}-\mathbf{y}}\Vert_2</script>最小。
  • 若矩阵 A <script type="math/tex" id="MathJax-Element-84">\mathbf{A}</script>列数大于行数,可能有多个解,通过 x=A+y <script type="math/tex" id="MathJax-Element-85">\mathbf{x}=\mathbf{A}^+\mathbf{y}</script>的解欧几里得距离 x2 <script type="math/tex" id="MathJax-Element-86">\Vert{\mathbf{x}}\Vert_2</script>最小。

2.10 迹运算

迹运算返回矩阵对角的和:

Tr(A)=iAi,i
<script type="math/tex; mode=display" id="MathJax-Element-87">Tr(\mathbf{A})=\sum_i\mathbf{A}_{i,i}</script>

2.11 行列式

记作 det(A) <script type="math/tex" id="MathJax-Element-88">det(\mathbf{A})</script>,行列式等于矩阵特值的乘积。就是按顺序右下方向元素乘后的和,减去左下方向元素相乘后的和,具体运算查书或者百度。

2.12 实例:主成成分分析(PCA)

主成成分分析(principal components analysis,PCA),有损压缩。
具体原理是减去均值后,根据上述特征向量及特征值的分解,找到信息量最大的某些特征,将其提取,实现了有损压缩。

主成成分分析原理详解,可以结合特征向量和特征值的原理一起看,如2.7节中的几篇特征值和特征向量的解释。

————————————————–

  • SVD支持任意矩阵伪逆
  • 累计贡献率(方差,即信息量) >85%
  • PCA降维、压缩(06年之前)只解决线性,非线性t-SNE(cs231n有介绍,网易云课堂2016年版本 (课时18吧大概)卷积神经网络可视化部分)->流型:非线性方法提取内部结构
  • 人工:霍夫曼编码;自动:线性:PCA;非线性:t-SNE(12年Hinton高维可视化);autoencoder
  • 矩阵的几何意义,实际上是对坐标的缩放切变旋转等:见博客
  • 计算时通常将大矩阵分解成若干个小矩阵,提高计算效率
    • 行列式>1 :放大
    • 行列式=0 降维,不可逆
    • 0<行列式<1 缩小
    • 行列式<0 反射

随时补充。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐