AI算法基石:深入浅出线性代数
本文旨在用通俗语言,解析AI中最抽象但至关重要的线性代数概念。摒弃繁琐的公式推导,借助生活常识,帮你构建直观的数学直觉。
阅读指南:
你可以把"张量"看作一个存放数字的容器,其"嵌套层数"决定了张量的阶数,即 Python 中的 ndim。
术语精讲:
核心定义:阶数 = 确定一个数值所需索引的个数。
神经网络训练时,数据通常按批次输入:样本数、通道数、高度和宽度。理解张量阶数,是排查RuntimeError: size mismatch的第一步。
向量在数学教材中常表现为带箭头的线段,但在计算机和 AI 领域,它更多是一串具有特定含义的数字序列。
向量的两大核心属性:
重点辨析:行向量与列向量
在数学运算中,通常默认向量为列向量(竖写):
公式中,矩阵在左侧乘以向量。若满足条件,向量必须是列向量,结果为向量。
易错点:形状为的数组与形状为的矩阵在数学运算上表现迥异。例如:
在深度学习框架的广播机制下,(Batch, 3)和(Batch, 3, 1)的计算结果可能大相径庭,务必明确行列维度。
我们需要两把工具来衡量向量空间。
范数是向量长度的扩展,定义为满足特定条件的函数:
向量内积定义为:
几何含义:内积 = 投影长度 × 向量长度
其中θ为两向量间的夹角。
余弦相似度:剔除长度干扰,仅关注方向一致性
实战应用:注意力机制的内核
Transformer中的Query-Key注意力分数本质就是内积:
其中每个元素都是Query向量与Key向量的内积,衡量“这个词对那个词的关注程度”。
为什么要除以?
当维度较高时,假设变量独立同分布且均值为0、方差为1,它们的点积方差为(项相加)。这意味着点积数值随维度增加而“膨胀”。
若不进行缩放,Softmax输入将变得极大,导致输出趋近于one-hot分布(一个位置接近1,其余接近0),梯度几乎消失,模型难以收敛。除以将方差归一化到1,确保数值稳定。
实战应用:神经元即内积运算器
单个神经元输出:
权重向量决定神经元的“偏好”,内积越大表明输入与偏好匹配度越高。随后通过激活函数(如ReLU、Sigmoid)引入非线性,决定神经元是否“激活”。
矩阵绝非静止的数字表格,而是一台“变换机器”。
给定矩阵A和向量x:
矩阵将n维空间的向量映射到m维空间。
常见变换类型:
表示“先执行变换A,再执行变换B”。
⚠️注意:矩阵乘法不具备交换律
正如“先穿袜子再穿鞋”与“先穿鞋再穿袜子”截然不同,顺序至关重要。这也解释了反向传播求导为何必须按“链式法则”倒序计算。
转置:沿主对角线翻转矩阵
逆矩阵:变换的“撤销键”
若方阵满秩,存在唯一矩阵B,使得:
其中I为单位矩阵(对角线为1)。
不可逆情形:行列式为0或矩阵非方阵。
正交矩阵:转置等于逆
普通矩阵仅能进行固定原点的线性变换。若需平移(如图片右移3格),需引入齐次坐标:
其中t为平移向量。这在计算机图形学和视觉中广泛应用。
传统矩阵乘法需处理转置,Einsum提供了更直观视角:
给每个维度命名,同名维度自动相乘求和。
示例:矩阵乘法
记忆法则:
Transformer中的应用:
注意力分数计算:
Einsum速查表:b=Batch, h=Head, q=Query_len, k=Key_len, d=Head_dim。
输出形状对应(批次, 头数, 查询长度, 键长度),物理意义明确,且避免了混淆被消去的深度维度d。
注意:自注意力中q等于k,但交叉注意力中不等,保留q和k分开命名是良好习惯。
完整Attention输出也可用Einsum一行表示:
输出形状对应(批次, 头数, 查询长度, 头维度),即每个查询位置聚合了所有键位置信息后恢复到原始深度。
处理批量、多头注意力时,Einsum如读自然语言般清晰,且经编译优化后比手动转置+矩阵乘更快、显存占用更少。
这是线性代数中最直观的概念。
想象一块海绵(矩阵),施加变换后。
对于方阵,若存在非零向量v和标量λ,使得:
则λ为特征值,v为对应特征向量。
求解方法:特征方程
PCA核心思想:
为何协方差矩阵特征向量可作为新坐标轴?
因协方差矩阵是实对称矩阵,特征向量方向不变且两两正交,构成新的正交基。PCA降维后新特征线性无关。
注:统计教材常用Σ作无偏估计;机器学习中PCA只关心方向,与Σ等价。
扩展:PCA与SVD等价。对去均值数据做SVD,右奇异向量即协方差矩阵特征向量。SVD数值更稳定,是库中的默认实现。
条件数衡量矩阵求逆的数值稳定性。对于正规矩阵,条件数可表示为特征值之比:
对于非对称矩阵(如Jacobian),特征值不能反映“拉伸倍数”,条件数应基于奇异值:
两者在实对称矩阵上等价。条件数含义:
深度学习中,Hessian条件数决定损失函数“地形”:
数据归一化重要性:将狭长峡谷拉成圆碗,使条件数接近1,优化更稳。
进阶:Adam优化器的“预条件”直觉
即使特征值全正(正定),若最小值极小(如1e-10),数值上仍病态。优化如撒哈拉找最低点——坡度太平缓,优化器易停滞。
Adam本质为对角预条件。利用二阶矩估计的平方根倒数,实时将“狭长峡谷”拉扯成“圆形碗”,使梯度下降更稳。
补充:Adam预条件矩阵为对角,只能矫正坐标轴对齐的狭长谷。若峡谷斜向,矫正有限。但在多数网络中已足够有效。
若特征值分解仅限方阵,SVD则是任何形状矩阵的利器。
任何照片、表格(矩阵)可拆解为三步:
注:U和V是正交矩阵,保持长度和角度不变。D包含旋转(行列式)和反射(行列式)。
对角阵元素为奇异值σ_i。
奇异值衰减速度 = 信息冗余度:
秩-r近似:用前r个奇异值重构矩阵。
这是最优的秩-r近似。
AI启示:LoRA微调大模型原理
大模型原始权重通常满秩。但微调时,权重更新量往往低秩。
LoRA核心思想:
其中,A和B是低秩矩阵。
通过低秩分解模拟更新量,显存降低90%+,消费级显卡可微调千亿模型。
秩选择:是超参数。简单任务取2-4;复杂任务取4-8。研究表明Attention层对低秩敏感,FFN层需更高秩。AdaLoRA可动态调整。
如果说张量是数据容器,矩阵秩就是容器内有效空间大小。
重要定理:列秩=行秩,统称矩阵秩。
计算机浮点运算中,奇异值很少精确为0。例如理论上秩应为的矩阵,计算出的奇异值可能是。
需引入数值秩:将小于阈值的奇异值视为0。更严谨做法:σ_i < ε·σ_max,其中ε为机器精度(Float32约1e-7)。这是 NumPy 等库内部判断矩阵秩的默认逻辑。
矩阵秩表示:
把n维单位立方体放入矩阵,输出体积缩放倍数。
场景1:归一化流生成模型
通过可逆神经网络学习分布,变量替换要求:
若Jacobian行列式为0,说明空间“压塌”,概率质量不守恒,训练崩溃。
场景2:线性回归的生死线
求解正规方程:
若特征线性相关,行列式为0,无法求逆。
解法:岭回归
给矩阵对角线加微小λ,相当于给被压扁的盒子充气,安全求逆。这也被称为Tikhonov 正则化。
一个对称矩阵被称为正定(PD)的,如果对于所有非零向量x:
为何强调“对称”?在AI中Hessian、协方差、Gram矩阵天然对称,非对称影响较小。
等价判定:
放宽为≥0,称半正定。允许0特征值。
性质:任意矩阵Gram矩阵半正定。协方差矩阵由数据构造,天然半正定。
在优化算法(如牛顿法)中,Hessian正定性关键:
澄清:病态正定坑。即使Hessian正定但条件数大(最小特征值接近0),梯度下降会剧烈震荡。需动量或Adam。
为何归一化让“碗”更圆?
归一化使特征尺度一致,Hessian特征值分布均匀,条件数接近1。相当于把狭长峡谷变圆润碗,梯度下降不再震荡。
方阵主对角线元素之和:
性质:
场景1:FID分数(GAN评估)
Fréchet Inception Distance衡量生成图与真图的距离:
其中μ为均值,Σ为协方差。
场景2:强化学习不确定性
若Σ为状态转移协方差,迹为各维度方差和,反映总不确定性。
场景3:矩阵微分与“期望的交换魔法”
迹的循环性质使矩阵求导公式简洁:
此外,VAE和扩散模型中,有重要等式:
其中μ为均值,Σ为协方差。解释了为何计算KL散度或Score Matching时公式中充满trace。
迹运算可将二次型期望拆解为协方差矩阵线性组合,简化概率建模。
AI底层优化(如最小二乘法)常需解方程。
有一串钥匙(矩阵),想开一把锁(向量),问每把钥匙拧多少圈。
超定方程最优解:
即Moore-Penrose伪逆:
欠定方程通解:
其中x_p是特解,N(A)是零空间。
这意味着有无穷多“路”能到达目的地。正则化从中选一条:
解:
AI训练本质是寻找误差下降最快的梯度方向。
站在山上(误差大),手有旋钮(参数),想往哪拧最快下到谷底。
标量损失梯度:
梯度指向损失增长最快方向,反向走(负梯度)即最快下降方向:
其中α为学习率。
神经网络是复合函数,求导需链式法则:
每层梯度涉及Jacobian链乘。即“先穿的后脱”——从输出层向输入层反向传播。
向量值函数Jacobian为:
反向传播中,传递向量-Jacobian积(VJP)。若g为列向量,框架计算的是(与输入同维),而非显式Jacobian。内存占用仅为,非。
警示:标量损失是反向传播默认指挥官。
PyTorch中,标量损失可调用.backward()。若输出向量,需传gradient参数。直接对非标量调用会报错。
法则:标量损失是默认指挥官。需完整Jacobian时用显式函数。
箴言:理解线性代数,是为了在矩阵因数值误差不可逆、梯度消失或爆炸时,知道如何加正则化救回模型。
若将深度网络比作画家:
缺前者画不准,缺后者画不活。
若神经网络仅含矩阵乘法(线性),无论堆多少层,整体仍等价于线性变换:
激活函数(如ReLU)引入非线性,使网络能:
线性代数提供变换工具,激活函数赋予表达复杂世界能力。
线性层堆叠并非完全无意义
虽数学上等价线性变换,但数值不等。多层乘法引入不同舍入误差,中间层维度变化(如bottleneck)影响信息容量。
如输入1000维,输出1000维,中间100维bottleneck限制信息,这是自编码器核心思想。
冷知识:为何BERT向量维度是768?
可能好奇为何是768而非1000。Transformer维度取2的幂或64倍数(512, 768, 1024)。主要适配GPU显存对齐和Tensor Core分块。线性代数是刻在硅片上的算术。
结语:线性代数非背诵学科,而是“看见”学科。脑中“看见”矩阵变换空间、梯度指引下山,即掌握AI底层直觉。