3.2 线性代数直觉理解:向量与矩阵

本文适合谁:对线性代数完全陌生、或者曾经学过但早就忘光了的读者。不需要任何数学背景,只需要知道加法和乘法。目标是读完后能看懂"神经网络的本质是矩阵乘法"这句话的含义。


一、为什么要讲线性代数

先说一个不太直觉的事实:向量和矩阵根本不是AI发明的。它们出现在物理、工程、经济、图形学里,已经有几百年历史了。AI只是这些工具的一个应用场景。

但AI让这个工具变得极其重要,因为它帮AI解决了一个根本问题:计算机如何处理任何信息

计算机只认识数字。一张图片、一段声音、一篇文章------在计算机眼里,这些都必须先变成数字,才能被处理。但光有一堆数字还不够,数字之间的关系同样重要:这两张图片有多像?这两个用户的兴趣有多接近?这两段文字说的是不是同一件事?

要回答这些问题,就需要对数字做有组织的、批量的数学运算------这正是线性代数的核心价值。

具体来说,AI里有三个需求,线性代数全解决了:

第一,表示数据。任何输入(图像、文字、用户行为)都可以用一组有序的数字来表示,叫做向量。这是统一的、计算机友好的数据格式。

第二,变换数据。神经网络的本质是把输入数据经过一系列变换,最终输出有意义的结果。每一次变换,在数学上就是一次矩阵乘法。

第三,批量处理。实际训练时,每次不是处理一个样本,而是几十、几百个同时处理。矩阵运算天然支持批量计算,还能充分利用GPU的并行能力。

所以,学线性代数不是为了应付考试,而是为了真正理解:神经网络的每一层到底在做什么


二、向量:用坐标描述一切

向量就是坐标

先从最简单的直觉说起。

你用地图导航,你的位置可以用经度和纬度两个数字表示:[116.4, 39.9](北京大概的坐标)。这两个数字,有顺序、有意义,放在一起就是一个向量

换一个例子。天气预报显示今天:温度28℃、湿度70%、气压1013hPa、风速15km/h。这四个数字打包在一起,就是描述今天天气的一个向量:[28, 70, 1013, 15]

再换一个。描述一个用户的特征:年龄32岁、月消费金额1500元、最近30天登录次数20次、购买品类3个。打包在一起:[32, 1500, 20, 3]。这也是一个向量。

你看到规律了吗?向量就是"用一组有顺序的数字来描述一个事物的多个特征"。它不是抽象的数学概念,它就是你每天都在用的坐标系思维。

向量在AI中的应用

AI把这个思路推向了极致:任何东西都可以被向量化。

场景 向量的含义 维度
地图导航 位置坐标 [经度, 纬度] 2维
天气预报 [温度, 湿度, 气压, 风速] 4维
用户画像 [年龄, 消费金额, 活跃天数, ...] N维
图像像素 28×28的图片展开为784个数字 784维
文字语义 一段文字的语义表示 1536维(以OpenAI为例)

为什么要把东西变成向量?

因为向量可以做数学运算。"猫"和"狗"只是两个字符,无法比较;但如果把它们都变成向量,就能用数学算出它们有多相似。这正是语义搜索和RAG(检索增强生成)的基础。

向量的基本运算

python 复制代码
import numpy as np

a = np.array([1.0, 2.0, 3.0])
b = np.array([4.0, 5.0, 6.0])

# 加法:对应位置相加,物理意义是"合并两个向量的信息"
print(a + b)   # [5. 7. 9.]

# 数乘:每个元素乘同一个数,效果是缩放长度不改变方向
print(2 * a)   # [2. 4. 6.]

# 点积:对应位置相乘再求和,反映两个向量的"对齐程度"
print(np.dot(a, b))  # 1×4 + 2×5 + 3×6 = 32

# 向量长度(模):所有元素平方和的平方根
print(np.linalg.norm(a))  # √(1²+2²+3²) ≈ 3.74

运行这段代码,你应该看到:

  • a + b 输出 [5. 7. 9.]
  • 2 * a 输出 [2. 4. 6.]
  • 点积结果是 32.0
  • 向量长度约为 3.742

其中点积是最重要的运算。两个向量的点积越大,说明它们越"对齐",也就是越相似。这个性质在Transformer的注意力机制里至关重要------后面会讲到。

余弦相似度:衡量两个向量有多"像"

在语义搜索里,我们经常需要回答这个问题:这两段文字有多相似?

直觉上,相似度应该看"方向"而不是"长度"。一篇1000字的文章和一篇100字的摘要,如果说的是同一件事,向量长度不同,但方向应该相近。

余弦相似度专门度量方向的接近程度:

python 复制代码
def cosine_similarity(a, b):
    # 点积除以两个向量长度的乘积,结果在[-1, 1]之间
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

a = np.array([1.0, 2.0, 3.0])
print(cosine_similarity(a, a))    # 1.0:完全相同
print(cosine_similarity(a, -a))   # -1.0:完全相反
print(cosine_similarity(a, np.array([0.0, 0.0, 1.0])))  # 约0.8:有一定相似
  • 余弦相似度接近1:方向相同,非常相似
  • 余弦相似度接近0:方向垂直,不相关
  • 余弦相似度接近**-1**:方向相反

