Vince Jiang

CSCI3230 / 辅导 · 本站更新

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材料中的联系信息。

不要把“迭代”想得神秘。它只是重复同一条规则,每轮的输出作为下一轮输入。你需要会一元求导和代数代入;不会向量时可以先完整理解下面的平方函数,再扩展为一组参数。

补充·先试一次:最小化 f(θ)=θ2f(\theta)=\theta^2,从 θ=3\theta=3 开始(此初值为教学自取)。如果向右移动0.1,平方变成9.61;向左移动0.1,变成8.41。当前向左更合适。但到了负数−3时方向应相反,因此不能事先规定永远减一个正数,需要由当前导数决定方向。

梯度的方向与迭代(p.4–6)

p.4 用下山类比:位置是参数,高度是目标函数值。p.5 的梯度把各坐标偏导放成向量;只有一个参数时,梯度就是普通导数。平方函数导数 f′(θ)=2θf'(\theta)=2\theta,在正数处为正,在负数处为负。减去它的一小部分,会朝0移动。

θt+1=θt−αf′(θt). \theta_{t+1}=\theta_t-\alpha f'(\theta_t).

tt 是迭代次数,α\alpha 为学习率;先在旧位置 θt\theta_t 求导,再减去学习率乘导数。p.6 就是这个循环的多维形式。p.5 原 proposition 的“ascent or descent”需严格区分:正梯度是最陡上升,负梯度是最陡下降,p.6 的减号不可省略。

p.5原多维符号为 f:Rn→Rf:\mathbb R^n\to\mathbb R,Θ=(θ1,…,θn)T\Theta=(\theta_1,\ldots,\theta_n)^T,梯度逐项为 ∇f(Θ)=(∂f/∂θ1,…,∂f/∂θn)T\nabla f(\Theta)=(\partial f/\partial\theta_1,\ldots,\partial f/\partial\theta_n)^T。原proposition取二阶可微函数;“最陡”是在欧氏单位方向约束下比较方向导数,零梯度点没有由一阶信息给出的唯一下降方向。p.6伪代码先确认 α>0\alpha>0、随机初始化 Θ0\Theta_0,再在未满足收敛判据时重复 Θ←Θ−α∇f(Θ)\Theta\leftarrow\Theta-\alpha\nabla f(\Theta)。

补充·同一初值换步长:从3出发,导数6。若学习率0.1,新参数是2.4,平方5.76;若学习率0.4,新参数0.6,平方0.36;若学习率1,新参数−3,平方仍9。三次使用的下降方向都来自同一个导数,却不代表每个步长都真的降低目标。

所以“负梯度方向局部下降最快”与“一大步之后目标更低”是两个陈述。方向是局部信息,步幅太大会越过低点。多维时整组参数必须同步使用旧梯度,不要更新一个再拿新值求另一个。

补充·把直觉接到一阶近似:在当前参数附近,若小位移记为 Δ\Delta,可用切平面近似函数:

f(θ+Δ)≈f(θ)+∇f(θ)TΔ. f(\theta+\Delta)\approx f(\theta)+\nabla f(\theta)^T\Delta.

Δ\Delta 与参数形状相同,右侧点积是一个标量。代入负梯度位移 Δ=−α∇f(θ)\Delta=-\alpha\nabla f(\theta),近似变化为 −α∥∇f(θ)∥22-\alpha\lVert\nabla f(\theta)\rVert_2^2,非零梯度时为负。这里是近似式,忽略了高阶变化,因而也解释为何不能凭它保证很大一步仍下降。定义梯度更新只需当前位置可微,不必先有整套Hessian证明。

必须选择的四件事(p.7)

p.7 给运行前必须确定的设置,下面解释每一项解决什么问题。

设置 意义 平方函数中的对应物
目标与梯度 知道要降低什么,以及局部变化方向 平方与两倍参数
初始参数 决定从哪里开始 例如10
学习率 决定每次走多远 例如0.4或1
停止条件 决定何时足够好 目标误差是否不超过0.01

