[{"data":1,"prerenderedAt":379},["ShallowReactive",2],{"article:column:/column/math-beauty/gradient-descent-step-size":3},{"id":4,"title":5,"body":6,"description":12,"extension":368,"meta":369,"navigation":374,"path":375,"seo":376,"stem":377,"__hash__":378},"column/column/math-beauty/gradient-descent-step-size.md","顺着梯度走，步子多大才合适",{"type":7,"value":8,"toc":355},"minimark",[9,13,16,19,23,26,29,32,35,38,41,44,47,51,54,57,60,63,66,69,77,80,83,102,105,108,111,118,121,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,176,179,185,188,191,194,197,200,203,206,209,212,215,218,221,224,227,230,233,240,243,249,252,255,258,261,264,268,271,274,277,280,283,286,289,295,301,307,313,318,323,326,337,346,349,352],[10,11,12],"p",{},"先修：14 点积、欧氏长度与柯西—施瓦茨不等式；17 最小二乘；30 导数与局部线性；31 偏导与链式法则",[10,14,15],{},"导数告诉我们，截距往哪个方向挪一点，损失可能下降。上一章又把许多参数的局部影响算了出来。但拿到这些数，训练还没有发生：真正改动参数时，究竟该乘上多大的倍率？",[10,17,18],{},"本章仍用三条虚构读数(0,1)、(1,2)、(2,2)，预测为ŷ＝ax＋b，损失为三项平方误差之和。先只调截距，把整个迭代过程解出来；再让两个参数一起动，用平方展开算出一个确实可靠的步长范围。",[20,21,22],"h2",{"id":22},"把一次调整写成一条规则",[10,24,25],{},"固定a＝1/2，前两章已经得到",[10,27,28],{},"L(b)＝3(b−7/6)²＋1/6， L′(b)＝6b−7。",[10,30,31],{},"当导数为正，向较小的b移动；当导数为负，向较大的b移动。一条简单规则是",[10,33,34],{},"bₖ₊₁＝bₖ−ηL′(bₖ)＝bₖ−η(6bₖ−7)。",[10,36,37],{},"下标k表示已更新的次数，b₀是初始值。η读作eta，通常取正数，叫步长系数，在机器学习里也叫学习率。每次都先在当前bₖ重新求导，再更新，不能一直沿用最初的导数。",[10,39,40],{},"这里的η不是参数实际移动的距离。一次位移是−ηL′(bₖ)，大小是η|L′(bₖ)|；即使η固定，导数变小，实际步子也会缩短。本章一律在既定厘米单位下使用数值坐标，暂不更换目标或参数的尺度。",[10,42,43],{},"从b₀＝1出发，导数是−1。取η＝1/12，第一步来到13/12；那里导数变成−1/2，第二步只增加1/24，来到9/8。两个步子都是向右，长度却不同。至于能否一直靠近最优截距7/6，列出两步还不能作保证。",[10,45,46],{},"注意，执行更新只需要当前参数和导数，不需要先知道最优截距。我们此处预先知道7/6，是为了检查算法是否真的到达目标。算法怎样运行，与我们怎样证明它有效，是两件事。这个小例子当然可以直接配方求解；刻意改用迭代，是为了在能手算到底的地方检验一种更通用的思路。",[20,48,50],{"id":49},"不靠试跑直接算每一步的误差","不靠试跑，直接算每一步的误差",[10,52,53],{},"令eₖ＝bₖ−7/6，表示当前截距与最佳截距之间的带符号差。因为6bₖ−7＝6eₖ，更新规则立刻化成",[10,55,56],{},"eₖ₊₁＝(1−6η)eₖ。",[10,58,59],{},"原来每次更新，只把误差乘上同一个数！记q＝1−6η，连续代入便得到，对k≥1：",[10,61,62],{},"eₖ＝qᵏe₀， L(bₖ)−1/6＝3q²ᵏe₀²。",[10,64,65],{},"第一式描述参数误差，第二式描述超过最小值的那部分损失。两者不是同一个量：误差缩成一半，超额损失就缩成四分之一。",[10,67,68],{},"还要看清减去的1/6。三条读数并不能被这条直线同时满足，第17章已经证明最佳损失仍然大于0。算法应该消掉的是“比最优值多出的部分”，不是承诺消掉所有残差。若把损失不再接近0当作失败，就会把模型本身无法表达的差异，误怪到更新方法上。",[10,70,71,72,76],{},"对e₀≠0和固定的实数η，",[73,74,75],"strong",{},"收敛到最优截距7/6，当且仅当|1−6η|＜1，也就是0＜η＜1/3。"," 理由在于：当|q|＜1时，|q|ᵏ趋于0；当|q|≥1时，|q|ᵏ|e₀|始终不小于|e₀|，不可能趋于0。",[10,78,79],{},"这里用到的几何衰减也能看清：若0＜|q|＜1，写1/|q|＝1＋c，其中c＞0，则(1＋c)ᵏ≥1＋kc，因而|q|ᵏ≤1/(1＋kc)→0。q＝0时，第一步就把误差消掉。我们由此覆盖所有步数，不是把有限次实验当成收敛证明。",[10,81,82],{},"这个范围内外，还有几种不同的走法：",[84,85,86,90,93,96,99],"ul",{},[87,88,89],"li",{},"η＝1/12时，q＝1/2，误差在同一侧每次减半",[87,91,92],{},"η＝1/4时，q＝−1/2，误差左右交替，但绝对值仍每次减半",[87,94,95],{},"η＝1/6时，q＝0，一步到达最佳截距",[87,97,98],{},"η＝1/3时，q＝−1，在两侧等幅来回，损失不降",[87,100,101],{},"η＝1/2时，q＝−2，误差交替翻倍，超额损失每次变为四倍",[10,103,104],{},"分界点1/6两侧的区别也能从q读出。0＜η＜1/6时，0＜q＜1，误差不变号；1/6＜η＜1/3时，−1＜q＜0，误差每步变号。跨过最佳截距并不必然有害，只要跨过去之后距离更小，平方损失仍下降。",[10,106,107],{},"因此，步长加大并不意味着收敛更快。1/12和1/4相差三倍，却有完全相同的误差缩小倍率；再把η推近1/3，|q|反而接近1，缩小速度变慢。另一方面，η过分接近0时，q也接近1。一步到位的1/6来自这个特定二次式的系数，换一个目标，就不能照搬这个数字。",[10,109,110],{},"η＝0则完全不动；此时序列虽有极限，却没有从非最优点走向最优点。若一开始e₀＝0，任何固定η都使它停在原地，所以前面的“当且仅当”必须保留e₀≠0这个条件。",[10,112,113],{},[114,115],"img",{"alt":116,"src":117},"四种固定步长的相对误差轨迹：正半倍率和负半倍率均趋零，负一倍率等幅交替，负二倍率交替发散；发散图另标纵轴尺度","/collections-assets/math-beauty/ch32/01-error-multipliers.png",[10,119,120],{},"图1：纵轴是eₖ/e₀，要求e₀≠0。前两幅共用纵轴尺度；最右幅的纵轴刻度改为−64至64并明确标出。点间连线只帮助阅读离散更新，不代表中间也发生过迭代。",[20,122,124],{"id":123},"两个旋钮同时动时导数排成梯度","两个旋钮同时动时，导数排成梯度",[10,126,127],{},"现在放开a，完整损失是",[10,129,130],{},"L(a,b)＝(1−b)²＋(2−a−b)²＋(2−2a−b)²。",[10,132,133],{},"按第31章的办法，固定b对a求导，固定a对b求导，再按θ＝(a,b)的顺序排列，得到梯度",[10,135,136],{},"g＝∇L(θ)＝(∂L/∂a,∂L/∂b)",[10,138,139],{},"＝(10a＋6b−12，6a＋6b−10)。",[10,141,142],{},"∇读作nabla。它不是一个新的求导捷径，只是把各坐标的偏导收进同一个向量。其中第一项可以逐条核算：第一条预测b不受a影响，贡献为0；第二条贡献是2(a＋b−2)，第三条贡献是4(2a＋b−2)，相加得到10a＋6b−12。对b求偏导时，三条预测的局部倍率都是1，把三条贡献相加即可。",[10,144,145],{},"比如θ＝(0,0)时，g＝(−12,−10)，所以两个参数都略微增加，各自的一阶影响都会使损失下降。",[10,147,148],{},"但“一起增加”有很多比例，为什么偏偏按(12,10)的比例走？要公平地比较方向，先把所有候选方向的长度都定为1，免得一支箭头仅仅因为更长，就显得下降更多。",[20,150,151],{"id":151},"负梯度为什么是局部最陡方向",[10,153,154],{},"多元可微的含义，是存在下面这种局部线性表达：",[10,156,157],{},"L(θ＋δ)＝L(θ)＋g·δ＋r(δ)， |r(δ)|/‖δ‖→0。",[10,159,160],{},"这里δ是整组参数的小改变量，极限沿任意方向δ→0成立；仅仅各偏导存在，并不足以代替这个条件。本例是平方和，下一节会直接算出它的余项，因而不必靠图形猜测可微性。",[10,162,163],{},"取单位方向v，即‖v‖＝1，让δ＝tv。将损失变化除以非零t，再令t→0，余项除以t趋于0，得到方向导数g·v。它衡量沿指定方向每单位数值距离的一阶变化。[1]",[10,165,166],{},"第14章的柯西—施瓦茨不等式现在派上用场：",[10,168,169],{},"g·v≥−|g·v|≥−‖g‖‖v‖＝−‖g‖。",[10,171,172],{},"如果不限制方向长度，这个比较就没有有限的最小值：把一个负点积方向不断放大，点积还会更负，那只是在比较不同大小的位移。要求单位长度，才能把“朝哪里”从“走多少”中单独取出来。",[10,174,175],{},"当g≠0时，取v＝−g/‖g‖，点积恰为−‖g‖，达到所有单位方向中的最小值。因此负单位梯度是局部一阶下降最快的方向。这是比较点积得到的结论，不需要把高维损失想象成一座山。[2]",[10,177,178],{},"在θ＝(0,0)处，分别沿(1,0)、(0,1)走，一阶变化率为−12、−10；负单位梯度为(6,5)/√61，变化率是−2√61，约−15.62，确实更低。但这只比较同样短的步子在一阶上的表现，没有说沿该方向走任意远都更好。",[10,180,181],{},[114,182],{"alt":183,"src":184},"等比例方向坐标中的单位圆及四个单位方向，负单位梯度方向的点积为负二倍根号六十一，小于仅调整任一坐标的负12和负10","/collections-assets/math-beauty/ch32/02-unit-directions.png",[10,186,187],{},"图2：所有箭头长度都为1，横纵轴采用相同尺度。垂直于梯度的方向(5,−6)/√61点积为0，表示一阶变化为0，不表示实际损失完全不变。",[10,189,190],{},"若g＝0，上面的归一化不能计算，而且所有方向的一阶变化率都为0。此时不能仅凭梯度决定哪里更好；第33章会继续区分驻点、局部最优与全局最优。",[20,192,193],{"id":193},"让二次余项给步长划一道保证线",[10,195,196],{},"梯度下降把刚才的方向写成更新式θ新＝θ−ηg，实际位移长度为η‖g‖。两个偏导必须都在同一组旧参数上计算，再一起更新。如果先改a，再拿新a计算b的偏导，执行的已是另一条算法，不能直接使用这里的推导。",[10,198,199],{},"要从“一阶下降”走到“一整步之后仍下降”，还得控制被近似省掉的部分。",[10,201,202],{},"沿用第17章，X的三行是(0,1)、(1,1)、(2,1)，y＝(1,2,2)，L(θ)＝‖Xθ−y‖²。把θ改成θ＋δ，展开平方：",[10,204,205],{},"L(θ＋δ)＝L(θ)＋2(Xθ−y)·Xδ＋‖Xδ‖²",[10,207,208],{},"＝L(θ)＋g·δ＋‖Xδ‖²。",[10,210,211],{},"中间项收集δa、δb的系数，恰好就是刚才两个偏导。这是对任意δ成立的精确恒等式。余项为‖Xδ‖²，不是一个来历不明的“小误差”。",[10,213,214],{},"这里同时出现两种长度：‖δ‖量参数数值改动，‖Xδ‖量三个预测共同改变了多少。前者只有两个坐标，后者有三个，不能相互替换。矩阵X把参数空间里的动作送到预测空间；同样长的参数动作，送过去以后未必一样长。",[10,216,217],{},"把X的每一行记作xᵢ，逐行使用柯西—施瓦茨不等式：",[10,219,220],{},"‖Xδ‖²＝Σᵢ(xᵢ·δ)²≤Σᵢ‖xᵢ‖²‖δ‖²",[10,222,223],{},"＝(1＋2＋5)‖δ‖²＝8‖δ‖²。",[10,225,226],{},"这也补上了可微性的检查：余项除以‖δ‖不超过8‖δ‖，随δ→0而趋于0。现在令δ＝−ηg、η＞0，便得到",[10,228,229],{},"ΔL＝−η‖g‖²＋η²‖Xg‖²",[10,231,232],{},"≤−η(1−8η)‖g‖²。",[10,234,235,236,239],{},"所以只要g≠0且0＜η＜1/8，损失就严格下降。这是对本例所有当前参数都适用的",[73,237,238],{},"充分条件","，并非“超过它一定失败”的必要条件；逐行估计可能把余项放大了。",[10,241,242],{},"这条保证的作用在于，选择η时不必先猜当前点在哪条特殊方向上，也不必等试错后才知道是否下降。数值8来自本例三行的长度平方和；换数据、换权重或换模型，都要重新检查这个控制余项的常数。一个正确的证明总应告诉我们，哪些条件是可以搬走的结构，哪些数字只属于当前问题。",[10,244,245],{},[114,246],{"alt":247,"src":248},"同一坐标中比较负梯度更新的一阶预测、精确二次变化和二次上界；上界在0与八分之一之间为负，精确变化在八分之一处仍为负","/collections-assets/math-beauty/ch32/03-step-size-bound.png",[10,250,251],{},"图3：纵轴将损失变化除以当前‖g‖²；橙色是上界−η＋8η²，绿色是从(0,0)出发的精确变化。阴影只标充分保证区间，不把其外侧都判成失败。",[10,253,254],{},"手算一步核对：取θ₀＝(0,0)，L＝9，g＝(−12,−10)。η＝1/16给出θ₁＝(3/4,5/8)，三个预测是5/8、11/8、17/8，残差为3/8、5/8、−1/8，故",[10,256,257],{},"L(θ₁)＝(9＋25＋1)/64＝35/64。",[10,259,260],{},"原损失减小了541/64。这个数验证本次运算；保证下降的理由仍是前面的不等式。下降、长期收敛、找到全局最优，也仍是三个不同命题：一维迭代已由通项式证明，两参数部分此处只给出了逐步下降保证。",[10,262,263],{},"在计算机上，我们也不会真做无穷多次。停止时可以检查梯度大小或最近的损失变化，但“数字变化很小”还需解释：可能是已经接近驻点，也可能只是学习率过小。只有在额外条件下，停止信号才能转化成距离最优解多近的保证。这里保留这层区别，是为了避免把一个方便的程序判断，误当成完成优化的证明。",[20,265,267],{"id":266},"同一个最优点不代表同一个学习率","同一个最优点，不代表同一个学习率",[10,269,270],{},"若把平方误差和SSE改成三条记录的平均MSE，即M＝L/3，最优参数不变，因为除以正数不改变大小关系。但梯度变成g/3；想复制SSE下步长η产生的同一次更新，MSE的步长必须改为3η。固定a的一维收敛范围相应变为0＜ηM＜1。只报一个“好用的学习率”，却不报损失怎样定义，信息是不够的。",[10,272,273],{},"实际使用中，步长也可以不固定。例如先提出一个候选步长，计算更新后的目标；若没有满足预设的下降要求，就缩小步长后重试。这是回溯搜索的基本想法。[2] 不过，它增加了目标评估，并且仍需要说明下降要求和可微等条件。本章坚持固定步长，是为了把成功、振荡与发散的分界完整算清，不能把本章的通项式直接套到每步改变η的过程。",[10,275,276],{},"参数尺度同样重要。若另用c＝10b表示截距数值，目标写成F(a,c)＝L(a,c/10)，由链式法则，∂F/∂c＝(∂L/∂b)/10。对c做一次同系数更新，再换回b，b的改变量就成为原来直接更新时的1/100。",[10,278,279],{},"这不是物理问题突然换了答案，而是“等长步子”的约定换了：在(a,c)坐标里走1格，与在(a,b)坐标里走1格并非同一调整。本章的“最陡”始终依赖所选欧氏数值坐标，不能宣称它不受单位或度量影响。[2]",[10,281,282],{},"最后，这里每一步都使用同一目标的完整、确定性梯度。用随机小批量估计梯度，会引入另一层波动，不能直接套用本章每步必降的证明；一般神经网络的损失也没有本例现成的二次恒等式。",[10,284,285],{},"梯度给出了局部方向，余项约束了一步能走多远。把两者接起来，算法才从一个建议，变成带着条件的数学保证。",[20,287,288],{"id":288},"顺手试一下",[10,290,291,294],{},[73,292,293],{},"题目1："," 固定a＝1/2，从b₀＝1出发，取η＝1/4。求前三次更新后的b、L，以及第k次的超额损失。它是否单侧靠近最优点？",[10,296,297,300],{},[73,298,299],{},"提示："," e₀＝−1/6，q＝−1/2；先算eₖ，再加回7/6。",[10,302,303,306],{},[73,304,305],{},"参考答案："," b₁＝5/4，b₂＝9/8，b₃＝19/16。相应误差为1/12、−1/24、1/48；L依次为3/16、11/64、43/256。一般地，L(bₖ)−1/6＝1/(12·4ᵏ)。截距在最优点两侧交替，损失却每一步下降，参数来回不等于算法失败。",[10,308,309,312],{},[73,310,311],{},"题目2："," 两参数从θ₀＝(0,0)出发，取η＝1/8。算新参数与损失。为什么这不推翻0＜η＜1/8的下降保证？若改用MSE并想得到相同新参数，步长该是多少？",[10,314,315,317],{},[73,316,299],{}," g＝(−12,−10)；充分条件未覆盖的地方，要用精确值检查。",[10,319,320,322],{},[73,321,305],{}," 新参数为(3/2,5/4)，预测为5/4、11/4、17/4，残差为−1/4、−3/4、−9/4，L＝(1＋9＋81)/16＝91/16＜9。损失仍下降53/16，说明所给条件不是必要条件；在η＝1/8处，上界只保证ΔL≤0，精确值可以更小。MSE的梯度为g/3，因此步长应为3/8。",[20,324,325],{"id":325},"参考与延伸",[10,327,328,329,336],{},"[1] MIT OpenCourseWare，18.02SC，",[330,331,335],"a",{"href":332,"rel":333},"https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/94a05e4b48d9481a4b9dbdef0d5d86d7_MIT18_02SC_notes_20.pdf",[334],"nofollow","Directional Derivatives讲义","，第1—3页。核对单位方向、方向导数与梯度点积；本章以余项条件明确多元可微的含义。",[10,338,339,340,345],{},"[2] Stephen Boyd、Lieven Vandenberghe、Parth Nobel，",[330,341,344],{"href":342,"rel":343},"https://web.stanford.edu/~boyd/cvxbook/bv_cvxslides.pdf",[334],"Convex Optimization课程讲义","，第9章，课件页9.8—9.11、9.16—9.18。核对方向与步长的区分、梯度下降和所选范数的关系；本章的一维精确阈值与两参数常数8的界均由教学数据独立推导。",[10,347,348],{},"本文沿用本系列的虚构读数。迭代推导、练习及三幅图为本章原创编排，不是实际模型训练报告。",[350,351],"hr",{},[10,353,354],{},"作者：Jiancheng Wang · 数学之美（独立原创）",{"title":356,"searchDepth":357,"depth":357,"links":358},"",3,[359,361,362,363,364,365,366,367],{"id":22,"depth":360,"text":22},2,{"id":49,"depth":360,"text":50},{"id":123,"depth":360,"text":124},{"id":151,"depth":360,"text":151},{"id":193,"depth":360,"text":193},{"id":266,"depth":360,"text":267},{"id":288,"depth":360,"text":288},{"id":325,"depth":360,"text":325},"md",{"collection":370,"order":371,"slug":372,"author":373},"数学之美",32,"gradient-descent-step-size","Jiancheng Wang",true,"/column/math-beauty/gradient-descent-step-size",{"title":5,"description":12},"column/math-beauty/gradient-descent-step-size","ST1Fq_fXQVXpEskoSppe-DNHT_feIVSa674YLvRiFC4",1791935829206]