RAG的向量检索、语义搜索,用的就是这个公式。

余弦相似度:向量夹角越小,语义越相近


难度提示:接下来的矩阵部分比向量稍难一点。如果感觉吃力,可以先跳过数学细节,记住核心结论:"矩阵乘法 = 神经网络的核心计算"。等后面遇到具体应用时再回来看,会更容易理解。

三、矩阵:二维的数字表格

矩阵的直觉:Excel表格

如果向量是"一列数字",那矩阵就是"多列数字拼在一起",形成一张二维的数字表格。

你用Excel管理用户数据:每行是一个用户,每列是一个特征(年龄、消费金额、活跃天数)。这个表格就是一个矩阵。

python 复制代码
import numpy as np

# 一个3行4列的矩阵,代表3个用户、每人4个特征
M = np.array([
    [32, 1500, 20, 3],   # 用户A
    [25, 800,  5, 1],    # 用户B
    [45, 5000, 30, 8]    # 用户C
])
print(M.shape)  # (3, 4):3行4列

但矩阵不只是用来存数据的。它更重要的作用是描述变换------把一组向量从一个空间"变换"到另一个空间。

想象一台压缩机:把一个3维的向量放进去,出来变成了2维的。这个"压缩"操作,在数学上就是一次矩阵乘法。

神经网络的每一层,本质上就是一次矩阵乘法:接收输入向量,乘以一个权重矩阵,输出一个新向量。通过多层变换,网络逐渐把原始像素、词语变换成"有意义的特征表示"。

矩阵乘法:最重要的操作

先建立直觉。你有一个100个用户的数据集,每个用户有32个特征。现在你想从这32个特征中提取出更抽象的64个特征(比如"消费倾向"、"活跃程度")。

这个"提取特征"的过程,就是一次矩阵乘法:用一个32×64的权重矩阵,把32维特征映射到64维。而且这个操作可以对100个用户同时进行------批量处理,一次搞定。

矩阵乘法的规则:左矩阵的列数必须等于右矩阵的行数,输出矩阵的形状是(左矩阵行数,右矩阵列数)。

python 复制代码
A = np.array([[1, 2],
              [3, 4],
              [5, 6]])   # 形状:3×2

B = np.array([[7, 8, 9],
              [10, 11, 12]])  # 形状:2×3

C = A @ B   # @ 是矩阵乘法运算符
print(C.shape)  # (3, 3):结果是3×3矩阵
print(C)
# 输出:
# [[ 27  30  33]
#  [ 61  68  75]
#  [ 95 106 117]]

下面是神经网络一层前向传播的完整示例:

python 复制代码
# 实际意义:100个样本,每个32个特征
# 经过一层神经网络,变成64个特征
X = np.random.randn(100, 32)   # 100个样本
W = np.random.randn(32, 64)    # 权重矩阵
b = np.random.randn(64)        # 偏置

output = X @ W + b   # 一次矩阵乘法,批量处理100个样本
print(output.shape)  # (100, 64)

运行后你会看到 output.shape(100, 64),说明100个样本同时完成了从32维到64维的变换。注意:这里没有用任何循环,矩阵乘法天然就是批量操作。

为什么GPU擅长矩阵乘法

矩阵乘法结果的每个位置,都是一次独立的点积运算,彼此完全不相关,可以同时进行。

GPU有几千个计算核心,可以同时并行执行大量乘加运算,一次性算出矩阵所有位置的值。CPU只有几十个核心,效率无法相比。

这就是深度学习需要GPU的根本原因------不是因为GPU"更快",而是因为矩阵乘法的数学结构天然适合GPU的并行架构


四、Embedding:向量在文字处理中的应用

注意:这一节是向量在NLP(Natural Language Processing,自然语言处理,让计算机理解和生成人类语言的技术领域)的具体应用,第6章《Embedding向量化原理》会完整展开。这里只做概念引入。

文字本身无法做数学运算。"猫"和"狗",计算机看到的只是两串字符,没法计算它们有多相似。

如果直接给每个字分配一个编号(猫=1,狗=2,汽车=3......),又会引入错误的含义:数字2和1更接近,难道暗示"狗"比"汽车"更像"猫"?

Embedding(嵌入)解决了这个问题:把文字转换成高维向量,使得语义相近的词在向量空间里也位置相近。"猫"和"狗"的向量很接近,"猫"和"汽车"的向量距离较远。

python 复制代码
# 概念示意(非真实代码)
# "猫"  → [0.2,  0.8, -0.3,  0.5, ...]  # 1536个数字
# "狗"  → [0.3,  0.7, -0.2,  0.4, ...]  # 和猫的向量很接近
# "汽车" → [-0.5, 0.1,  0.9, -0.2, ...]  # 和猫的向量差距大

有了向量表示,就能用余弦相似度计算"猫和狗有多像"------这是语义搜索、RAG检索等技术的数学基础。


