深度学习第二章-线性代数笔记
本章主要介绍与深度学习相关的线性代数知识。
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乘积,记为 A⊙B <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矩阵写法[]
⎡⎣⎢⎢⎢⎢⎢10⋮001⋮0⋯ ⋯ ⋱⋯ 00⋮1⎤⎦⎥⎥⎥⎥⎥⎡⎣⎢⎢⎢⎢⎢1336⋮412234⋮86⋯ ⋯ ⋱⋯ 6722⋮88⎤⎦⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢1336⋮412234⋮86⋯ ⋯ ⋱⋯ 6722⋮88⎤⎦⎥⎥⎥⎥⎥(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>的逆记作 A−1 <script type="math/tex" id="MathJax-Element-25">\mathbf{A}^{-1}</script>,其定义为: A−1A=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>范 数:
∥x∥1=∑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):
∥A∥F=∑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>即:A−1=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)),当 λ=−1,v=[−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>可以计算得到上式左侧结果为 [1−1] <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(λ)V−1<script type="math/tex; mode=display" id="MathJax-Element-58">\mathbf{A}=\mathbf{V}diag(\lambda)\mathbf{V}^{-1}</script> ,根据如何理解特征值描述:特征值就是运动的速度
特征向量就是运动的方向
结合上文看,在求解特征值时用到了特征分解。
-
所有特征值都是非负数的矩阵称为半正定(positive semidefinite)
∀x,xTAx≥0 <script type="math/tex" id="MathJax-Element-59">\forall{\mathbf{x}},\mathbf{x}^\mathrm{T}\mathbf{A}\mathbf{x} \ge0</script>
-
所有特征值都是正数的矩阵称为正定(positive definite)
∀x,xTAx≥0 <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>分解为三个矩阵的乘积:
2.9 Moore-Penrose伪逆
由于非方矩阵没有逆矩阵定义。利用2.8节奇异值分解,对矩阵 A <script type="math/tex" id="MathJax-Element-75">\mathbf{A}</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>的欧几里得距离 ∥Ax−y∥2 <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>的解欧几里得距离 ∥x∥2 <script type="math/tex" id="MathJax-Element-86">\Vert{\mathbf{x}}\Vert_2</script>最小。
2.10 迹运算
迹运算返回矩阵对角的和:
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 反射
随时补充。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)