会读
看到 3x、x₄、(a+b)² 时,能逐字翻译它们的含义。
图中“字母公式机器”把具体分数装进字母盒子:数字可以换,平均数规则保持不变。
机器学习常常要处理成百上千个数字。如果每次都把数字完整抄一遍,规律会被淹没。我们需要一种语言,能写出所有同类问题都适用的规则。
看到 3x、x₄、(a+b)² 时,能逐字翻译它们的含义。
能代入数字、使用分配律,并计算一组数据到候选值的平方误差。
能说明为什么平均数会出现在“寻找最小误差”的机器学习任务中。
假设三次数学测验是 56、78、91 分。要算平均分,我们写 (56+78+91)÷3。换一位同学,三个数字变了,但“相加再除以 3”的规则没有变。
a、b、c 是三个盒子的名字。把不同分数放进去,同一条公式仍然能工作。
a、b、c 盒子里的内容变了,但“相加再除以 3”的规则完全没有变。这就是使用字母的真正原因。常用来表示已知数或固定参数。
例如三次已经得到的分数。
常用来表示会变化或待寻找的数。
例如我们正在尝试的预测值 x。
常用来表示位置编号。
例如第 i 个数据,但这只是习惯,不是死规定。
a 在一道题里可以是 56,在另一道题里可以是 82;先看定义,再计算。训练时和预测时的数据都可能改变,公式不能只为一个数字服务。字母让我们先写下通用关系,再把每个样本的具体数值代进去。
三个数的平均数,就是总和平均分给三份。括号很重要:它告诉我们先把三个数加起来,再除以 3。
a + b + c把三个数据合成总量。÷ 3总量平均分成 3 份,因为现在有 3 个数据。(a+b+c)÷3得到这三个数据的“中心位置”——平均数。字母已经让公式变短,数学家还会省略乘号。数字写在字母前面时,3x 就表示“3 乘 x”。
如果 x=4,那么 3x=3×4=12。它绝不是 34,也不是 x³。
3x、x₃ 和 x³ 是三件不同的事3x 是 3 乘 x;x₃ 是第 3 个 x;x³ 是 x 自己相乘 3 次。数字的位置决定含义。看到字母式时,先把字母替换为括号里的具体数字,再按运算顺序计算。
3 和平方 ² 做的事情不同。买 3 份套餐,每份有一瓶水 x 元和一块面包 y 元。可以先算一份套餐再乘 3,也可以分别算 3 瓶水和 3 块面包。
括号外的 a 必须分别乘括号里的 x 和 y,不能漏掉任何一项。
a 是快递员:括号里有几户人家,它就必须把包裹送到几户。3(x+4)=3x+4右边漏乘了 4。正确是 3x+12。可以代入 x=2 检查:左边是 18,错误写法只有 10。(a+b)² 表示边长为 a+b 的正方形面积。把大正方形切开,会得到四块,而不是两块。
中间的两块长方形面积都是 ab,所以绝不能漏掉 2ab。
(3+2)² = 9+12+4 = 25
a²:左上正方形2ab:两块一样的长方形b²:右下正方形预测高了 3 和预测低了 3,一个误差是 +3,一个是 −3;直接相加会互相抵消。平方后都变成 9,而且较大的错误会受到更重惩罚。
如果有 1000 个分数,不可能一直发明新字母。我们用同一个字母 x 表示“同一类数据”,再用右下角的小数字表示它的位置。
xᵢ 读作“x 下标 i”,表示第 i 个数据;n 常表示数据总数。
下标 1 是位置标签,不是“x 乘 1”,也不是“一次方”。
xᵢ第 i 个数据;i 可以依次取 1、2、3……xₙ第 n 个数据;如果一共有 n 个,它就是最后一个。程序里的 data[0]许多编程语言从 0 开始编号;数学教材常从 1 开始。规则不同,含义相同:都是定位。有三个数据 2、5、8。我们只用一个数 x 代表它们。怎样判断某个候选值好不好?分别计算每个数据和 x 的距离,再平方、相加。
损失函数就是机器能读懂的“评分尺”。人能说“5 看起来比较合适”,机器只会比较数字;于是我们规定:损失越小,猜得越好。
假设同一条配送路线最近三天分别晚到 2、5、8 分钟。最简单的模型暂时不看天气和路况,只学习一个固定数 x,作为“这条路线通常会晚几分钟”的预测。
三天真实发生的晚点分钟数,是模型必须尊重的证据。
这是只有一个参数的最小模型;它对每个相似日子先给同一个答案。
把三天的错误合成一个分数,才能公平比较不同候选值。
问得对。本章故意从最简单的基准模型开始:它还不会看天气、距离等条件,只学习“通常是多少”。等我们加入输入特征后,模型就能根据不同情况给出不同预测。这里的简单模型是起点,不是机器学习的全部。
E 可以理解为 Error(误差)。它不是一个固定数,因为换一个候选值 x,总误差也会改变。
x=2 完美符合第一天,却离第三天很远;x=8 也有同样问题。x=5 没有照顾某一天而牺牲另外两天,所以总损失最小。如果模型 A 在第一天更准、模型 B 在第三天更准,仅靠“看起来不错”无法决定谁更好。损失把所有样本的错误合成一个统一分数,计算机才能完成三件事:比较两个模型、判断这次调整有没有进步、决定下一步往哪里改。
把每个 x 对应的总误差画成点,会形成一条 U 形曲线。曲线越低,代表这个候选值让三个数据的整体误差越小。
x=2、3、4、5…,每个位置都是一个候选参数。E(x) 越大,整体错误越严重;越小越好。(5,18) 表示猜 5 时,总损失是 18。x → E(x),再把这些点画出来。所谓“走到谷底”,其实就是让损失数字从 45、30、21 一路下降到 18。最直观的方法是试一下旁边的位置:如果损失下降,就继续朝那个方向移动。真实机器学习常用“梯度”更快地判断下坡方向;你现在只需把它理解成观察哪边更低。
x=3,损失变成 30,说明应该向右走。x=7,损失变成 30,说明应该向左走。因为一个固定的 x 不可能同时等于 2、5、8。最低损失是 18,不代表训练失败,而是说明这个只有一个参数的简单模型能力有限。加入天气、距离等特征后,真实模型可以对不同日子给出不同预测。
把代表值向右移动,会离左边的数据更远、离右边的数据更近。平均数是平方误差彼此平衡的位置。对任意一组数据,平方误差和最小时的代表值就是平均数。
看不懂这一段也不影响继续学习。它只是把刚才图上的“最低点”变成严格的代数结论。
E(x)=(2−x)²+(5−x)²+(8−x)²E(x)=3x²−30x+93E(x)=3(x−5)²+18(x−5)² ≥ 0x=5 时,它才等于 0,所以最小总误差是 18。刚才的 x 可以看成一个极简模型的参数。机器不断尝试不同的 x,用损失函数评分,再朝误差更小的方向调整。这个反复降低损失的过程,就是“训练”。
x=12 变成 18,再变成 20。先猜候选值 x,例如 2。
用同一个 x 代表所有数据。
平方误差和告诉我们整体错得多不多。
不断调整,直到损失不能再变小。
参数 parameter模型中可以被调整的数;本例是 x。损失 loss把“模型有多差”压缩成一个可比较的数;本例是 E(x)。优化 optimization寻找让损失尽可能小的参数;本例的最佳参数是 5。x 一个。w₁、w₂、b 是要学习的参数。模型读取距离、天气和时段,预测 28 分钟;真实用了 30 分钟。训练时把这 2 分钟误差计入许多订单的总损失。
面积、楼层、位置都有自己的参数。模型预测 105 万,真实成交 100 万;优化器调整多个参数,让许多房子的总损失下降。
模型根据星期、天气和历史销量预测 210 份,实际卖出 220 份。损失帮助模型判断新的参数是否比昨天更好。
本章只有一个参数,损失曲线是清楚的 U 形。真实模型可能有许多参数,损失图更像有山脊、平地和多个低洼处的复杂地形;调整一步的大小叫“学习率”,太大可能跨过谷底,太小又会走得很慢。你暂时不需要计算它们,只需记住:寻找更小损失的核心思想没有变。
本章是一个最小模型:只寻找一个代表值。现实中的图像识别模型可能有数百万甚至更多参数,但基本逻辑仍相似——定义损失、调整参数、让损失下降。聚类算法 K-means 中的“聚类中心”也会用到平均数与平方距离。
3x 是乘法,x₃ 是编号,x³ 是三次方。2ab。开米和米悦想在周六早晨给爸爸一个小惊喜:等他买面包回来,桌上的牛奶既不能早早凉掉,也不能还没热好。她们没有从公式开始,而是先翻出三个旧周六留下的等待记录。
前一个周六,爸爸很快就带着面包回来,米悦还没来得及热牛奶;再前一个周六,她提前端上桌,牛奶等到没有热气。米悦不想再把早餐变成碰运气。
开米翻出三条旧计时带:从爸爸发来“买到了”的消息,到门锁响起,分别等了 2 分钟、5 分钟和 8 分钟。米悦伸手去拿最短的一条,因为她最不喜欢等待。
开米想做一张下周还能继续用的记录卡。如果每次都把 2、5、8 印死在卡上,新周六一来,整张卡就要重做。她画了三个空盒,先叫它们 a、b、c。
米悦把三条计时带换着塞进盒子,终于明白:字母不是神秘数字,而是“这个位置以后会装一个值”的名字。开米又把等待旋钮叫作 x,因为 x 还要试很多次,并没有提前决定。
米悦想在卡片上写“有三份 x”,先把 3 放到 x 的脚边,又举到 x 的头顶。开米没有擦掉,而是拿来木块,让三个写法各自做一次工作。
米悦给三个位置起了小名:“几份座”“号码座”和“连乘座”。这样一来,她不再只看见一个小小的 3,而会先问它坐在哪里。
爸爸出门前,姐妹先摆三份早餐。每份都有一块 x 元的面包和一杯 y 元的酸奶。米悦写成 3x+y,开米却指了指两只空着酸奶格的盘子。
括号外的 3 要分给里面每一项。随后,她们用两种花布拼边长为 a+b 的正方形隔热垫。两个角落之外,还剩两条同样大小的长方形,谁也不能凭空消失。
门关上后,米悦立刻把旋钮推到 2。这样确实能完美配合最快的一天,可 5 和 8 仍离它很远。开米让每条记录都算一次“真实等待减去候选时间”,再把结果平方。
E 是总损失:不是某一天的错误,而是三天共同给 x 打出的分数。平方让正负误差都留下来,也让离得特别远的候选值受到更明显的惩罚。
开米没有直接说答案。她们继续试 3、4、6、7,把每个候选时间的总损失都用方块堆起来。两边越堆越高,中间只剩一处低低的谷底。
米悦把橙色旋钮从左边往右推:只要方块变少,就继续;一旦方块变多,就退回上一步。最后旋钮停在 5。她重新算了一遍,2、5、8 相加再除以 3,也正好得到 5。
橙色旋钮停在 5,米悦准时端出牛奶。可窗外突然下起大雨,五分钟过去,门锁没有响;又等了很久,浑身湿透的爸爸才提着面包回来。
米悦摸着凉掉的杯子,小声问:“我们不是已经找到最低点了吗?”开米没有马上回答,只把旧记录排开:那三天都是普通天气,也没有记录面包店前排了多少人。
姐妹终于明白:谷底只保证“在旧数据和旧规则里已经尽力”,并不保证每个新日子都正确。最小训练损失不是永远正确的证明。
姐妹又记录了几个周六。这一次,她们除了等待时间,还留下晴雨和排队情况。开米把模型写成一条会读取条件的规则,米悦负责把当天线索放进对应的小盒。
她们还保留了一个新周六,不让它参与调参数,只用来检查规则有没有学会。那天定时器响起不久,门锁也“咔哒”一声。米悦捧起仍有热气的杯子,却没有把记录卡收起来,而是把今天的结果放进下一轮资料。
字母给变化留座位,样本一起给参数评分;试一个数,算整组错,往低处改,再让新一天检验。
每道题选完马上反馈。答错后可以去对应知识点复习,再回来修改;章末报告仍会记住你第一次暴露的漏洞。