五、Transformer中的线性代数

先别慌:这一节只是让你知道"Transformer是矩阵运算"这件事。看不懂公式完全正常,第5章会用完整的代码和图解来拆解它。

Transformer(一种主流神经网络架构,ChatGPT等大模型的基础)处理文字时,面对的问题是:每个词需要"关注"句子里的其他词,才能理解自己在这里的具体含义。

比如"苹果公司发布了新手机",这里的"苹果"是公司而不是水果,模型需要通过关注"公司"和"手机"这两个词来消歧义。

这个"每个词关注每个词"的过程,在数学上天然是一个矩阵运算。Transformer的注意力机制核心公式:

复制代码
Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) × V

用中文翻译这个公式在做什么:

  1. Q(Query,查询):当前这个词"想问什么"
  2. K(Key,键):句子里每个词"能回答什么"
  3. V(Value,值):句子里每个词"实际包含的信息"

想象你在图书馆找书(Q是你的问题,K是每本书的标题,V是书的内容)。你用问题和每本书标题做相似度比较(QK^T),找到最相关的书,然后按相关程度加权读取书的内容(× V)。

整个过程全是矩阵运算,这就是为什么GPU能大幅加速LLM推理。

现在只需要记住:注意力机制 = 矩阵运算 = GPU的强项。具体细节在第5章第5篇《Transformer架构详解》再深入。


六、完整实践代码

下面的代码把本文介绍的核心概念串联起来,验证向量运算、矩阵乘法以及神经网络一层前向传播:

python 复制代码
import numpy as np

# === 1. 向量基本运算 ===
a = np.array([1.0, 2.0, 3.0])
b = np.array([4.0, 5.0, 6.0])

print("点积:", np.dot(a, b))           # 32.0
print("余弦相似度:", np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)))
# 约0.9746,说明这两个向量方向很接近

# === 2. 矩阵乘法 ===
A = np.random.randn(3, 4)
B = np.random.randn(4, 5)
C = A @ B
print("矩阵乘法结果形状:", C.shape)    # (3, 5)

# === 3. 转置 ===
print("A的形状:", A.shape)             # (3, 4)
print("A转置的形状:", A.T.shape)       # (4, 3)

# === 4. 用矩阵乘法模拟一层神经网络 ===
batch_size = 32
input_dim = 128
output_dim = 64

X = np.random.randn(batch_size, input_dim)   # 32个样本,每个128维
W = np.random.randn(input_dim, output_dim)   # 权重矩阵
b = np.random.randn(output_dim)              # 偏置向量

output = X @ W + b   # 线性变换
print("神经网络一层输出形状:", output.shape)  # (32, 64)

运行这段代码,重点观察形状的变化:输入是(32, 128),权重是(128, 64),输出是(32, 64)。每个样本从128维变成了64维,而且32个样本是同时完成变换的。这就是神经网络一层的完整数学过程。


小结

概念 直觉理解 在AI中的作用
向量 一组有顺序的数字,就是坐标 表示特征、词语、图片的数字形式
矩阵 二维的数字表格,Excel那种 神经网络权重、批量数据处理
矩阵乘法 把一组向量批量变换到新空间 神经网络每一层的核心计算
余弦相似度 两个向量的夹角有多小 语义搜索、向量检索
转置 行列互换 Transformer的注意力计算中用到

向量和矩阵是工具,不是AI专属。理解了它们的本质,你会发现它们出现在物理、经济、图形学的每个角落------AI只是其中一个应用场景。

核心结论:神经网络的训练和推理,本质上是大量矩阵乘法的串联执行。 理解这一点,你就理解了为什么AI需要GPU,为什么数据要转成向量,以及Transformer为什么能有效处理文字。

后续应用:本文知识将在以下章节直接用到:

下一篇看微积分------模型是怎么"学习"的?

相关推荐
Cinthia10031 小时前
学习深度学习过程中对线性代数的几何理解
python·线性代数·机器学习
AI科技星16 小时前
基于**v=c(空间光速螺旋运动)唯一第一性原理**重新完整求导证明
人工智能·线性代数·算法·机器学习·架构·概率论·学习方法
吃好睡好便好19 小时前
矩阵的转置运算
学习·线性代数·matlab·矩阵
weixin_4684668521 小时前
机器学习之决策树新手实战指南
人工智能·python·算法·决策树·机器学习·ai
xier_ran1 天前
【infra之路】阶段二 · 模块二:CUDA 编程入门(下)— 矩阵乘法、tiling 优化与测量陷阱
人工智能·线性代数·矩阵
cxr8281 天前
高分子复合材料 AI 逆向设计合——学证明、算法实现、验证数据与学术资源全集
人工智能·线性代数·算法
star learning white1 天前
线性代数7
线性代数
hai3152475431 天前
AI工业化编程的黎明:由逻辑压缩到知识融合的范式跃迁
开发语言·人工智能·线性代数·机器学习·数学建模·概率论
it-电商达人1 天前
深耕TK内容运营,专业云端工具助力出海矩阵高效发展
矩阵·产品运营·内容运营