AI 数学课程 · 第 1 课,共 180

变量、值与 AI 模型中的三种角色

通过区分变量名与其当前值,学习如何阅读模型方程,并在一个微型评分模型中追踪输入、参数和输出。

分享这篇文章

AI 模型可以包含数百万甚至数十亿个存储的数字,每次请求都会接收一组新的数字,并将另一组数字作为答案输出。要读懂其中的数学,第一项所需的技能出人意料地简单:学会区分一个名称与当前赋予该名称的

学完本课后,你将能够阅读一个简短的模型方程,识别其中的输入、参数和输出,代入它们的值,并解释哪些量会因不同原因而变化。

《机器学习数学》一书一开始就把数学视为表达机器学习思想的精确语言。变量是这种语言的一部分。借助变量,我们可以描述一个适用于许多示例的规则,而不必为每个示例分别写出计算过程。

名称可以不随当前值改变

假设一个微型模型为某个项目计算分数:

s=wx+b.s = wx + b.

这四个字母是变量。每个变量都是一个具有特定角色的名称:

  • xx 是当前项目提供的输入特征;
  • ww 是控制该特征对分数影响强度的权重;
  • bb 是让所有分数都平移相同数值的偏置;以及
  • ss 是模型输出的分数。

对于一个项目,当前值可能是

x=3,w=1.5,b=1.x = 3, \qquad w = 1.5, \qquad b = -1.

代入就是在这次计算中用这些值替换名称:

s=wx+b=(1.5)(3)+(1)=4.51=3.5.\begin{aligned} s &= wx + b \\ &= (1.5)(3) + (-1) \\ &= 4.5 - 1 \\ &= 3.5. \end{aligned}

此时 ss 的值是 3.53.5。符号 ss 并没有永久变成 3.53.5;换一个输入或换一组模型参数,都可能得到不同的值。

改变数值时,变量名称所表示的角色保持不变。这个小模型计算 s = wx + b.
输入x = 3.0随示例而变化
权重w = 1.5学习得到的参数
偏置b = -1.0学习得到的参数
得分s = 3.503.0 × 1.5 + -1.0

中间乘积为 4.50. 变量名称 x, w, b, s 不会因为它们当前的数值改变而改变。

这个交互模型展示了一个重要的区分。移动 xx 控件会改变呈现给模型的示例;移动 wwbb 控件会改变模型本身。两种操作都会改变 ss,但原因不同。

输入、参数和输出承担不同的工作

在机器学习中,变量常常按照其值的获得方式分组。

角色值的来源通常何时改变微型模型中的符号
输入当前的数据示例不同示例或请求之间xx
参数训练期间学习到的值优化器更新模型时wwbb
输出模型的计算结果输入或参数改变时ss

这个区分可以避免一种常见的阅读错误。如果你看到

si=wxi+b,s_i = wx_i + b,

下标 ii 表示 xix_isis_i 属于第 ii 个示例。同一组参数 wwbb 会被重复使用。对于三个输入,一个模型可以产生三个分数:

示例 ii输入 xix_i计算过程输出 sis_i
111(1.5)(1)1(1.5)(1)-10.50.5
233(1.5)(3)1(1.5)(3)-13.53.5
32-2(1.5)(2)1(1.5)(-2)-14-4

这一行之所以改变,是因为示例改变了。规则本身保持不变。

训练改变的是参数,而不是符号的含义

训练前,模型可能有 w=0.2w=0.2b=0b=0。看到数据后,优化器可能将它们更新为 w=1.5w=1.5b=1b=-1。符号仍然表示相同的角色,但它们存储的值已经改变。

这是理解训练最简单的方式:

  1. 选择当前的参数值;
  2. 用一些输入计算输出;
  3. 衡量模型的误差;
  4. 更新参数值;以及
  5. 重复上述过程。

后续课程会把每一步都讲得更精确。现在先注意变量为何不可或缺。表达式 s=wx+bs=wx+b 描述了训练前、训练中以及训练后的计算。只有赋予变量的值记录了模型的当前状态。

在代码中,同样的区分体现在函数参数和存储的值之间:

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)

xweightbias 以及返回的分数都是名称。绑定到它们的数字是值。Python 名称和数学变量在每个技术细节上并不完全相同,但这个类比很有用:两者都能表达一个通用操作,然后用某个具体状态对它求值。

一个边界:字母本身不会告诉你它的角色

没有一条普遍规则规定 xx 必须是输入,或 ww 必须是权重。作者会选择并定义符号。在另一个方程中,xx 可能是要优化的参数,而 ww 可能是观测数据。

另一个边界是类型。变量不一定只保存一个实数。它可以命名一个列表、矩阵、图像、词元序列、概率分布,甚至一个函数。名称与值的区分仍然适用。接下来的课程会为这些更丰富的对象提供精确的语言。

检查你的理解

问题 1

在 s = wx + b 中,如果 x 由当前请求提供,哪些符号是参数?

显示分步解答

请求提供 xx,所以 xx 是输入。经过学习或存储的量是 wwbb,因此它们是参数。方程计算 ss,所以 ss 是输出。

分类结果是:

输入: x,参数: w,b,输出: s.\text{输入: }x, \qquad \text{参数: }w,b, \qquad \text{输出: }s.

问题 2

当 x = 4、w = -0.5 且 b = 3 时,计算分数。展示每一步代入过程。

显示分步解答

从模型规则开始:

s=wx+b.s=wx+b.

代入三个当前值:

s=(0.5)(4)+3=2+3=1.\begin{aligned} s &= (-0.5)(4)+3 \\ &= -2+3 \\ &= 1. \end{aligned}

因此,在这个模型状态和这个输入下,输出变量 ss 的值为 11

问题 3

输入从 x = 2 变为 x = 5,而 w 和 b 保持不变。模型改变了吗?请解释。

显示分步解答

没有。定义模型规则的参数保持不变,所以模型没有改变,只是计算了另一个示例。

输出通常会改变,因为 xx 出现在 s=wx+bs=wx+b 中;但仅凭输出改变,无法判断模型是否改变。我们必须弄清楚改变的是哪个底层值:输入值,还是参数值。

问题 4

一次训练步骤将 w 从 1.5 改为 1.4。什么保持不变,什么发生了改变?

显示分步解答

符号 ww 及其作为模型权重的角色保持不变。赋予它的值从 1.51.5 变为 1.41.4

如果 xxbb 保持不变,输出的变化为

Δs=(1.4x+b)(1.5x+b)=0.1x.\Delta s = (1.4x+b)-(1.5x+b) = -0.1x.

这也说明,参数更新的影响取决于当前的输入值。

问题 5

为什么不能安全地假设名为 x 的符号总是输入?

显示分步解答

数学符号的含义来自其定义,而不是来自字母本身。许多作者用 xx 表示输入,但在另一个问题中,xx 可以被定义为参数、待求解的未知量或随机变量。

安全的阅读流程是:

  1. 找到定义该符号的句子;
  2. 记录它允许的类型或集合;
  3. 确定它是被观测的、被选择的、被学习的,还是被计算的;以及
  4. 在后续方程中始终按照这份契约理解它。

资料来源

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF