Model Weights
模型权重是将网络输入转换为预测结果的学习所得数值。内容涵盖训练如何设定权重、权重文件和压缩。
模型权重是神经网络内部可学习的数值,它们将输入转换为预测结果。每个权重都会缩放两个单元之间传递的信号,或构成一个卷积滤波器中的一个值;所有权重共同编码了模型从训练数据中学到的全部内容。这个术语通常被宽泛地用来指模型学到的所有参数,包括偏置和归一化值,例如“预训练权重”或“开放权重模型”。权重数量的跨度极大:ResNet-50约有 2560 万个参数,而大型语言模型则有数十亿个参数。
训练如何确定权重#
新网络会以较小的随机权重开始,这些权重根据He 初始化等方案抽取;这些方案会根据每一层的规模缩放随机值,使信号在经过许多层时既不会消失,也不会爆炸。此时,模型的预测结果只是噪声。随后训练会针对每个数据批次反复执行一个循环:前向传播生成预测结果,损失函数对预测误差进行评分,反向传播计算每个权重对误差的贡献,而优化器(例如随机梯度下降 (SGD)或Adam 优化器)则微调每个权重以降低误差。经过数百万次这样的小幅更新后,权重会稳定在能生成准确预测结果的数值上,并在推理期间保持不变。
权重与相关术语的区别#
- 偏置:在计算
y = Wx + b的层中,权重W与输入相乘,偏置b则加上一个偏移量,因此单元的激活函数可以移动其阈值,并在所有输入均为零时产生非零输出。训练期间会学习这两者。 - 超参数:训练前选定的设置,例如学习率和批次大小,它们控制权重的学习方式。梯度下降不会更新这些设置。
- 激活值:网络针对特定输入计算出的中间输出。权重对所有输入都保持不变,而激活值则会针对每个输入重新计算。
- Weights & Biases:一个实验跟踪平台,其名称借用了两种参数类型的名称。
保存和加载权重#
训练好的权重会保存到文件中,以便重新加载用于推理、分享,或作为迁移学习的起点。在 PyTorch 中,模型的权重存放在 state_dict 中,通常会保存为 .pt 文件。这些文件采用 Python 的 pickle 格式,加载时可能执行代码,因此从 PyTorch 2.6 开始,torch.load 默认设为 weights_only=True。safetensors 格式只存储原始张量,可避免代码执行,并支持快速内存映射加载;它也是 Hugging Face 上的标准格式。ONNX 文件将权重与计算图打包在一起,使其他运行时也能执行模型。
Ultralytics YOLO26 .pt 检查点会保存权重的指数移动平均值 (EMA),以平滑每一步之间的噪声,还会保存训练参数和每轮结果;每次训练运行都会将 best.pt 和 last.pt 写入其 weights 文件夹。加载相同架构的模型并分别使用和不使用训练权重,可以看出模型的知识存在哪里:
from ultralytics import YOLO
# Same YOLO26n architecture with two different sets of weights
trained = YOLO("yolo26n.pt") # weights learned on COCO
untrained = YOLO("yolo26n.yaml") # randomly initialized weights
for name, model in [("trained", trained), ("untrained", untrained)]:
results = model("https://ultralytics.com/images/bus.jpg")
print(f"{name}: {len(results[0].boxes)} objects detected")训练好的权重可以在图像中找到公交车和行人,而采用相同网络但随机初始化的副本则什么也检测不到。
压缩权重以供部署#
权重精度决定模型的文件大小和内存占用,这对边缘 AI设备尤为重要。模型量化会以较低精度存储权重;从 32 位浮点数改为 8 位整数,可将权重体积缩小到四分之一,并加快支持整数运算的硬件上的推理速度。剪枝会移除对输出贡献很小的权重,知识蒸馏则训练较小的模型来模仿较大的模型。举例来说,一个拥有 70 亿参数的语言模型,其权重在 32 位精度下约需 28 GB,在 16 位精度下约需 14 GB,在 4 位精度下约需 3.5 GB。










