一个有用的思维模型
一个神经网络最初只是一个带有空数值设置的结构。这个结构规定了要进行哪些计算以及计算顺序。权重则为这些计算提供许多数值。
可以把结构想象成可重复使用的计算模板,把权重想象成填入模板插槽中的数值。两个模型可以使用相同的结构,但由于包含不同的学习所得权重,其行为可能不同。不过这个类比也有局限:与控制面板上带有标签的设置不同,单个权重通常没有“语法”或“猫”这样的名称。
一个常见的层可以这样表示:
input signals x
│
▼
multiply and combine with weights W
│
▼
add a learned offset b
│
▼
apply the layer's function
│
▼
output signals偏移量 b称为偏置。权重和偏置都是模型参数,但只有权重会对信号进行乘法运算。
模型权重如何工作
假设某一层从前一层接收多个数值。为了生成一个新数值,它会将每个输入分别乘以一个权重,再把结果相加:
output = (input₁ × weight₁) + (input₂ × weight₂) + ... + bias
正权重会使总和沿着与其输入相同的方向变化。负权重会使总和沿着与其输入相反的方向变化。接近零的权重会让该输入对这次特定求和的贡献很小。
真实的层会同时计算许多输出。其权重排列成矩阵,因此可以简写为:
y = Wx + b
这里,x是输入信号向量,W是权重矩阵,b是偏置向量,y是应用后续函数之前得到的结果。有时,框架会将W以转置形式存储,但底层运算相同。
深度网络会在许多层中重复这一运算的不同变体。较早阶段的变化会改变后续层接收到的信号,因此其影响可能传播到整个计算过程的其余部分。非线性函数、归一化、参数复用以及与其他权重的相互作用,会使这种影响取决于具体上下文。
因此,单个权重的符号或大小,并不能可靠地衡量它对整个模型的重要性。它的含义取决于所在位置、输入的尺度、附近的参数,以及后续所有使用所得信号的运算。
一个具体示例
考虑一个具有两个输入的层:
- 第一个输入:
3 - 第二个输入:
2 - 第一个权重:
0.8 - 第二个权重:
-0.5 - 偏置:
0.1
该层计算:
(3 × 0.8) + (2 × -0.5) + 0.1 = 1.5
现在只将第二个权重从-0.5改为0.5:
(3 × 0.8) + (2 × 0.5) + 0.1 = 3.5
输入没有改变。计算结构没有改变。输出发生变化,是因为一个学习所得的乘数发生了变化。
这个小例子让每个数值都很容易检查。大型网络会同时执行许多这样的组合,然后将结果传入更多层。在这种情况下,一个权重仍然具有明确的局部作用,但孤立地看,它对最终答案的贡献通常没有多少意义。
权重如何学习
训练会寻找能够让模型更好地完成任务的权重值。典型的训练步骤包括四个部分:
- 模型使用当前权重生成输出。
- 损失函数会针对训练目标衡量误差。
- 反向传播会为每个权重计算梯度。梯度描述了该权重发生微小变化时,损失将如何变化。
- 优化器利用这些梯度调整权重。
简化后的更新公式是:
新权重 = 旧权重 - 学习率 × 梯度
学习率控制步长大小。在训练样本上重复这些更新,会逐渐得到一组更适合该目标的权重。
这个过程通常不会将某个人类概念分配给每个数值。学习是分布式的。一种有用的行为可能依赖于分散在许多权重中的模式,而一个权重也可能参与多种行为。
权重也不必从零开始。神经网络通常以经过谨慎随机化的数值开始。如果功能相同的单元以完全相同的数值开始,它们可能收到相同的更新,从而无法学习不同的作用。
权重为何重要
权重是训练的持久结果。训练结束后,可以将学习得到的数值保存到检查点中,之后加载使用,而不必每次使用时重新学习。
即使代码和架构保持不变,改变权重也会改变模型的行为。微调正是通过从已有检查点继续训练来有意实现这一点的。其他技术则可以改变权重的表示方式。例如,以较低的数值精度存储权重可以减少内存使用,但输出质量方面的权衡取决于模型和所采用的方法。
权重也占据了运行训练后模型所需的大部分存储空间和工作内存。数值越多、每个数值占用的字节越多,通常所需内存就越大。这种关系很有用,但并不能完整衡量性能。运行时开销、临时计算、输入长度、批处理以及硬件同样会产生影响。
最重要的是,权重是必要条件,但不是充分条件。权重张量只有放在兼容架构中与其匹配的部分时才有意义。一个可用的模型包还可能需要配置、输入处理、输出解码和运行时代码。权重并不规定完整的产品接口、安全规则、检索系统或模型周边的工具。
常见误解
“权重和参数是一回事”
有时人们会交替使用这两个词。严格来说,每个权重都是参数,但并非每个参数都是权重。偏置和某些缩放值也属于参数。不过,框架和模型发布者仍可能将包含所有学习所得参数的文件称为“权重文件”。
“权重越大就总是越重要”
权重的大小只有结合上下文才有意义。尺度较小且权重较大的输入,可能与尺度较大且权重较小的输入产生相同的局部作用。后续层可能放大、抵消、转向或忽略这一结果。
“每个权重都存储一个事实”
权重共同编码了从训练中学习到的模式。它们不是事实表中的行。一个事实或能力可能涉及许多数值,而一个数值也可能影响许多输入。模型可以复现部分训练内容,但这并不意味着权重是数据集的可直接搜索副本。
“权重就是完整的 AI 系统”
检查点不是完整的应用程序。需要匹配的架构和配置来解释其中的张量。AI 产品还可以添加模型权重中未包含的指令、检索、工具、过滤器和界面逻辑。
“模型每次使用时都会更新权重”
普通推理会读取固定的权重来计算输出。当前对话可能通过所提供的上下文影响后续输出,但这与重新训练权重不是一回事。只有当系统包含明确的训练或适配过程时,权重才会发生变化。
权重如何融入更广泛的系统
架构定义计算路径。参数沿着这条路径提供学习所得的数值。权重对信号进行乘法运算,而偏置和其他参数类型执行各自的作用。训练会调整这些数值;推理则使用调整后的数值处理新输入。
接下来阅读什么是模型参数?,了解包含权重、偏置和其他学习所得数值的更广泛类别。阅读模型参数与模型权重的区别,了解两者的直接区别。返回什么是神经网络?,了解带权重的层如何组合成完整网络;或者继续阅读什么是 AI 训练?,了解这些数值是如何学习得到的。