简介:《DeepLearning深度学习教程》第一章“数学基础”是一份面向深度学习入门者的PDF教程,重点梳理向量、矩阵、张量、导数、特征值、概率分布与统计量等易混淆概念,帮助读者在进入神经网络前补足线性代数、微积分和概率论的关键知识。整套资源仅含1个PDF文件,压缩包大小约3.53MB,便于离线对照学习;目前已有288人学习下载。教程按1.1~1.6节展开,从标量、向量、矩阵到张量的层级关系,依次讲解范数与正定矩阵、导数和偏导数的区别、特征值分解与奇异值、条件概率、链式法则与独立性、常见概率分布,以及期望、方差、协方差和相关系数。各节以对比和举例的方式说明易混概念,并配有矩阵运算、范数计算等示例,尤其适合对数学符号不熟悉的自学者配合深度学习课程同步查阅。掌握这些数学基础,能帮助读者更顺畅地理解后续神经网络的原理与优化过程。1. 这份数学讲义解决什么:卡在“懂了但不会用”的人最需要的十几页第一次翻《DeepLearning 深度学习教程》第一章时,我以为又是一份劝退性质的数学手册;读完才发现,它的重点不是推导公式,而是把初学者绕不过去的那几组钉子户概念——张量与矩阵、特征值与奇异值、概率密度与概率、条件概率与链式法则——挨个拆开讲,对应的是“向量长度”“矩阵能量”“分布选型”这些建模里真正用得到的问题。适合两类人:刚要进入深度学习、又不确定自己数学基础够不够的开发者;以及准备面试笔试、想把核心概念快速过一遍的从业者。十几页的体量,省掉的是自己翻三本书做对照的时间。它的定位不是教科书,是一份易混淆概念急救包。2. 线性代数篇:用一张表和三个例子理清张量、范数与特征值的关系这一章是全书的第一个陡坡。向量和矩阵大多数人能对付,一旦把张量、范数、特征值、正定矩阵放到一起,容易变成各记各的,合不到一条线。读的时候建议不要按顺序死记,先把四个层级的关系立起来,再往下看范数和分解。2.1 标量、向量、矩阵、张量:一条主线串起四个概念标量是单个数值;向量是一组有序排列的数,用粗体小写字母表示;矩阵是一张二维数据表,行可以理解成对象,列可以理解成特征;张量则是坐标超过两维的数组,一个数组中的元素分布在若干维坐标的规则网格里。按原文的说法,标量是0阶张量,向量是1阶张量,矩阵是2阶张量,超过两维统一叫张量。这里有个很直观的比喻:标量好比知道一根棍子的长度,向量还告诉你棍子指向前方还是后方,张量更进一步,告诉你棍子还向上、向下、向左、向右偏转了多少。信息量逐层增加,这就是“阶”的含义。从代数角度看,矩阵是向量的推广,向量是一维的“表格”,矩阵是二维的“表格”,n阶张量就是n维的“表格”;从几何角度看,矩阵和向量都具有不随参照系坐标变换而变化的性质。为什么要强调这一点?因为深度学习里的权重、激活值、梯度,几乎全以张量形式存在。你以为自己在处理“矩阵”,实际上经常是带batch维、通道维、序列维的四维张量,主流的框架接口也统一叫tensor,不叫matrix。原文在讲矩阵乘法时特意提到了爱因斯坦求和约定:矩阵 A 和 B 相乘得到的 C 写作 C_{ij} = Σ_k A_{ik}B_{kj},其中重复出现的下标 k 是哑变量,表示对该下标遍历求和。实际写代码时没有人真去写这个求和号,框架里一行矩阵乘就完成了,但读论文时常常看到这种省略求和符号的写法,知道它代表什么,能省不少困惑。矩阵和向量相乘只是矩阵相乘的一个特殊情况,把向量当成只有一列的矩阵即可。2.2 向量和矩阵的范数:各范数含义与选型意图范数度量的是“大小”,但大小有多种量法。向量的1范数是各元素绝对值之和,直观对应曼哈顿距离;2范数是各元素平方和再开方,对应欧氏距离;正无穷范数是绝对值最大的元素,负无穷范数则是绝对值最小的元素。p范数是对它们的统一推广,当p取1和2时,就退化成上面两种常见特例。矩阵的范数种类更多,这里直接以表格形式把容易混淆的几个放在一起:范数计算方式常见的用途矩阵1范数(列范数)每列绝对值求和后取最大值衡量矩阵对向量的放大上界矩阵无穷范数(行范数)每行绝对值求和后取最大值同上,按行视角F范数全部元素平方和再开根号最常用的矩阵大小度量,可导、易计算核范数所有奇异值求和低秩约束,如矩阵补全L0范数非零元素个数理论上的稀疏度量,不可导L1范数全部元素绝对值之和L0的凸近似,实际稀疏正则化L21范数先求每列的F范数,再对这组数求L1结构化稀疏,让某些特征列整体归零正则化时 L2 对应权重衰减,L1 对应稀疏,L21 对应“整列裁剪”,核范数对应低秩假设。看到某个具体问题和其中一种范数绑定,第一反应不应该是它的公式,而是它想把解的什么结构逼出来:稀疏、平滑、低秩还是整体收缩。这份讲义把每个范数的计算结果都做了演示,照着算一遍就会发现,不同范数算同一组数得到的结果差异很大,选错类型,整个优化目标的意义就变了。注意:矩阵F范数形式上与向量L2范数相似,但一个是矩阵整体度量,一个是向量度量。代码里np.linalg.norm(A, 'fro')和np.linalg.norm(A, 2)返回的不是同一个东西。2.3 特征值、特征向量与奇异值:三者的关系和快速衰减规律特征值分解把一个方阵分解成特征向量组成的矩阵和一个对角线为特征值的对角矩阵。原文有一句值得抄在笔记里的话:特征值表示这个特征到底有多重要,特征向量表示这个特征是什么。特征向量给出矩阵变化的方向,特征值给出这个方向上被拉伸或压缩的倍数,从主要变化到次要变化依次排列。奇异值分解是对特征值分解的推广,它不要求矩阵是方阵。奇异值和特征值的关系,本质上是看 A^T A 的特征值:对 A^T A 求特征值得到右奇异向量,对 A A^T 求特征值得到左奇异向量,奇异值是 A^T A 特征值的算术平方根,也是 A A^T 特征值的算术平方根。一句话记住两者的分界:方阵可以谈特征值,任意矩阵都谈奇异值。实际使用中,最值得记住的是奇异值的衰减现象。很多情形下,前10%甚至前1%的奇异值之和,就占了全部奇异值之和的99%以上。这意味着矩阵的信息高度集中在前几个主要方向上。做PCA、图像压缩、降噪,本质都是在利用这个长尾特性:把后面那些占比极小的奇异值直接置零,用前k个方向近似描述整个矩阵。常见做法是设定一个能量阈值,比如保留90%的能量,然后反推需要多少个奇异值,这样就能把矩阵的有效秩给估出来。2.4 正定矩阵:五个等价条件与一个手算例子判断一个矩阵是否正定,并不只有“特征值全为正”这一条路。原文列出的判定条件包括:顺序主子式全大于0;存在可逆矩阵P使该矩阵等于 P^T P;正惯性指数等于n;合同于单位矩阵;特征值全为正。这些条件在数学上等价,工程上按情况选最省事的一个。拿一个二阶矩阵手算最直观。设对称矩阵 [[2, 1], [1, 2]],两个顺序主子式分别是2 和行列式 2×2-1×1=3,都大于0,因此正定。再看特征值,解 |A-λI|=0 得到两个特征值3和1,都为正,与顺序主子式的结果一致。这类手算例子在调试协方差矩阵、二次型函数时非常有用。实际代码里判断正定,我一般直接用 Cholesky 分解是否报错来判定,因为正定矩阵存在唯一的Cholesky分解,能分解成功就是正定,报错就说明矩阵至少半正定或不定。这种方法比硬求特征值更快,也省去设置判断阈值的麻烦。高斯分布的协方差矩阵必须对称正定,很多优化问题也要求Hessian矩阵正定才能保证是局部极小,这些场景下会频繁用到上面的判定。3. 微积分与概率基础:从偏导数到条件概率,把公式变直觉第一章后面半段的话题跨度很大,从导数直接跳到随机变量和条件概率。很多人在这里第一次卡住,不是因为算不出来,而是不知道这些概念之间怎么衔接。偏导是反向传播的直接工具,概率则是理解损失函数、噪声假设和贝叶斯方法的底层语言,两件事讲的是同一个诉求:在不确定性里找到变化规律。3.1 导数与偏导数:从一条切线到曲面上的无数条切线导数的定义是在自变量变化趋于无穷小时,函数值变化与自变量变化的比值。几何意义是曲线上某一点切线的斜率,物理意义是瞬时变化率。平均速度 v = Δs / Δt,当时间间隔趋向于0,平均速度就变成了瞬时速度,这就是导数。一元函数里只有一个自变量的变化方向,所以不存在偏导数的概念。到了多元函数,曲面上任意一点可以有无数条切线,偏导数只取其中沿坐标轴正方向的那一条。比如 z = x^2 + 3xy + y^2,对x求偏导时把y看成常数,得到 2x + 3y;对y求偏导时把x看成常数,得到 3x + 2y。求解时就是“对一个变量求导,其他变量按常数处理”,这个操作规则简单,真正容易错的是几何直觉:偏导数是曲面与坐标平面交线在某点处切线的斜率,而不是曲面本身的斜率。关于“导数和偏导数有没有本质区别”这个问题,严格说两者的定义都是变化率的极限,但偏导数必须声明是沿哪个自变量的方向。一元函数导数是斜率,多元函数偏导是沿坐标轴方向的变化率,再往外还有方向导数和梯度。如果忽略这个前提,后面看反向传播和梯度下降就会觉得处处含糊——反向传播里对每个权重求的正是偏导,而梯度则是所有这些偏导拼成的向量。3.2 条件概率、联合概率与边缘概率:三个公式的区别与经典面试题联合概率表示多个条件同时成立的概率,比如 P(A, B);边缘概率只关心单个事件,比如 P(A),实际计算时把联合分布中另一个变量“边缘化”掉;条件概率表示在B发生的条件下A发生的概率,公式是 P(A|B) = P(A, B) / P(B)。三者可以互相换算,但方向不同:联合分布可以推出边缘分布,只知道边缘分布推不出联合分布。原文里有一道面试常考的题:一对夫妻有两个小孩,已知其中一个是女孩,问另一个也是女孩的概率。用穷举法,把样本空间按长幼顺序列出来,是女女、男女、女男、男男四种,各占1/4。已知至少一个是女孩,排除男男后,剩下三种情况等可能,符合“另一个也是女孩”的只有女女,所以概率是1/3。很多人会答成1/2,原因是把“其中一个”理解成了“特定的某一个”。如果题目改成“已知老大是女孩,问老二是女孩的概率”,那才是1/2。一字之差,样本空间完全不同。链式法则是条件概率定义的直接推论:P(A, B, C) = P(A) P(B|A) P(C|A, B),任何多维随机变量的联合概率分布都可以分解成只有单个变量的条件概率乘积。这条公式在概率图模型里是贝叶斯网络做推断的基础,也是朴素贝叶斯做分类的出发点。注意它和微积分里的求导链式法则名称相同、内容无关,这个坑后面避坑篇还会再提。3.3 独立性与条件独立性:为什么朴素贝叶斯这么“朴素”也能用两个随机变量独立时,联合概率可以写成两个概率的乘积,P(A, B) = P(A) P(B),这是一个非常好的数学性质。可惜无条件独立在真实数据里十分稀少,大部分事件之间都互相影响。这时就要引入条件独立性:给定C的情况下,A和B条件独立,当且仅当 A 和 B 的关系只通过 C 产生,而不是 A、B 直接关联。原文用一个天气例子讲透了这件事:今天下雨、今天地面湿、明天下雨这三个事件中,今天下雨对“今天地面湿”和“明天下雨”都有影响,但在已知今天下雨的前提下,今天地面湿不湿对明天是否下雨没有任何额外信息。也就是说,明天下雨和今天地面湿在给定今天下雨的条件下条件独立。这一点在工程上的典型应用就是朴素贝叶斯分类器:判断邮件是否为垃圾邮件时,假设单词x出现在邮件中的概率条件独立于单词y。这个假设明显不是真实情况——有些词几乎总是同时出现——但它让计算速度极快,而且对最终判别结果的影响并不大,算是条件独立性“明知不对但好用”的代表。3.4 变量与随机变量的区别:一个容易被一句话带过的考点把这节内容单独提出来,是因为它太容易被扫读漏掉。随机变量表示随机现象中各种结果的实值函数,比如某段时间公交站等车的人数、电话交换台收到的呼叫次数,都是随机变量的实例。变量与随机变量的区别可以这样记:当变量取某个值的概率不是1时,变量就变成了随机变量;当随机变量取某个值的概率为1时,它就退化为普通变量。举例来说,如果变量x取100的概率是1,那它就是确定的,除非有进一步运算否则不会变化;如果x取50的概率是0.5、取100的概率也是0.5,那它就是会随条件变化的随机变量。这个区分之所以重要,是因为后面所有概率分布的定义都建立在随机变量之上,而初学者常把“随机”理解成“会变化”,忽略了它本质上是“取值带概率”的数学对象。4. 概率分布篇:从伯努利到经验分布,六个分布的适用场景概率分布是第一章里信息密度最大的一节,六种分布排在一起,初学者很容易背了名字忘了场景。读这一节时不要按公式逐行背,先分清楚离散和连续两条线,再记住每个分布最核心的一个使用场景。4.1 离散型分布:Bernoulli 与 MultinoulliBernoulli分布是单个二值随机变量的分布,单参数 φ 控制随机变量等于1的概率,取值只有0和1。它的期望是 φ,方差是 φ(1-φ)。二分类任务中样本标签的生成假设就是它,交叉熵损失也和这种分布直接挂钩。Multinoulli分布又叫范畴分布,是单个取k个值随机变量的分布,用向量参数化,每个分量表示第i个状态的概率,所有分量求和为1。它是多分类问题的分布假设,softmax输出的正是这种分布。理解这两者的工程价值在于:模型的输出层选择什么分布,基本决定了损失函数怎么写。二分类用sigmoid加交叉熵,多分类用softmax加交叉熵,背后都是这两类分布。4.2 连续型分布:高斯、指数、拉普拉斯高斯分布也叫正态分布,由均值 μ 和方差 σ² 两个参数控制。μ 给出中心峰值的位置,σ² 控制峰的宽度。正态分布里 ±1σ、±2σ、±3σ 范围内的概率分别是68.3%、95.5%、99.73%,这三个数最好记住,做异常检测时经常拿它们当阈值。原文回答了“何时采用正态分布”这个问题:缺乏实数上分布的先验知识、不知如何选择时,默认选正态分布总是不会错的。理由有两条:一是中心极限定理表明很多独立随机变量的叠加近似服从正态分布,现实中的复杂系统经常可以被建模成正态噪声;二是正态分布是具有相同方差的所有概率分布中不确定性最大的分布,换句话说,选它是对模型加入先验知识最少的选择。听到“默认选正态”别觉得是偷懒,它本质上是一种最大限度保留不确定性的保守建模策略。指数分布用来描述事件发生的时间间隔,在0点处取边界,负半轴的概率为0。它和无记忆性紧密绑定,适合建模“已经等了一段时间后还需再等多久”这类场景。拉普拉斯分布与高斯分布类似,但它允许在任意一点处设置概率质量的峰值,形态上是双指数,尾部比高斯更厚。工程上最有价值的一个对应关系是:L1正则化等价于给参数施加拉普拉斯先验,L2正则化等价于施加高斯先验。看到权重衰减,可以反向理解成对参数分布做了某种假设。4.3 Dirac分布与经验分布:训练集本身就是一个分布Dirac分布把所有概率质量都集中在一个点上,对应的狄拉克δ函数也叫单位脉冲函数。它的作用是把某个点的概率密度变成无穷大、同时保证积分结果仍为1,常用于表示一个固定值。单独看它似乎很极端,但它是经验分布的组成部分。经验分布是把给定的 m 个观测点每个都赋予 1/m 的概率质量,m个点就是数据集本身。当你在训练集上训练模型时,可以认为是从这个训练集得到的经验分布中采样。这样一来,“训练集”就从一组静态文件变成了一个概率分布对象,数据增强、重采样、类别平衡这些操作,本质上都是在修改这个经验分布,让它更接近真实分布。这个视角对理解过拟合也有帮助:模型拟合得太好,往往就是记住了经验分布里的每一个样本点,包括噪声。4.4 常用分布速查与选择顺序分布核心参数取值典型场景Bernoullip{0, 1}二分类标签、伯努利试验Multinoulli概率向量k个类别多分类、softmax输出高斯μ, σ²全体实数回归误差、初始化、默认先验拉普拉斯μ, b全体实数L1正则化、稀疏建模指数λ[0, +∞)事件间隔、生存时间Dirac / 经验分布数据点任意训练集采样来源选分布时走一遍这个流程基本不会错:先看目标变量是离散还是连续;离散二值选Bernoulli,离散多类选Multinoulli;连续有界或厚尾考虑拉普拉斯,连续非负考虑指数;毫无头绪就先选高斯,最后用数据分布和经验分布做对照检查。5. 避坑篇:五个高频翻车点的现象、原因与解决这一章单独拎出来写,是因为这份讲义里大量内容是“概念辨析”,而这种内容恰恰最容易产生假理解:每个词都见过,合在一起做题就错。下面五条是初学者最常踩的坑,每条都按现象、原因、解决三步拆开。5.1 线性代数里的两个惯性错误坑一:L1范数和L2范数总是记混。现象是写正则化项时把L1的公式记成平方和开根号,或者提到稀疏就直接写L2。原因在于两者都有数字下标,加上平时到处见欧氏距离的平方形式,肌肉记忆比概念记忆更顽固。解决方法是记两个距离名词:L1对应曼哈顿距离,L2对应欧氏距离。想不起来时画个坐标系,从(0,0)到(1,1),走折线是L1,走直线是L2,几何图形一出来就不会混。坑二:把特征值分解和奇异值分解当成同一种操作。现象是对一个非方阵直接写特征值分解,或者以为SVD就是解 det(A-λI)=0。原因是很多资料在介绍SVD时直接说“广义特征值分解”,初学者就真的当成一回事。实际上特征值分解只对方阵定义,SVD对任意 m×n 矩阵都成立;奇异值是 A^T A 特征值的算术平方根,不是特征值本身。哪怕只记得一条——“方阵才谈特征值,任意矩阵都谈奇异值”——就能避开大部分问题。5.2 概率论里的三个高频翻车点坑三:看到概率密度函数值大于1,以为公式写错了。现象是计算 N(0, 0.01) 在0处的密度值得到约3.99,有人立刻觉得概率大于1不合理。原因是把PDF的值当成了概率。PDF是密度,不是概率;落在某个微小区域 dx 内的概率约等于 p(x)dx,需要积分才有真正概率。中心密度可以远大于1,但曲线下的总面积始终等于1。这个理解不到位,后面看最大似然估计时也会被类似问题绊住。坑四:把概率论的链式法则和微积分的链式法则混成一个概念。现象是看完反向传播的复合函数求导链式法则,翻到条件概率一节又出现“链式法则”,以为是同一个东西。原因很简单,两个数学分支共用了同一个英文词,翻译过来又都是“链式法则”。概率里的链式法则是联合概率分解成条件概率的乘积,比如 P(A,B,C)=P(A)P(B|A)P(C|A,B);微积分里的链式法则是复合函数求导的乘法规则。两者没有任何推导关系,建议在笔记里分开记,给其中一个标注“条件概率版”,给另一个标注“求导版”。坑五:两个孩子的问题,已知一个是女孩,另一个也是女孩,答成1/2。现象是觉得两个孩子性别互相独立,一个已知是女孩,另一个男女各半,直觉上应该是1/2。原因在于题目里“已知一个是女孩”是存在性条件,没有指明是老大还是老二,问题空间比直觉要窄。解决方法是先列四元样本空间:女女、男女、女男、男男,各占1/4,已知条件排除男男,剩下三种情况中只有女女满足,所以是1/3。如果题目改成“已知老大是女孩”,那才是1/2。这类题考察的就是是否愿意把样本空间列完整,而不是依靠直觉。6. 把公式变直觉:两个Python脚本与一套自查清单数学概念光读不验,永远隔一层。第一章里那些结论,大部分都可以用十几行代码亲手验证。下面两个脚本建议按顺序跑一遍,能解决“看书全会、合书全忘”的问题。6.1 用奇异值能量占比看矩阵长尾import numpy as np # 生成一份 m 行 n 列的特征矩阵,模拟真实数据形态 m, n = 100, 50 A = np.random.randn(m, n) # 只计算奇异值,不取 U 和 V,svdvals 就是奇异值向量 s = np.linalg.svd(A, compute_uv=False) # 奇异值平方代表能量,计算前k个奇异值的累积能量占比 cum = np.cumsum(s**2) / np.sum(s**2) print("前10个奇异值能量占比:", cum[9])逻辑说明:奇异值本身反映该方向上的缩放幅度,奇异值平方近似看成矩阵在该方向上的能量,累积占比曲线越陡峭,说明信息越集中。把这里的 A 换成你自己的数据矩阵、图片矩阵或核矩阵,就能直观感受不同数据的“有效秩”差异。参数上,m 和 n 控制矩阵尺寸,compute_uv=False表示只返回奇异值;索引9对应前10个元素,因为数组下标从0开始。6.2 用采样验证高斯分布的经验法则import numpy as np rng = np.random.default_rng(42) # 固定随机种子,保证任何人运行结果一致 x = rng.standard_normal(100_000) # 采样10万个标准正态随机数 # 用均值函数统计落在各区间内的样本比例 p1 = np.mean(np.abs(x) < 1) # ±1σ 区间 p2 = np.mean(np.abs(x) < 2) # ±2σ 区间 p3 = np.mean(np.abs(x) < 3) # ±3σ 区间 print(f"±1σ: {p1:.4f} 理论68.3%") print(f"±2σ: {p2:.4f} 理论95.5%") print(f"±3σ: {p3:.4f} 理论99.7%")逻辑说明:大数定律保证样本比例会收敛到真实概率,采样量越大越贴近理论值。standard_normal(100_000)从标准正态分布里抽取10万个样本,np.mean对布尔数组求均值,等价于统计出满足条件的样本占比。参数上,随机种子42只是一个约定值,换成其他整数不影响结论,只会改变具体样本。跑完这两个脚本,建议把“样本量”“有效秩”“分布覆盖”这几个词挂在嘴边。以后再看到任何公式,都先过一遍这套自查清单:符号的定义域是什么;每个字母对应模型里的哪个变量;条件是否满足,比如是否要求方阵或正定;能不能用10行代码验证。这份讲义里的每节内容几乎都能找到对应的验证路径:正定矩阵手算特征值,条件概率穷举样本空间,正态分布采样验证经验法则。那次被面试官用“特征值和奇异值什么关系”问住之后,我每次拿到这类讲义,都强制自己先写完验证脚本再往下一页翻。这本讲义的每节也值得这样对待,希望这个习惯帮到你。本文还有配套的精品资源,点击获取
简介:《DeepLearning深度学习教程》第一章“数学基础”是一份面向深度学习入门者的PDF教程,重点梳理向量、矩阵、张量、导数、特征值、概率分布与统计量等易混淆概念,帮助读者在进入神经网络前补足线性代数、微积分和概率论的关键知识。整套资源仅含1个PDF文件,压缩包大小约3.53MB,便于离线对照学习;目前已有288人学习下载。教程按1.1~1.6节展开,从标量、向量、矩阵到张量的层级关系,依次讲解范数与正定矩阵、导数和偏导数的区别、特征值分解与奇异值、条件概率、链式法则与独立性、常见概率分布,以及期望、方差、协方差和相关系数。各节以对比和举例的方式说明易混概念,并配有矩阵运算、范数计算等示例,尤其适合对数学符号不熟悉的自学者配合深度学习课程同步查阅。掌握这些数学基础,能帮助读者更顺畅地理解后续神经网络的原理与优化过程。1. 这份数学讲义解决什么:卡在“懂了但不会用”的人最需要的十几页第一次翻《DeepLearning 深度学习教程》第一章时,我以为又是一份劝退性质的数学手册;读完才发现,它的重点不是推导公式,而是把初学者绕不过去的那几组钉子户概念——张量与矩阵、特征值与奇异值、概率密度与概率、条件概率与链式法则——挨个拆开讲,对应的是“向量长度”“矩阵能量”“分布选型”这些建模里真正用得到的问题。适合两类人:刚要进入深度学习、又不确定自己数学基础够不够的开发者;以及准备面试笔试、想把核心概念快速过一遍的从业者。十几页的体量,省掉的是自己翻三本书做对照的时间。它的定位不是教科书,是一份易混淆概念急救包。2. 线性代数篇:用一张表和三个例子理清张量、范数与特征值的关系这一章是全书的第一个陡坡。向量和矩阵大多数人能对付,一旦把张量、范数、特征值、正定矩阵放到一起,容易变成各记各的,合不到一条线。读的时候建议不要按顺序死记,先把四个层级的关系立起来,再往下看范数和分解。2.1 标量、向量、矩阵、张量:一条主线串起四个概念标量是单个数值;向量是一组有序排列的数,用粗体小写字母表示;矩阵是一张二维数据表,行可以理解成对象,列可以理解成特征;张量则是坐标超过两维的数组,一个数组中的元素分布在若干维坐标的规则网格里。按原文的说法,标量是0阶张量,向量是1阶张量,矩阵是2阶张量,超过两维统一叫张量。这里有个很直观的比喻:标量好比知道一根棍子的长度,向量还告诉你棍子指向前方还是后方,张量更进一步,告诉你棍子还向上、向下、向左、向右偏转了多少。信息量逐层增加,这就是“阶”的含义。从代数角度看,矩阵是向量的推广,向量是一维的“表格”,矩阵是二维的“表格”,n阶张量就是n维的“表格”;从几何角度看,矩阵和向量都具有不随参照系坐标变换而变化的性质。为什么要强调这一点?因为深度学习里的权重、激活值、梯度,几乎全以张量形式存在。你以为自己在处理“矩阵”,实际上经常是带batch维、通道维、序列维的四维张量,主流的框架接口也统一叫tensor,不叫matrix。原文在讲矩阵乘法时特意提到了爱因斯坦求和约定:矩阵 A 和 B 相乘得到的 C 写作 C_{ij} = Σ_k A_{ik}B_{kj},其中重复出现的下标 k 是哑变量,表示对该下标遍历求和。实际写代码时没有人真去写这个求和号,框架里一行矩阵乘就完成了,但读论文时常常看到这种省略求和符号的写法,知道它代表什么,能省不少困惑。矩阵和向量相乘只是矩阵相乘的一个特殊情况,把向量当成只有一列的矩阵即可。2.2 向量和矩阵的范数:各范数含义与选型意图范数度量的是“大小”,但大小有多种量法。向量的1范数是各元素绝对值之和,直观对应曼哈顿距离;2范数是各元素平方和再开方,对应欧氏距离;正无穷范数是绝对值最大的元素,负无穷范数则是绝对值最小的元素。p范数是对它们的统一推广,当p取1和2时,就退化成上面两种常见特例。矩阵的范数种类更多,这里直接以表格形式把容易混淆的几个放在一起:范数计算方式常见的用途矩阵1范数(列范数)每列绝对值求和后取最大值衡量矩阵对向量的放大上界矩阵无穷范数(行范数)每行绝对值求和后取最大值同上,按行视角F范数全部元素平方和再开根号最常用的矩阵大小度量,可导、易计算核范数所有奇异值求和低秩约束,如矩阵补全L0范数非零元素个数理论上的稀疏度量,不可导L1范数全部元素绝对值之和L0的凸近似,实际稀疏正则化L21范数先求每列的F范数,再对这组数求L1结构化稀疏,让某些特征列整体归零正则化时 L2 对应权重衰减,L1 对应稀疏,L21 对应“整列裁剪”,核范数对应低秩假设。看到某个具体问题和其中一种范数绑定,第一反应不应该是它的公式,而是它想把解的什么结构逼出来:稀疏、平滑、低秩还是整体收缩。这份讲义把每个范数的计算结果都做了演示,照着算一遍就会发现,不同范数算同一组数得到的结果差异很大,选错类型,整个优化目标的意义就变了。注意:矩阵F范数形式上与向量L2范数相似,但一个是矩阵整体度量,一个是向量度量。代码里np.linalg.norm(A, 'fro')和np.linalg.norm(A, 2)返回的不是同一个东西。2.3 特征值、特征向量与奇异值:三者的关系和快速衰减规律特征值分解把一个方阵分解成特征向量组成的矩阵和一个对角线为特征值的对角矩阵。原文有一句值得抄在笔记里的话:特征值表示这个特征到底有多重要,特征向量表示这个特征是什么。特征向量给出矩阵变化的方向,特征值给出这个方向上被拉伸或压缩的倍数,从主要变化到次要变化依次排列。奇异值分解是对特征值分解的推广,它不要求矩阵是方阵。奇异值和特征值的关系,本质上是看 A^T A 的特征值:对 A^T A 求特征值得到右奇异向量,对 A A^T 求特征值得到左奇异向量,奇异值是 A^T A 特征值的算术平方根,也是 A A^T 特征值的算术平方根。一句话记住两者的分界:方阵可以谈特征值,任意矩阵都谈奇异值。实际使用中,最值得记住的是奇异值的衰减现象。很多情形下,前10%甚至前1%的奇异值之和,就占了全部奇异值之和的99%以上。这意味着矩阵的信息高度集中在前几个主要方向上。做PCA、图像压缩、降噪,本质都是在利用这个长尾特性:把后面那些占比极小的奇异值直接置零,用前k个方向近似描述整个矩阵。常见做法是设定一个能量阈值,比如保留90%的能量,然后反推需要多少个奇异值,这样就能把矩阵的有效秩给估出来。2.4 正定矩阵:五个等价条件与一个手算例子判断一个矩阵是否正定,并不只有“特征值全为正”这一条路。原文列出的判定条件包括:顺序主子式全大于0;存在可逆矩阵P使该矩阵等于 P^T P;正惯性指数等于n;合同于单位矩阵;特征值全为正。这些条件在数学上等价,工程上按情况选最省事的一个。拿一个二阶矩阵手算最直观。设对称矩阵 [[2, 1], [1, 2]],两个顺序主子式分别是2 和行列式 2×2-1×1=3,都大于0,因此正定。再看特征值,解 |A-λI|=0 得到两个特征值3和1,都为正,与顺序主子式的结果一致。这类手算例子在调试协方差矩阵、二次型函数时非常有用。实际代码里判断正定,我一般直接用 Cholesky 分解是否报错来判定,因为正定矩阵存在唯一的Cholesky分解,能分解成功就是正定,报错就说明矩阵至少半正定或不定。这种方法比硬求特征值更快,也省去设置判断阈值的麻烦。高斯分布的协方差矩阵必须对称正定,很多优化问题也要求Hessian矩阵正定才能保证是局部极小,这些场景下会频繁用到上面的判定。3. 微积分与概率基础:从偏导数到条件概率,把公式变直觉第一章后面半段的话题跨度很大,从导数直接跳到随机变量和条件概率。很多人在这里第一次卡住,不是因为算不出来,而是不知道这些概念之间怎么衔接。偏导是反向传播的直接工具,概率则是理解损失函数、噪声假设和贝叶斯方法的底层语言,两件事讲的是同一个诉求:在不确定性里找到变化规律。3.1 导数与偏导数:从一条切线到曲面上的无数条切线导数的定义是在自变量变化趋于无穷小时,函数值变化与自变量变化的比值。几何意义是曲线上某一点切线的斜率,物理意义是瞬时变化率。平均速度 v = Δs / Δt,当时间间隔趋向于0,平均速度就变成了瞬时速度,这就是导数。一元函数里只有一个自变量的变化方向,所以不存在偏导数的概念。到了多元函数,曲面上任意一点可以有无数条切线,偏导数只取其中沿坐标轴正方向的那一条。比如 z = x^2 + 3xy + y^2,对x求偏导时把y看成常数,得到 2x + 3y;对y求偏导时把x看成常数,得到 3x + 2y。求解时就是“对一个变量求导,其他变量按常数处理”,这个操作规则简单,真正容易错的是几何直觉:偏导数是曲面与坐标平面交线在某点处切线的斜率,而不是曲面本身的斜率。关于“导数和偏导数有没有本质区别”这个问题,严格说两者的定义都是变化率的极限,但偏导数必须声明是沿哪个自变量的方向。一元函数导数是斜率,多元函数偏导是沿坐标轴方向的变化率,再往外还有方向导数和梯度。如果忽略这个前提,后面看反向传播和梯度下降就会觉得处处含糊——反向传播里对每个权重求的正是偏导,而梯度则是所有这些偏导拼成的向量。3.2 条件概率、联合概率与边缘概率:三个公式的区别与经典面试题联合概率表示多个条件同时成立的概率,比如 P(A, B);边缘概率只关心单个事件,比如 P(A),实际计算时把联合分布中另一个变量“边缘化”掉;条件概率表示在B发生的条件下A发生的概率,公式是 P(A|B) = P(A, B) / P(B)。三者可以互相换算,但方向不同:联合分布可以推出边缘分布,只知道边缘分布推不出联合分布。原文里有一道面试常考的题:一对夫妻有两个小孩,已知其中一个是女孩,问另一个也是女孩的概率。用穷举法,把样本空间按长幼顺序列出来,是女女、男女、女男、男男四种,各占1/4。已知至少一个是女孩,排除男男后,剩下三种情况等可能,符合“另一个也是女孩”的只有女女,所以概率是1/3。很多人会答成1/2,原因是把“其中一个”理解成了“特定的某一个”。如果题目改成“已知老大是女孩,问老二是女孩的概率”,那才是1/2。一字之差,样本空间完全不同。链式法则是条件概率定义的直接推论:P(A, B, C) = P(A) P(B|A) P(C|A, B),任何多维随机变量的联合概率分布都可以分解成只有单个变量的条件概率乘积。这条公式在概率图模型里是贝叶斯网络做推断的基础,也是朴素贝叶斯做分类的出发点。注意它和微积分里的求导链式法则名称相同、内容无关,这个坑后面避坑篇还会再提。3.3 独立性与条件独立性:为什么朴素贝叶斯这么“朴素”也能用两个随机变量独立时,联合概率可以写成两个概率的乘积,P(A, B) = P(A) P(B),这是一个非常好的数学性质。可惜无条件独立在真实数据里十分稀少,大部分事件之间都互相影响。这时就要引入条件独立性:给定C的情况下,A和B条件独立,当且仅当 A 和 B 的关系只通过 C 产生,而不是 A、B 直接关联。原文用一个天气例子讲透了这件事:今天下雨、今天地面湿、明天下雨这三个事件中,今天下雨对“今天地面湿”和“明天下雨”都有影响,但在已知今天下雨的前提下,今天地面湿不湿对明天是否下雨没有任何额外信息。也就是说,明天下雨和今天地面湿在给定今天下雨的条件下条件独立。这一点在工程上的典型应用就是朴素贝叶斯分类器:判断邮件是否为垃圾邮件时,假设单词x出现在邮件中的概率条件独立于单词y。这个假设明显不是真实情况——有些词几乎总是同时出现——但它让计算速度极快,而且对最终判别结果的影响并不大,算是条件独立性“明知不对但好用”的代表。3.4 变量与随机变量的区别:一个容易被一句话带过的考点把这节内容单独提出来,是因为它太容易被扫读漏掉。随机变量表示随机现象中各种结果的实值函数,比如某段时间公交站等车的人数、电话交换台收到的呼叫次数,都是随机变量的实例。变量与随机变量的区别可以这样记:当变量取某个值的概率不是1时,变量就变成了随机变量;当随机变量取某个值的概率为1时,它就退化为普通变量。举例来说,如果变量x取100的概率是1,那它就是确定的,除非有进一步运算否则不会变化;如果x取50的概率是0.5、取100的概率也是0.5,那它就是会随条件变化的随机变量。这个区分之所以重要,是因为后面所有概率分布的定义都建立在随机变量之上,而初学者常把“随机”理解成“会变化”,忽略了它本质上是“取值带概率”的数学对象。4. 概率分布篇:从伯努利到经验分布,六个分布的适用场景概率分布是第一章里信息密度最大的一节,六种分布排在一起,初学者很容易背了名字忘了场景。读这一节时不要按公式逐行背,先分清楚离散和连续两条线,再记住每个分布最核心的一个使用场景。4.1 离散型分布:Bernoulli 与 MultinoulliBernoulli分布是单个二值随机变量的分布,单参数 φ 控制随机变量等于1的概率,取值只有0和1。它的期望是 φ,方差是 φ(1-φ)。二分类任务中样本标签的生成假设就是它,交叉熵损失也和这种分布直接挂钩。Multinoulli分布又叫范畴分布,是单个取k个值随机变量的分布,用向量参数化,每个分量表示第i个状态的概率,所有分量求和为1。它是多分类问题的分布假设,softmax输出的正是这种分布。理解这两者的工程价值在于:模型的输出层选择什么分布,基本决定了损失函数怎么写。二分类用sigmoid加交叉熵,多分类用softmax加交叉熵,背后都是这两类分布。4.2 连续型分布:高斯、指数、拉普拉斯高斯分布也叫正态分布,由均值 μ 和方差 σ² 两个参数控制。μ 给出中心峰值的位置,σ² 控制峰的宽度。正态分布里 ±1σ、±2σ、±3σ 范围内的概率分别是68.3%、95.5%、99.73%,这三个数最好记住,做异常检测时经常拿它们当阈值。原文回答了“何时采用正态分布”这个问题:缺乏实数上分布的先验知识、不知如何选择时,默认选正态分布总是不会错的。理由有两条:一是中心极限定理表明很多独立随机变量的叠加近似服从正态分布,现实中的复杂系统经常可以被建模成正态噪声;二是正态分布是具有相同方差的所有概率分布中不确定性最大的分布,换句话说,选它是对模型加入先验知识最少的选择。听到“默认选正态”别觉得是偷懒,它本质上是一种最大限度保留不确定性的保守建模策略。指数分布用来描述事件发生的时间间隔,在0点处取边界,负半轴的概率为0。它和无记忆性紧密绑定,适合建模“已经等了一段时间后还需再等多久”这类场景。拉普拉斯分布与高斯分布类似,但它允许在任意一点处设置概率质量的峰值,形态上是双指数,尾部比高斯更厚。工程上最有价值的一个对应关系是:L1正则化等价于给参数施加拉普拉斯先验,L2正则化等价于施加高斯先验。看到权重衰减,可以反向理解成对参数分布做了某种假设。4.3 Dirac分布与经验分布:训练集本身就是一个分布Dirac分布把所有概率质量都集中在一个点上,对应的狄拉克δ函数也叫单位脉冲函数。它的作用是把某个点的概率密度变成无穷大、同时保证积分结果仍为1,常用于表示一个固定值。单独看它似乎很极端,但它是经验分布的组成部分。经验分布是把给定的 m 个观测点每个都赋予 1/m 的概率质量,m个点就是数据集本身。当你在训练集上训练模型时,可以认为是从这个训练集得到的经验分布中采样。这样一来,“训练集”就从一组静态文件变成了一个概率分布对象,数据增强、重采样、类别平衡这些操作,本质上都是在修改这个经验分布,让它更接近真实分布。这个视角对理解过拟合也有帮助:模型拟合得太好,往往就是记住了经验分布里的每一个样本点,包括噪声。4.4 常用分布速查与选择顺序分布核心参数取值典型场景Bernoullip{0, 1}二分类标签、伯努利试验Multinoulli概率向量k个类别多分类、softmax输出高斯μ, σ²全体实数回归误差、初始化、默认先验拉普拉斯μ, b全体实数L1正则化、稀疏建模指数λ[0, +∞)事件间隔、生存时间Dirac / 经验分布数据点任意训练集采样来源选分布时走一遍这个流程基本不会错:先看目标变量是离散还是连续;离散二值选Bernoulli,离散多类选Multinoulli;连续有界或厚尾考虑拉普拉斯,连续非负考虑指数;毫无头绪就先选高斯,最后用数据分布和经验分布做对照检查。5. 避坑篇:五个高频翻车点的现象、原因与解决这一章单独拎出来写,是因为这份讲义里大量内容是“概念辨析”,而这种内容恰恰最容易产生假理解:每个词都见过,合在一起做题就错。下面五条是初学者最常踩的坑,每条都按现象、原因、解决三步拆开。5.1 线性代数里的两个惯性错误坑一:L1范数和L2范数总是记混。现象是写正则化项时把L1的公式记成平方和开根号,或者提到稀疏就直接写L2。原因在于两者都有数字下标,加上平时到处见欧氏距离的平方形式,肌肉记忆比概念记忆更顽固。解决方法是记两个距离名词:L1对应曼哈顿距离,L2对应欧氏距离。想不起来时画个坐标系,从(0,0)到(1,1),走折线是L1,走直线是L2,几何图形一出来就不会混。坑二:把特征值分解和奇异值分解当成同一种操作。现象是对一个非方阵直接写特征值分解,或者以为SVD就是解 det(A-λI)=0。原因是很多资料在介绍SVD时直接说“广义特征值分解”,初学者就真的当成一回事。实际上特征值分解只对方阵定义,SVD对任意 m×n 矩阵都成立;奇异值是 A^T A 特征值的算术平方根,不是特征值本身。哪怕只记得一条——“方阵才谈特征值,任意矩阵都谈奇异值”——就能避开大部分问题。5.2 概率论里的三个高频翻车点坑三:看到概率密度函数值大于1,以为公式写错了。现象是计算 N(0, 0.01) 在0处的密度值得到约3.99,有人立刻觉得概率大于1不合理。原因是把PDF的值当成了概率。PDF是密度,不是概率;落在某个微小区域 dx 内的概率约等于 p(x)dx,需要积分才有真正概率。中心密度可以远大于1,但曲线下的总面积始终等于1。这个理解不到位,后面看最大似然估计时也会被类似问题绊住。坑四:把概率论的链式法则和微积分的链式法则混成一个概念。现象是看完反向传播的复合函数求导链式法则,翻到条件概率一节又出现“链式法则”,以为是同一个东西。原因很简单,两个数学分支共用了同一个英文词,翻译过来又都是“链式法则”。概率里的链式法则是联合概率分解成条件概率的乘积,比如 P(A,B,C)=P(A)P(B|A)P(C|A,B);微积分里的链式法则是复合函数求导的乘法规则。两者没有任何推导关系,建议在笔记里分开记,给其中一个标注“条件概率版”,给另一个标注“求导版”。坑五:两个孩子的问题,已知一个是女孩,另一个也是女孩,答成1/2。现象是觉得两个孩子性别互相独立,一个已知是女孩,另一个男女各半,直觉上应该是1/2。原因在于题目里“已知一个是女孩”是存在性条件,没有指明是老大还是老二,问题空间比直觉要窄。解决方法是先列四元样本空间:女女、男女、女男、男男,各占1/4,已知条件排除男男,剩下三种情况中只有女女满足,所以是1/3。如果题目改成“已知老大是女孩”,那才是1/2。这类题考察的就是是否愿意把样本空间列完整,而不是依靠直觉。6. 把公式变直觉:两个Python脚本与一套自查清单数学概念光读不验,永远隔一层。第一章里那些结论,大部分都可以用十几行代码亲手验证。下面两个脚本建议按顺序跑一遍,能解决“看书全会、合书全忘”的问题。6.1 用奇异值能量占比看矩阵长尾import numpy as np # 生成一份 m 行 n 列的特征矩阵,模拟真实数据形态 m, n = 100, 50 A = np.random.randn(m, n) # 只计算奇异值,不取 U 和 V,svdvals 就是奇异值向量 s = np.linalg.svd(A, compute_uv=False) # 奇异值平方代表能量,计算前k个奇异值的累积能量占比 cum = np.cumsum(s**2) / np.sum(s**2) print("前10个奇异值能量占比:", cum[9])逻辑说明:奇异值本身反映该方向上的缩放幅度,奇异值平方近似看成矩阵在该方向上的能量,累积占比曲线越陡峭,说明信息越集中。把这里的 A 换成你自己的数据矩阵、图片矩阵或核矩阵,就能直观感受不同数据的“有效秩”差异。参数上,m 和 n 控制矩阵尺寸,compute_uv=False表示只返回奇异值;索引9对应前10个元素,因为数组下标从0开始。6.2 用采样验证高斯分布的经验法则import numpy as np rng = np.random.default_rng(42) # 固定随机种子,保证任何人运行结果一致 x = rng.standard_normal(100_000) # 采样10万个标准正态随机数 # 用均值函数统计落在各区间内的样本比例 p1 = np.mean(np.abs(x) < 1) # ±1σ 区间 p2 = np.mean(np.abs(x) < 2) # ±2σ 区间 p3 = np.mean(np.abs(x) < 3) # ±3σ 区间 print(f"±1σ: {p1:.4f} 理论68.3%") print(f"±2σ: {p2:.4f} 理论95.5%") print(f"±3σ: {p3:.4f} 理论99.7%")逻辑说明:大数定律保证样本比例会收敛到真实概率,采样量越大越贴近理论值。standard_normal(100_000)从标准正态分布里抽取10万个样本,np.mean对布尔数组求均值,等价于统计出满足条件的样本占比。参数上,随机种子42只是一个约定值,换成其他整数不影响结论,只会改变具体样本。跑完这两个脚本,建议把“样本量”“有效秩”“分布覆盖”这几个词挂在嘴边。以后再看到任何公式,都先过一遍这套自查清单:符号的定义域是什么;每个字母对应模型里的哪个变量;条件是否满足,比如是否要求方阵或正定;能不能用10行代码验证。这份讲义里的每节内容几乎都能找到对应的验证路径:正定矩阵手算特征值,条件概率穷举样本空间,正态分布采样验证经验法则。那次被面试官用“特征值和奇异值什么关系”问住之后,我每次拿到这类讲义,都强制自己先写完验证脚本再往下一页翻。这本讲义的每节也值得这样对待,希望这个习惯帮到你。本文还有配套的精品资源,点击获取