变量、值与 AI 模型中的三种角色
通过区分变量名与其当前值,学习如何阅读模型方程,并在一个微型评分模型中追踪输入、参数和输出。
AI 模型可以包含数百万甚至数十亿个存储的数字,每次请求都会接收一组新的数字,并将另一组数字作为答案输出。要读懂其中的数学,第一项所需的技能出人意料地简单:学会区分一个名称与当前赋予该名称的值。
学完本课后,你将能够阅读一个简短的模型方程,识别其中的输入、参数和输出,代入它们的值,并解释哪些量会因不同原因而变化。
《机器学习数学》一书一开始就把数学视为表达机器学习思想的精确语言。变量是这种语言的一部分。借助变量,我们可以描述一个适用于许多示例的规则,而不必为每个示例分别写出计算过程。
名称可以不随当前值改变
假设一个微型模型为某个项目计算分数:
这四个字母是变量。每个变量都是一个具有特定角色的名称:
- 是当前项目提供的输入特征;
- 是控制该特征对分数影响强度的权重;
- 是让所有分数都平移相同数值的偏置;以及
- 是模型输出的分数。
对于一个项目,当前值可能是
代入就是在这次计算中用这些值替换名称:
此时 的值是 。符号 并没有永久变成 ;换一个输入或换一组模型参数,都可能得到不同的值。
中间乘积为 4.50. 变量名称 x, w, b, 和 s 不会因为它们当前的数值改变而改变。
这个交互模型展示了一个重要的区分。移动 控件会改变呈现给模型的示例;移动 或 控件会改变模型本身。两种操作都会改变 ,但原因不同。
输入、参数和输出承担不同的工作
在机器学习中,变量常常按照其值的获得方式分组。
| 角色 | 值的来源 | 通常何时改变 | 微型模型中的符号 |
|---|---|---|---|
| 输入 | 当前的数据示例 | 不同示例或请求之间 | |
| 参数 | 训练期间学习到的值 | 优化器更新模型时 | 、 |
| 输出 | 模型的计算结果 | 输入或参数改变时 |
这个区分可以避免一种常见的阅读错误。如果你看到
下标 表示 和 属于第 个示例。同一组参数 和 会被重复使用。对于三个输入,一个模型可以产生三个分数:
| 示例 | 输入 | 计算过程 | 输出 |
|---|---|---|---|
| 1 | |||
| 2 | |||
| 3 |
这一行之所以改变,是因为示例改变了。规则本身保持不变。
训练改变的是参数,而不是符号的含义
训练前,模型可能有 和 。看到数据后,优化器可能将它们更新为 和 。符号仍然表示相同的角色,但它们存储的值已经改变。
这是理解训练最简单的方式:
- 选择当前的参数值;
- 用一些输入计算输出;
- 衡量模型的误差;
- 更新参数值;以及
- 重复上述过程。
后续课程会把每一步都讲得更精确。现在先注意变量为何不可或缺。表达式 描述了训练前、训练中以及训练后的计算。只有赋予变量的值记录了模型的当前状态。
在代码中,同样的区分体现在函数参数和存储的值之间:
def score(x, weight, bias):
return weight * x + bias
weight = 1.5
bias = -1.0
first_score = score(x=1.0, weight=weight, bias=bias)
second_score = score(x=3.0, weight=weight, bias=bias)
x、weight、bias 以及返回的分数都是名称。绑定到它们的数字是值。Python 名称和数学变量在每个技术细节上并不完全相同,但这个类比很有用:两者都能表达一个通用操作,然后用某个具体状态对它求值。
一个边界:字母本身不会告诉你它的角色
没有一条普遍规则规定 必须是输入,或 必须是权重。作者会选择并定义符号。在另一个方程中, 可能是要优化的参数,而 可能是观测数据。
另一个边界是类型。变量不一定只保存一个实数。它可以命名一个列表、矩阵、图像、词元序列、概率分布,甚至一个函数。名称与值的区分仍然适用。接下来的课程会为这些更丰富的对象提供精确的语言。
检查你的理解
问题 1
在 s = wx + b 中,如果 x 由当前请求提供,哪些符号是参数?
显示分步解答
请求提供 ,所以 是输入。经过学习或存储的量是 和 ,因此它们是参数。方程计算 ,所以 是输出。
分类结果是:
问题 2
当 x = 4、w = -0.5 且 b = 3 时,计算分数。展示每一步代入过程。
显示分步解答
从模型规则开始:
代入三个当前值:
因此,在这个模型状态和这个输入下,输出变量 的值为 。
问题 3
输入从 x = 2 变为 x = 5,而 w 和 b 保持不变。模型改变了吗?请解释。
显示分步解答
没有。定义模型规则的参数保持不变,所以模型没有改变,只是计算了另一个示例。
输出通常会改变,因为 出现在 中;但仅凭输出改变,无法判断模型是否改变。我们必须弄清楚改变的是哪个底层值:输入值,还是参数值。
问题 4
一次训练步骤将 w 从 1.5 改为 1.4。什么保持不变,什么发生了改变?
显示分步解答
符号 及其作为模型权重的角色保持不变。赋予它的值从 变为 。
如果 和 保持不变,输出的变化为
这也说明,参数更新的影响取决于当前的输入值。
问题 5
为什么不能安全地假设名为 x 的符号总是输入?
显示分步解答
数学符号的含义来自其定义,而不是来自字母本身。许多作者用 表示输入,但在另一个问题中, 可以被定义为参数、待求解的未知量或随机变量。
安全的阅读流程是:
- 找到定义该符号的句子;
- 记录它允许的类型或集合;
- 确定它是被观测的、被选择的、被学习的,还是被计算的;以及
- 在后续方程中始终按照这份契约理解它。