p.7初始化通常从选定分布采样;目标梯度尽量写出解析形式,以便精确计算每轮的梯度。这里的“precise gradients”指解析求导,不能推出浮点计算完全无误差或优化器一定找到精确最优解。

讲义也提到相邻两次结果距离作为停止线索。但不同判据不能混用:参数变化小、损失变化小、损失离最优值近,是三件事。举例,学习率极小会让参数几乎不动,但当前点可能离最低点很远。实践中常加迭代上限避免无限循环;达到上限意味着停下,并不意味着已收敛。

补充·参数单位会影响步长:如果目标换成 100θ2100\theta^2,同一点的导数变成原来的100倍,同一个学习率可能过大。不要把某个平方函数适用的学习率范围当通用常数。先明确目标是否求和还是平均、特征是否缩放,再比较更新大小。

课堂 Quiz:为什么永远到不了阈值(p.8–10)

题面(T02-Gradient-Descent-2025T1.pdf · Problem · PDF p.8;公式按讲义重排):

p.8 Apply gradient descent to find the θ∗\theta^{\ast} that minimizes f(θ)=θ2f(\theta)=\theta^2. We set α=1.0\alpha=1.0, θ\theta is initialized to 10, and regard the algorithm converges once ∣f(θ∗)−f(θ)∣≤0.01\lvert f(\theta^{\ast})-f(\theta)\rvert\le0.01. What is the number of iterations required at least to guarantee the convergence?

选项依次为33、16、7次、不收敛。p.9 是标出答案的重复题页,p.10 给推导。先只算前两步,不要凭“梯度下降总能下降”选有限次数。

参考答案

最优参数0、最优目标0,判据为 θ2≤0.01\theta^2\le0.01。梯度为 2θ2\theta,代入学习率1:

θt+1=θt−1(2θt)=−θt. \theta_{t+1}=\theta_t-1(2\theta_t)=-\theta_t.

初值10,第一步−10,第二步10,之后重复。每次目标都为100,离阈值0.01很远,所以不收敛,选D。p.10 原式最后写成 −θi-\theta_i 是下标笔误;由前面的旧值更新,正确关系应为 θi=−θi−1\theta_i=-\theta_{i-1}。

现在再检查停止判据:如果误用“相邻两次损失相同就停止”,本题会在坏位置立即停下,因为两边平方相同。它只能说明观察到损失没变,不能说明达到所需最优目标。

补充·一条公式读懂不同步长:更新倍率是 1−2α1-2\alpha。倍率在0与1之间时同侧缩小;在−1与0之间时左右交替但振幅缩小;等于−1时如本题来回震荡;绝对值大于1时从非零起点越来越远。此分析专属平方函数,而非任何复杂损失的普遍证明。

补充 · 参数变化很小,也可能只是步长太小(通识讲解;演示数据不属于原题)。

更新量满足 Δθ=−α∇L\Delta\theta=-\alpha\nabla L。如果学习率极小,即使梯度并不小,参数变化也会小。演示 L(θ)=(θ−10)2L(\theta)=(\theta-10)^2,初值0,梯度−20;取学习率 10−810^{-8},一次只移动 2×10−72\times10^{-7},但当前位置仍远离最小点10。仅凭“参数几乎没动”不能证明收敛。

因此停止记录最好同时说明触发的是参数变化、损失变化、梯度大小还是迭代上限。还应先检查所有值有限;NaN的比较行为不能当成满足容差。若要诊断步长问题,可在同一初值下手算几种合理尺度的一步,观察损失是否下降,但不通过无限增加轮数来掩盖一个不合适的停止条件。

补充:参数几乎不动,可能只是学习率太小

自编目标 f(θ)=θ2f(\theta)=\theta^2,初值10,学习率 10−810^{-8}。梯度为20,一次更新只减少 2×10−72\times10^{-7};如果程序用“参数变化小于 10−610^{-6}”停机,它马上宣布停止,但参数仍约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为讲义练习,不据此宣称本学期考试范围。