CSCI3230 T02 · Part 1/2 Gradient Descent
课程:CSCI3230 (ESTR3108) Fundamentals of Artificial Intelligence · 2025T1 本讲:T02,第 1 部分 / 共 2 部分 · 原件 T02-Gradient-Descent-2025T1.pdf(本地课件) p.1–10 定位:用一维反例判断步长、更新和停止条件,再进入 logistic 代码。 前后:下一份 Play with gradient descent in Python
版本边界:本篇依据本地2025T1 Tutorial 2,作为梯度下降的补充练习;不是本学期新发布的安排。PDF有11页,页脚总页数10是因为一道 Quiz 有重复答案页,下面一律用实际PDF页号。当前学期主线见 L03。
讲次、路线与问题(p.1–3)
p.1 是 Tutorial 2 标题,p.2 分成梯度下降与Python实践,p.3 为第一部分分节。这里先解决一个很具体的问题:给你一个函数,不直接代数求最小点,而是从某个位置出发,反复朝降低函数值的方向走,怎样知道下一步去哪?
p.1主讲TAN, Zelong,邮箱[email protected],办公室SHB 1楼121,所属CUHK计算机科学与工程系;这些是2025材料中的联系信息。
不要把“迭代”想得神秘。它只是重复同一条规则,每轮的输出作为下一轮输入。你需要会一元求导和代数代入;不会向量时可以先完整理解下面的平方函数,再扩展为一组参数。
补充·先试一次:最小化 ,从 开始(此初值为教学自取)。如果向右移动0.1,平方变成9.61;向左移动0.1,变成8.41。当前向左更合适。但到了负数−3时方向应相反,因此不能事先规定永远减一个正数,需要由当前导数决定方向。
梯度的方向与迭代(p.4–6)
p.4 用下山类比:位置是参数,高度是目标函数值。p.5 的梯度把各坐标偏导放成向量;只有一个参数时,梯度就是普通导数。平方函数导数 ,在正数处为正,在负数处为负。减去它的一小部分,会朝0移动。
是迭代次数, 为学习率;先在旧位置 求导,再减去学习率乘导数。p.6 就是这个循环的多维形式。p.5 原 proposition 的“ascent or descent”需严格区分:正梯度是最陡上升,负梯度是最陡下降,p.6 的减号不可省略。
p.5原多维符号为 ,,梯度逐项为 。原proposition取二阶可微函数;“最陡”是在欧氏单位方向约束下比较方向导数,零梯度点没有由一阶信息给出的唯一下降方向。p.6伪代码先确认 、随机初始化 ,再在未满足收敛判据时重复 。
补充·同一初值换步长:从3出发,导数6。若学习率0.1,新参数是2.4,平方5.76;若学习率0.4,新参数0.6,平方0.36;若学习率1,新参数−3,平方仍9。三次使用的下降方向都来自同一个导数,却不代表每个步长都真的降低目标。
所以“负梯度方向局部下降最快”与“一大步之后目标更低”是两个陈述。方向是局部信息,步幅太大会越过低点。多维时整组参数必须同步使用旧梯度,不要更新一个再拿新值求另一个。
补充·把直觉接到一阶近似:在当前参数附近,若小位移记为 ,可用切平面近似函数:
与参数形状相同,右侧点积是一个标量。代入负梯度位移 ,近似变化为 ,非零梯度时为负。这里是近似式,忽略了高阶变化,因而也解释为何不能凭它保证很大一步仍下降。定义梯度更新只需当前位置可微,不必先有整套Hessian证明。
必须选择的四件事(p.7)
p.7 给运行前必须确定的设置,下面解释每一项解决什么问题。
| 设置 | 意义 | 平方函数中的对应物 |
|---|---|---|
| 目标与梯度 | 知道要降低什么,以及局部变化方向 | 平方与两倍参数 |
| 初始参数 | 决定从哪里开始 | 例如10 |
| 学习率 | 决定每次走多远 | 例如0.4或1 |
| 停止条件 | 决定何时足够好 | 目标误差是否不超过0.01 |
p.7初始化通常从选定分布采样;目标梯度尽量写出解析形式,以便精确计算每轮的梯度。这里的“precise gradients”指解析求导,不能推出浮点计算完全无误差或优化器一定找到精确最优解。
讲义也提到相邻两次结果距离作为停止线索。但不同判据不能混用:参数变化小、损失变化小、损失离最优值近,是三件事。举例,学习率极小会让参数几乎不动,但当前点可能离最低点很远。实践中常加迭代上限避免无限循环;达到上限意味着停下,并不意味着已收敛。
补充·参数单位会影响步长:如果目标换成 ,同一点的导数变成原来的100倍,同一个学习率可能过大。不要把某个平方函数适用的学习率范围当通用常数。先明确目标是否求和还是平均、特征是否缩放,再比较更新大小。
课堂 Quiz:为什么永远到不了阈值(p.8–10)
题面(T02-Gradient-Descent-2025T1.pdf · Problem · PDF p.8;公式按讲义重排):
p.8 Apply gradient descent to find the that minimizes . We set , is initialized to 10, and regard the algorithm converges once . What is the number of iterations required at least to guarantee the convergence?
选项依次为33、16、7次、不收敛。p.9 是标出答案的重复题页,p.10 给推导。先只算前两步,不要凭“梯度下降总能下降”选有限次数。
参考答案
最优参数0、最优目标0,判据为 。梯度为 ,代入学习率1:
初值10,第一步−10,第二步10,之后重复。每次目标都为100,离阈值0.01很远,所以不收敛,选D。p.10 原式最后写成 是下标笔误;由前面的旧值更新,正确关系应为 。
现在再检查停止判据:如果误用“相邻两次损失相同就停止”,本题会在坏位置立即停下,因为两边平方相同。它只能说明观察到损失没变,不能说明达到所需最优目标。
补充·一条公式读懂不同步长:更新倍率是 。倍率在0与1之间时同侧缩小;在−1与0之间时左右交替但振幅缩小;等于−1时如本题来回震荡;绝对值大于1时从非零起点越来越远。此分析专属平方函数,而非任何复杂损失的普遍证明。
补充 · 参数变化很小,也可能只是步长太小(通识讲解;演示数据不属于原题)。
更新量满足 。如果学习率极小,即使梯度并不小,参数变化也会小。演示 ,初值0,梯度−20;取学习率 ,一次只移动 ,但当前位置仍远离最小点10。仅凭“参数几乎没动”不能证明收敛。
因此停止记录最好同时说明触发的是参数变化、损失变化、梯度大小还是迭代上限。还应先检查所有值有限;NaN的比较行为不能当成满足容差。若要诊断步长问题,可在同一初值下手算几种合理尺度的一步,观察损失是否下降,但不通过无限增加轮数来掩盖一个不合适的停止条件。
补充:参数几乎不动,可能只是学习率太小
自编目标 ,初值10,学习率 。梯度为20,一次更新只减少 ;如果程序用“参数变化小于 ”停机,它马上宣布停止,但参数仍约10、损失仍约100,离最优点0很远。
因此参数变化阈值与梯度阈值不是同一件事:标准更新的步幅为学习率乘梯度大小,步幅小可能来自梯度小,也可能来自学习率小。目标值变化阈值又是第三种检查,它还依赖目标的尺度。把目标整体乘100后最优点不变,但同样数值的梯度与损失阈值含义变了。
实际学习程序可同时记录损失、梯度大小、参数步幅与迭代上限,并写明停止原因。到达上限应报告“到达上限”,不能改名为“收敛”;出现NaN或无穷应单独报错,不让一个比较表达式的意外结果结束循环。这里补的是停止条件的解释,未改变原Quiz给出的目标阈值。
本讲核心考点
- 先明确目标、初值、步长与停止判据,再谈运行结果(p.7,C级通识)。
- 学习率1使平方函数从非零点来回振荡,损失不下降(p.8–10,讲义Quiz)。
- 参数或损失变化小,不自动等于接近最优值(p.7及补充)。
附录
建议与 当前L03的0.4步长Quiz对照。只改一个学习率,更新倍率就从0.2变成−1,因此“同一初值同一目标”仍会有完全不同结果。下一份代码入口再把这条递推翻成程序。
来源与证据
逐页核对 T02-Gradient-Descent-2025T1.pdf(本地课件) PDF p.1–10,明确为2025T1旧辅导资料。已按更新公式纠正p.10下标笔误,未改原PDF。考试证据:本篇仅以此Tutorial Quiz为讲义练习,不据此宣称本学期考试范围。