一文彻底搞懂线性代数:从零基础到AI核心,这一篇就够了!
别再被公式吓跑了我用最通俗的方式带你理解线性代数的本质看完你会发现原来AI的底层竟然这么简单说实话我第一次接触线性代数的时候也是一脸懵逼什么向量、矩阵、范数满屏的公式看得头晕。后来我慢慢发现问题不在于我笨而在于这些概念太抽象了很多资料里没有告诉我它们到底有什么用。直到我真正开始写神经网络代码我才恍然大悟原来线性代数就是AI世界的语言今天我不讲废话不堆公式我会用最生活化的例子带你从头到尾彻底搞懂线性代数。哪怕你数学基础不好也能看懂。如果你正在学习机器学习这篇文章你一定要看完写在前面为什么AI离不开线性代数想象一下你要训练一个神经网络来识别猫的照片。这张照片在计算机眼里是什么是一大堆数字像素值。一张100x100的彩色照片就是100x100x3 30000个数字。这30000个数字组合在一起就构成了一个高维数据。你的神经网络要做的就是对这30000个数字进行各种运算提取出猫的特征耳朵、眼睛、胡须最后判断“这是不是猫”。这一系列操作就是线性代数在做的事情。所以不懂线性代数你就无法真正理解神经网络在干什么。你会变成“调包侠”只会调用现成的函数遇到问题无从下手。好了让我们从最最基础的东西开始。一、从数字到向量——用“特征”描述世界1.1 标量孤独的一个数先问一个问题“5”是什么在数学里“5”是一个标量。它只是一个单独的数只有大小没有方向。你可以把它理解成一个点。在编程里age 25这里的25就是标量。标量很简单但它能描述的信息太有限了。比如你想描述一个人只用“年龄”够吗不够我们还需要身高、体重、性别……这时候向量就登场了。1.2 向量把多个特征打包在一起什么是向量向量就是一组有序排列的数字。你可以把它想象成一个“特征包”小明 [25, 175, 70]这个向量描述了小明的三个特征年龄25岁身高175厘米体重70公斤。在数学里我们有两种写法行向量(25, 175, 70)像一排数据横着排列。列向量[25; 175; 70]竖着排列。在机器学习中我们通常用列向量来表示一个样本。为什么因为后面我们会把很多样本拼在一起形成一个矩阵列向量竖着放会更方便。我的理解向量就是把现实世界中的“事物”翻译成计算机能理解的“数字列表”。一个房子、一个人、一个商品都可以用一个向量来表示。1.3 向量运算向量是如何“互动”的① 转置把横的变竖竖的变横转置非常简单就是把行和列互换。比如向量 x [2; 5] 这是一个列向量 x的转置 x^T (2, 5) 变成行向量听起来很简单对吧但在矩阵运算中转置非常重要因为它能让不同形状的数据“对上号”从而进行乘法运算。我的理解转置就像是给你的数据“换了个姿势”让它能够和别人“握上手”。② 向量加法对应元素相加两个向量相加就是对应位置的元素相加[2; 5] [1; 3] [21; 53] [3; 8]在神经网络里向量的加法被用来加上偏置bias。比如输出 权重 × 输入 偏置这里的偏置就是一个向量它让神经元能更灵活地调整输出。③ 向量与标量相乘缩放把标量乘以向量就是把标量乘以向量的每个元素3 × [2; 5] [3×2; 3×5] [6; 15]这在机器学习里非常常见比如特征缩放。你的数据可能有的很大比如房价几百万有的很小比如房间数几个为了让模型训练更稳定你会把所有的特征都缩放到0~1之间这就是在“乘以标量”实际上是乘以一个很小的数。④ 向量内积点乘衡量两个向量的相似度这是向量运算里最重要、最核心的一个请一定要理解。两个向量的内积 对应元素相乘再把结果加起来。x [2; 5; 8] y [1; 3; 7] 内积 2×1 5×3 8×7 2 15 56 73结果是一个标量单个数字。内积到底代表了什么内积衡量的是两个向量的“方向相似度”如果两个向量方向一致内积很大。如果两个向量方向垂直内积为0。如果两个向量方向相反内积为负。在神经网络里神经元的计算公式是输出 激活函数(权重·输入 偏置)这个权重·输入就是权重向量和输入向量的内积也就是说神经元在做的事情就是计算“输入”和“权重”这两个向量有多相似。如果相似度高内积大神经元就容易被激活如果相似度低内积小神经元就保持沉默。我的理解内积就像是两个向量的“握手”。握得越紧说明它们越有共同语言神经元就会被点亮。⑤ 向量的长度范数我们经常需要知道一个向量有多“大”这个“大小”就叫做范数。L0范数统计向量里有多少个非零元素。比如[0, 2, -1]非零元素有2个所以L0范数是2。这个在稀疏性鼓励很多元素为0的算法中用到。L1范数所有元素绝对值之和。比如[0, 2, -1]绝对值加起来是0213。L1范数常用来做特征选择它会让不重要的特征变成0留下重要的。L2范数欧几里得距离就是初中学的“两点之间的距离”。公式是平方和再开根号。比如[0, 2, -1]平方和是0415开根号是√5。L2范数最常用比如KNN算法里判断“哪个样本离我最近”用的就是L2距离。二、矩阵——批量处理数据的“超级容器”刚才我们说一个向量可以表示一个样本。那如果有100个样本呢难道写100个向量当然不是我们把它们全部放进一个矩阵里。2.1 矩阵是什么一个m × n的矩阵就是一个有m行n列的表格。[1, 2] [3, 5] 这就是一个2×2的矩阵 [4, 8] 这是一个3×2的矩阵在机器学习中我们经常这样理解每一行 一个样本每一列 一个特征比如一个100×3的矩阵就是100个样本每个样本有3个特征。2.2 几种特殊的矩阵方阵行数列数。比如2×2的矩阵。很多数学运算比如求逆、求特征值只对方阵有效。对角矩阵除了主对角线其他全是0。它代表了一种“缩放”操作。单位矩阵对角线上全是1其他全是0。它是矩阵里的“数字1”任何矩阵乘以单位矩阵都等于它自己。2.3 矩阵乘法改变世界的核心运算终于来到矩阵运算的核心了矩阵乘法是线性代数里最重要、最神奇的运算。① 规则什么时候能乘两个矩阵能相乘的条件是A的列数 B的行数。如果A是m×nB是n×p那么C A×B就是m×p。C中第i行第j列的元素 A的第i行 与 B的第j列 的内积。来看一个具体的例子A [1, 0, 2] 1行3列 [-1, 3, 1] 2行3列 B [3, 7] 3行2列 [2, 1] [1, 0] 我们来计算 C A × B C的(1,1) A的第1行[1,0,2] 与 B的第1列[3,2,1]的内积 1×3 0×2 2×1 5 C的(1,2) A的第1行[1,0,2] 与 B的第2列[7,1,0]的内积 1×7 0×1 2×0 7 C的(2,1) A的第2行[-1,3,1] 与 B的第1列[3,2,1]的内积 (-1)×3 3×2 1×1 4 C的(2,2) A的第2行[-1,3,1] 与 B的第2列[7,1,0]的内积 (-1)×7 3×1 1×0 -4 所以 C [5, 7; 4, -4]我的理解矩阵乘法就是“把一组数据输入通过一系列规则权重转换成另一组数据输出”。神经网络里的每一层都在做这件事输出 权重矩阵 × 输入矩阵 偏置。② 矩阵乘法的性质结合律(AB)C A(BC)。可以自由调整计算顺序结果不变。分配律(AB)C AC BC。不满足交换律AB ≠ BA。这一点非常重要顺序不能乱矩阵A乘以B和B乘以A完全是两码事。就像先穿袜子再穿鞋和先穿鞋再穿袜子结果完全不同。2.4 矩阵转置把数据“转个方向”矩阵转置就是行变列列变行。A [1, 2; 3, 5; 4, 8] 3行2列 A的转置 A^T [1, 3, 4; 2, 5, 8] 2行3列转置有一个特别重要的性质(AB)^T B^T A^T。这个在推导公式时经常用到叫做“穿脱衣”法则——先算的A和B转置后要反过来变成B的转置乘以A的转置。2.5 矩阵的逆撤销操作对于方阵A如果存在另一个方阵A^{-1}使得A × A^{-1} I单位矩阵那么A^{-1}就是A的逆。逆矩阵的作用撤销A所做的变换。比如如果你用A对x做了变换得到y Ax那么用A^{-1}乘以y就能把x变回来x A^{-1}y。在解线性方程组时逆矩阵非常有用。但实际计算中我们很少直接算逆因为计算量大且数值不稳定。更常用的是解线性方程组的方法。2.6 矩阵的Hadamard积和Kronecker积Hadamard积对应元素相乘。比如两个2×2的矩阵对应位置的元素相乘结果还是2×2。这在注意力机制里很常见。Kronecker积把第一个矩阵的每个元素都乘以第二个矩阵。结果是维度更大。这个在量子计算、图论等领域经常用到。三、张量——进入高维世界我们刚刚讲了标量 0维一个点向量 1维一条线矩阵 2维一个面那如果数据是3维、4维呢这就是张量。张量就是一个多维数组。一张灰度图片 2维张量高×宽一张彩色图片 3维张量高×宽×33是RGB三个通道一段视频 4维张量时间×高×宽×通道一批图片 4维张量批次×高×宽×通道现在的大语言模型如GPT处理的文本也是张量。一个句子可以被表示成(序列长度, 词向量维度)的2维张量。我的理解张量就是把数据“堆”起来堆出更高维度的结构。深度学习的核心就是对各种维度的张量进行运算。四、矩阵求导——让模型学会“学习”前面我们讲了数据怎么表示向量、矩阵、张量怎么变换矩阵乘法。但有一个关键问题没解决模型是怎么学会的答案是通过优化。我们有一个损失函数它衡量模型预测得准不准。我们的目标是让损失函数最小。怎么做调整模型里的参数也就是矩阵里的元素。怎么调看损失函数对每个参数的“敏感度”。这个“敏感度”就是梯度。梯度 导数偏导数的集合。矩阵求导就是函数对向量或矩阵里的每个元素求偏导然后把结果排列成同样形状的东西。听起来很复杂没关系我们一步步来。4.1 四种典型场景场景1标量函数 f(x) 对向量 x 求导比如你有一个函数 f(x1, x2) x1² x1x2 2x2²它对x1和x2的偏导数分别是∂f/∂x1 2x1 x2∂f/∂x2 x1 4x2把它们排成列向量就是梯度[2x1 x2; x1 4x2]。这个梯度告诉你的信息如果你想让f变小就要沿着梯度的反方向移动x。场景2标量函数 f(X) 对矩阵 X 求导比如损失函数对权重矩阵W的梯度就是一个和W形状一模一样的矩阵。矩阵里每个元素告诉你改变这个权重损失函数会怎么变。场景3向量函数 f(x) 对标量 x 求导比如你有一个向量函数 f(x) [2x²3x1; sinx]它表示两个函数。对x求导就是每个分量分别求导排成向量。场景4向量函数 f(x) 对向量 x 求导这是最复杂的情况结果是一个矩阵叫做雅可比矩阵。它的每一列是f的某个分量对所有x的偏导。4.2 常用求导结果记下来以后用得上这些公式你可以在AI论文里经常看到我帮你总结一下∂(x^T a)/∂x a对线性项求导得到系数a。∂(x^T x)/∂x 2x这个很常见在L2范数的平方里用到。∂(A x)/∂x A^T线性变换的导数。∂(x^T A x)/∂x (A^T A)x二次型的导数。如果A是对称矩阵就变成2Ax。∂(a^T x b)/∂x a b^T这个看起来复杂但记住就行。这些公式你可能现在觉得陌生等你开始手推神经网络的梯度就会发现它们无处不在。4.3 梯度与黑塞矩阵梯度一阶导数告诉你函数在哪条路上上升最快。黑塞矩阵二阶导数矩阵告诉你函数的“曲率”也就是这条路的弯曲程度。它在牛顿法等高级优化算法中很关键。五、总结线性代数就是AI的语言好了我们已经走完了一整趟线性代数之旅。现在让我们回头看看我们到底学了什么标量是点向量是特征包矩阵是数据集张量是高维数据。向量加法是加偏置向量内积是衡量相似度矩阵乘法是神经网络的每一层。范数是大小转置是换姿势逆矩阵是撤销操作。矩阵求导是模型学会“学习”的数学基础。当你再次看到神经网络的公式 y Wx b 时你眼中的画面应该不一样了这是输入x一个特征包通过权重矩阵W一组规则进行线性变换旋转、缩放再加上偏置b平移得到输出y新的特征包。而W和b是通过梯度矩阵求导不断调整的直到输出y越来越接近我们想要的结果。这就是线性代数的魅力。它把抽象的“学习”过程变成了具体的、可计算的数学运算。如果你从头看到这里恭喜你你已经跨过了AI学习的第一道坎。接下来当你用PyTorch或TensorFlow写代码时你会发现自己不仅知道怎么做还知道为什么这么做。学数学不是为了考试是为了真正理解世界。最后送给你一句话“线性代数不是什么高深的理论它只是把生活中的‘关系’和‘变换’翻译成了数字的语言。”如果你觉得这篇文章对你有帮助请点赞、收藏、转发让更多正在学习AI的朋友看到有问题欢迎在评论区留言我们一起讨论一起进步