你用 Excel 做过这种事吗——在一格写好公式 =A1*2+B1*3,然后往下拖拉,几百行瞬间全算完。你不会傻到一行一行手敲公式。神经网络做的事几乎一模一样:它要给成千上万个神经元、成千上万条数据反复算「加权求和」,而它的「拖拉填充」工具,就是矩阵。
一句话定义:神经网络矩阵计算,就是把神经元那种「输入乘权重再求和」的计算,用矩阵(一张数表)打包起来,一次性算完一整层、甚至一整批数据的运算方式。
它是整个深度学习的「算术底座」——从手机识猫到 ChatGPT 吐字,背后都是海量的矩阵乘法在 GPU 上一遍遍飞。理解了它,你就能看懂为什么训练神经网络非得靠显卡、为什么 PyTorch 那几行代码能算那么多东西。
先回忆:一个神经元在算什么
上一篇《神经元是什么》讲过,单个神经元干的事是加权求和再加偏置:
—— 输入特征的个数,公式里下标从 1 取到 。
把权重
问题来了:一层神经网络往往有几百几千个神经元,每个都在做点乘;训练时一次又要处理几十几百条数据。如果用 for 循环一个一个算,慢到无法忍受。于是我们把所有这些点乘打包成一次矩阵乘法。
第一层打包:把一整层神经元塞进一张权重矩阵
一层里的神经元,输入相同、各自的权重不同。把每个神经元的权重写成一行,摞起来就是这层的权重矩阵
符号逐项解读:
—— 这层的输入,一个列向量(竖着排的一列数),长度 = 输入特征数 。 —— 这层的权重矩阵:每行是一个神经元的全部权重。若这层有 个神经元、输入 个, 就是 ( 行 列)的一张表。 —— 偏置向量,每个神经元一个底数,长 。 —— 这层所有神经元的加权求和结果,长 的列向量。
一次乘法,整层的
图 1:三个神经元各自的一行权重摞成一张 3×2 的权重矩阵 W,拿输入 x 一乘——整层三个神经元同时算完,这就是「打包一层」。
手算一遍:一条数据过一层
用一个极小的例子:2 个输入、3 个神经元的层。
已知:
- 输入
(两个特征,第二个为 0) - 权重矩阵
(3 行 = 3 个神经元,每行 2 个权重) - 偏置
(简化为 0)
计算:
自检: 结果是
注意每个神经元是怎么「挑出自己那行权重」做点乘的——矩阵乘法天然就是「一行配一列」。
第二层打包:把一批数据也塞进矩阵
真实训练不会一条一条喂数据,而是一次喂一批(叫一个 batch,常见 32/64/128 条)。好在矩阵还能再打包一次:把一批列向量横着并排拼成一个大矩阵
符号逐项解读:
—— 输入矩阵,每列一条样本。若批大小为 、输入 个特征, 就是 。 —— 输出矩阵,每列对应一条样本的结果,形状 。 、 同上——同一层对整批数据复用同一份权重。
这一步是质的飞跃:一次矩阵乘法,就把整批数据同时过了一整层。这也是「向量化」(vectorization)这个词的真正含义——用矩阵运算替代 for 循环。
算一批试试:两条数据并行过同一层
沿用上面的
拼成输入矩阵(第一列
一次乘法算完:
自检: 结果是
更巧的是:这里
维度对得上才算合法:矩阵运算的命脉
矩阵乘法有个铁律——前一个的列数,必须等于后一个的行数:
这条「列 = 行」的规矩,恰恰对应神经网络里「上一层输出的个数 = 这层每个神经元接收的输入个数」。所以你看到一层写成 nn.Linear(784, 128),意思就是:输入 784 个特征、输出 128 个,权重矩阵
图 2:矩阵乘法的铁律——前矩阵的「列数 n」必须等于后矩阵的「行数 n」,结果取 m×p。这条规矩对应到网络就是 nn.Linear(784, 128) 里 W 是 128×784。
一个小提醒:上面用「列向量」讲最直观,但 PyTorch 习惯把样本排成行——形状是
[batch, features],权重矩阵相应做一次转置处理。本质完全一样,只是「数据横着躺还是竖着躺」的排版差异。代码里看到x.shape = [32, 784]不用慌,那就是 32 条样本、每条 784 个特征。
为什么非矩阵不可:向量化与 GPU 并行
有人会问:用 for 循环一条一条、一个神经元一个神经元算,不也能得到一样的结果吗?理论上能,但有两个现实障碍让矩阵运算成为唯一选择:
- 速度差是几十到几百倍:CPU 串行
for循环,一次算一个数;矩阵运算把成千上万个乘加打包,交给底层高度优化的数学库(BLAS)一次完成。同样一层 1000 个神经元 × 1000 条数据,循环 vs 矩阵,可能是分钟级和毫秒级的差距。 - GPU 天生为矩阵而生:显卡里有几千个小核心,能同时算矩阵里互不依赖的大量乘法。深度学习的爆发,正是靠 GPU 把这种并行吃满了——训练 ChatGPT 这种千亿参数模型,离开 GPU 和矩阵运算根本不可能。
图 3:同一层计算,CPU 串行 for 循环要跑分钟级,而矩阵运算交给 GPU 几千个核心并行——只要毫秒级,这就是深度学习非靠矩阵和显卡不可的硬理由。
所以在 PyTorch 里,你几乎看不到「遍历神经元」的循环,全是矩阵运算:
import torch.nn as nn
self.fc = nn.Linear(784, 128) # 内部就是权重矩阵 W (128×784) + 偏置 b (128)
# 调用 self.fc(x) 时,x 是 [batch, 784],一次矩阵乘法就把整批数据过完这层连反向传播算梯度,本质也是矩阵运算(用到的还是权重矩阵的转置
矩阵计算在 AI 里的位置
- 所有深度学习框架的核心:PyTorch、TensorFlow、JAX,底层都是矩阵/张量运算库。你写的每一层网络,最终都翻译成矩阵乘法。
- 硬件的指挥棒:为什么 AI 芯片(GPU/TPU)长成那样?因为矩阵乘法能拆成海量独立的小乘加,适合上千核心并行——硬件是跟着矩阵运算的形状设计的。
- 大模型的体量就藏在矩阵里:一个几十亿参数的大模型,本质就是几千个巨大的权重矩阵;所谓「参数量」,就是这些矩阵里所有元素的总数。
小结
神经网络矩阵计算,就是把神经元「加权求和 + 偏置」这件小事,用矩阵打包成两步飞跃:先把一层的多个神经元塞进一张权重矩阵(
完整代码
下面用 PyTorch 演示一次「批处理矩阵运算」:32 条假样本(每条 784 个特征)一次过完一个 128 神经元的全连接层。重点看 forward 里没有任何 for 循环——一层 128 个神经元、32 条数据,全部由一次矩阵乘法搞定。代码末尾打印了每一步张量的形状(shape),方便你把「矩阵维度」和「网络结构」对上号。
import torch
import torch.nn as nn
# ===== 用矩阵运算实现"一层全连接神经网络" =====
# nn.Linear 内部就是权重矩阵 W 和偏置 b:Linear(in, out) → W 形状 [out, in],b 形状 [out]
class OneLayer(nn.Module):
def __init__(self):
super().__init__()
# 784 个输入特征 → 128 个神经元;内部自带 W (128×784) 和 b (128)
self.fc = nn.Linear(784, 128)
# forward 定义数据怎么过这层——全程没有 for 循环,全靠一次矩阵乘法
def forward(self, x):
z = self.fc(x) # 矩阵乘法:Z = x @ W^T + b,32 条样本同时过完 128 个神经元
a = torch.relu(z) # 逐元素激活(不改变形状),负数归零
return a
# ===== 造一批假数据:32 条样本,每条 784 个特征 =====
torch.manual_seed(42) # 固定随机种子,保证每次跑结果一样
X = torch.randn(32, 784) # [batch=32, features=784],行约定:每行一条样本
# ===== 实例化网络,看权重矩阵的形状 =====
net = OneLayer()
W, b = net.fc.weight, net.fc.bias # nn.Linear 把 W、b 存在这两个属性里
# ===== 一次前向 = 一次矩阵乘法,32 条数据并行过完一层 =====
out = net(X)
# ===== 打印每一步的形状,把"矩阵维度"和"网络结构"对上号 =====
print(f"输入 X.shape = {tuple(X.shape)} # 32 条样本 × 784 特征")
print(f"权重 W.shape = {tuple(W.shape)} # 128 个神经元 × 784 输入(每个神经元一行权重)")
print(f"偏置 b.shape = {tuple(b.shape)} # 每个神经元一个底数")
print(f"输出out.shape = {tuple(out.shape)} # 32 条样本 × 128 个神经元的结果")运行后你会看到形状一路变化:输入 [32, 784] → 权重 [128, 784] → 输出 [32, 128]。这三个数字正好对应「批大小、输入特征数、神经元数」——矩阵维度和网络结构,在这里严丝合缝地对上了。
参考资料
- 前向传播、反向传播和计算图 - 《动手学深度学习》 https://zh.d2l.ai/chapter_multilayer-perceptrons/backprop.html
- 神经网络的矩阵运算(批量与向量化)- APXML https://apxml.com/zh/courses/introduction-to-neural-networks/chapter-3-forward-propagation/matrix-operations
- 深度学习数学基础:矩阵运算与线性映射 - 知乎 https://zhuanlan.zhihu.com/p/26080522606