14 计算图、反向传播与梯度核验
能够把含有复用中间量的函数表示为计算图,沿图执行一次前向计算和一次反向求导;解释分支处梯度为何求和、复合路径上导数为何相乘;对小型多层模型完成参数维度检查和中心差分核验;辨别不可导节点、有限精度和目标定义错误。先修内容为第4章的导数、第5章的Taylor公式及第10章的多元链式法则。
14.1 把复合函数写成计算图
函数\(F(a,b)=\frac12[ab+a+(ab)^2-6]^2\)能够直接展开成多项式,也能够分解为若干简单运算。后者保留了重复结构:乘积\(ab\)只需计算一次,即可供后续两个分支使用。随着表达式增大,组织中间结果往往比展开式更适合求值和求导。
定义 14.1 (标量计算图). 设输入变量为\(\theta_1,\ldots,\theta_p\)。计算图由有限个节点组成,每个非输入节点\(v_j\)由较早节点通过一个局部函数产生: \[v_j=\phi_j(v_{i_1},\ldots,v_{i_s}),\qquad i_\ell<j.\] 若从节点\(v_i\)的值计算\(v_j\),则画有向边\(v_i\to v_j\)。这种编号表明图中没有有向回路。最后指定一个标量节点\(F\)为输出。按编号从小到大计算所有节点,称为前向求值。
“无回路”是一次求值的结构要求,不禁止训练算法反复调用同一张图。训练的第\(k\)次迭代先固定参数,计算本次输出与梯度,再生成新参数。参数更新形成的时间循环与一次函数求值中的依赖关系属于两个层面。
例 14.2 (具有共享节点的函数). 将本节开头的函数写为 \[u=ab,\quad v=u+a,\quad w=u^2,\quad z=v+w,\quad r=z-6,\quad F=r^2/2.\] 在\((a,b)=(1,2)\)处,依次得到\(u=2,v=3,w=4,z=7,r=1,F=1/2\)。\(u\)同时送往\(v\)和\(w\),因此\(u\)的改变通过两条路径影响损失;\(a\)也既直接进入\(v\),又经\(u\)间接影响输出。若求导时只保留某一条路径,就会漏掉一部分变化。
计算图表示具体的计算过程。代数上相等的表达式可能使用不同图,例如\((a+b)^2\)与\(a^2+2ab+b^2\)。在精确实数运算和可微性条件下,两图给出同一个导数;在有限精度下,中间量的大小及相减次序可能导致不同的数值误差。求导正确与求值稳定应分别检查。
命题 14.3 (前向方向导数递推). 设图中各局部函数在所计算的节点值附近可微。给定输入方向\(d\in\mathbb{R}^p\),令\(\dot\theta_i=d_i\),并按前向次序计算 \[\begin{equation} \label{eq:14-forward} \dot v_j=\sum_{\ell=1}^s \frac{\partial\phi_j}{\partial v_{i_\ell}}\dot v_{i_\ell}. \end{equation}\] 则最终\(\dot F=\left\langle \nabla F(\theta),d\right\rangle\)。
证明. Proof. 考虑输入曲线\(\theta(t)=\theta+td\)。输入节点的导数等于\(d_i\)。若某节点的全部父节点均已得到关于\(t\)的正确导数,多元链式法则说明该节点的导数正是[eq:14-forward]。对节点编号归纳即可得到最终结论。 ◻
例 14.4 (用一个方向核对路径贡献). 在共享节点例中取方向\(d=(1,-2)\)。有\(\dot u=b\dot a+a\dot b=2-2=0\),进而\(\dot v=1,\dot w=0,\dot z=1\),故\(\dot F=r\dot z=1\)。这里\(ab\)在该方向上一阶不变,但\(a\)直接进入\(v\)的那条边仍使输出发生变化。若把所有影响都归入\(u\),将错误得到方向导数为零。
14.2 反向传播的求和规则与证明
一次前向方向递推给出一个方向导数。若输入参数很多、最终输出只有一个标量,逐个方向重复求导会重复处理大量中间结构。反向传播先求值,再从标量输出向输入累计敏感性,正是链式法则的另一种组织方式。
定义 14.5 (伴随量). 对于图中的节点\(v_j\),把该节点之后的运算保留,将它作为独立中间输入时,最终输出对它的变化率称为其伴随量,记作\(\bar v_j\)。输出节点初始化为\(\bar F=1\),其他节点初始化为零。沿节点编号的逆序,对每条输入边执行 \[\begin{equation} \label{eq:14-reverse} \bar v_{i_\ell}\mathrel{+}= \bar v_j\frac{\partial\phi_j}{\partial v_{i_\ell}}. \end{equation}\] 符号\(\mathrel{+}=\)表示把新贡献加到已有值上。
在一个节点有多个后继时,改变该节点会同时改变这些后继,因此需要相加。对一个节点内部的复合依赖,则需要相乘。若一个局部运算将同一变量当作两个输入,例如\(v=u\cdot u\),两条输入位置各自贡献\(u\bar v\),总贡献为\(2u\bar v\)。将”同名变量”误当成”只处理一次的输入边”会漏掉这一因子。
定理 14.6 (反向传播的正确性). 设计算图有限且无有向回路,所有局部函数在本次求值处可微。按[eq:14-reverse]执行反向累计后,每个输入节点满足 \(\bar\theta_i=\partial F/\partial\theta_i\)。
证明. Proof. 从全微分\(\mathop{}\!\mathrm{d}F\)开始,逆序消去中间节点的微分。若当前表达式中含有\(\bar v_j\mathop{}\!\mathrm{d}v_j\),使用 \[\mathop{}\!\mathrm{d}v_j=\sum_{\ell=1}^s \frac{\partial\phi_j}{\partial v_{i_\ell}}\mathop{}\!\mathrm{d}v_{i_\ell}\] 替换该项。于是每个父节点微分前的系数增加\(\bar v_j\partial\phi_j/\partial v_{i_\ell}\),正是反向更新式。逆序保证消去\(v_j\)时,所有后继对它的贡献已经到齐。有限次替换后只剩 \[\mathop{}\!\mathrm{d}F=\sum_{i=1}^p\bar\theta_i\mathop{}\!\mathrm{d}\theta_i.\] 由全微分表示的唯一性,\(\bar\theta_i\)就是对应偏导数。 ◻
例 14.7 (共享节点的全部反向数值). 仍在\((a,b)=(1,2)\)处。从\(F=r^2/2\)出发,\(\bar r=r=1\),从\(r=z-6\)得\(\bar z=1\)。加法节点给出\(\bar v=1,\bar w=1\)。\(v=u+a\)贡献\(\bar u=1\)和\(\bar a=1\);\(w=u^2\)再贡献\(2u\bar w=4\),因此\(\bar u=5\)。最后\(u=ab\)给出 \[\bar a=1+\bar u b=11,\qquad \bar b=\bar u a=5.\] 故\(\nabla F(1,2)=(11,5)^{\mathsf T}\)。与上一例核对,\(\left\langle (11,5),(1,-2)\right\rangle=1\)。若将\(u\)处的两项贡献相互覆盖,则结果既不满足直接求导,也不能满足这项方向核验。
| 局部运算 | 对第一个输入的贡献 | 对第二个输入的贡献 |
|---|---|---|
| \(z=x+y\) | \(\bar x\mathrel{+}=\bar z\) | \(\bar y\mathrel{+}=\bar z\) |
| \(z=xy\) | \(\bar x\mathrel{+}=y\bar z\) | \(\bar y\mathrel{+}=x\bar z\) |
| \(z=x/y\),\(y\ne0\) | \(\bar x\mathrel{+}=\bar z/y\) | \(\bar y\mathrel{+}=-x\bar z/y^2\) |
| \(z=\exp x\) | \(\bar x\mathrel{+}=z\bar z\) | 无 |
| \(z=\log x\),\(x>0\) | \(\bar x\mathrel{+}=\bar z/x\) | 无 |
| \(z=x^2\) | \(\bar x\mathrel{+}=2x\bar z\) | 无 |
命题 14.8 (局部敏感性的路径展开). 在上述可微条件下,输入到输出的偏导数等于所有有向路径上局部导数乘积的总和。没有到达输出的路径时,该偏导数为零。
证明. Proof. 对输出附近的节点,结论就是一层链式法则。将各个后继的导数继续展开,每一项都选择了一条向输出延伸的边。由于图无回路且节点有限,展开必定终止,得到从指定输入到输出的全部路径。不同路径的贡献通过链式法则中的加法累计。 ◻
路径公式用于理解结构,反向递推用于避免显式列举可能数量很大的路径。若每个局部节点只有固定数量的输入,局部导数的计算成本与该节点求值成本同阶,则一次前向与一次反向的运算量均与图的规模成正比。反向计算通常需保存或重算中间值,因此节省求导运算不等于不需要存储。
14.3 向量节点、多层模型与共享参数
将若干标量节点合并为向量节点可以显著简化记号。设\(z=G(u)\),其中\(u\in\mathbb{R}^p,z\in\mathbb{R}^q\),采用列向量梯度。链式法则写为 \[\begin{equation} \label{eq:14-vjp} \bar u=DG(u)^{\mathsf T}\bar z. \end{equation}\] 矩阵\(DG\)为\(q\times p\),其转置乘以\(q\)维伴随量后得到\(p\)维向量。这里求的是一个矩阵与向量的乘积,不要求把整张网络对全部输入的Jacobian都显式储存。
命题 14.9 (仿射层的反向公式). 设\(z=Wh+b\),\(W\in\mathbb{R}^{q\times p}\)、\(h\in\mathbb{R}^p\)、\(b\in\mathbb{R}^q\)。若最终标量损失对\(z\)的伴随量为\(\bar z\),则本层贡献为 \[\bar h=W^{\mathsf T}\bar z,\qquad \bar b=\bar z,\qquad \bar W=\bar z h^{\mathsf T}.\] 若还有其他路径使用这些变量,应在原伴随量上相加。
证明. Proof. 由\(\mathop{}\!\mathrm{d}z=(\mathop{}\!\mathrm{d}W)h+W\mathop{}\!\mathrm{d}h+\mathop{}\!\mathrm{d}b\),有 \[\mathop{}\!\mathrm{d}F=\bar z^{\mathsf T}\mathop{}\!\mathrm{d}z =\sum_{i,j}\bar z_i h_j\mathop{}\!\mathrm{d}W_{ij} +(W^{\mathsf T}\bar z)^{\mathsf T}\mathop{}\!\mathrm{d}h+ \bar z^{\mathsf T}\mathop{}\!\mathrm{d}b.\] 逐项比较微分系数即可。特别地,\(\bar W\)为\(q\times p\),与\(W\)同形。 ◻
若\(h_j=\phi(z_j)\)为逐坐标激活函数,且每个\(\phi\)在\(z_j\)处可导,则\(\bar z_j=\phi'(z_j)\bar h_j\)。仿射层和逐坐标层交替出现时,从损失端反复使用这两条规则即可。非线性函数带来了新的表示能力,也使目标的参数几何通常不再是第13章的凸二次结构。
例 14.10 (平方分支与直通分支). 考虑标量输入\(x\)和参数\(a,b,c\),模型为 \[u=ax+b,\qquad v=cx,\qquad f=u^2+v,\qquad J=\frac12(f-y)^2.\] 在\(x=2,y=5,(a,b,c)=(1,-1,1)\)处,\(u=1,v=2,f=3,r=-2\)。反向计算得到\(\bar f=-2\),\(\bar u=2u\bar f=-4\)、\(\bar v=-2\),所以 \[\frac{\partial J}{\partial a}=x\bar u=-8,\quad \frac{\partial J}{\partial b}=\bar u=-4,\quad \frac{\partial J}{\partial c}=x\bar v=-4.\] 如需计算输入敏感性,则\(x\)接受两条路径的贡献:\(\partial J/\partial x=a\bar u+c\bar v=-6\)。输入敏感性与参数梯度属于不同变量,不能只因符号位置相近就混用。
例 14.11 (参数在两个数据点间复用). 令\(f_a(x)=a^2x\),取数据\((1,1)\)与\((2,0)\),平均平方损失为 \[J(a)=\frac14\bigl[(a^2-1)^2+(2a^2)^2\bigr].\] 在\(a=1\)处,两点残差分别为\(0,2\)。第一点贡献为\(\frac12\cdot0\cdot2a=0\),第二点贡献为\(\frac12\cdot2\cdot4a=4\),故\(J'(1)=4\)。直接展开得\(J=(5a^4-2a^2+1)/4\),导数\(5a^3-a\)也给出\(4\)。重复使用的是同一个参数,梯度必须相加;若误将每个数据点的\(a\)视为独立参数,则实际上改变了模型。
若损失定义为\(\sum_i r_i^2/(2m)\),每个数据分支的输出伴随量是\(r_i/m\)。若程序取平方和却手算取平均,梯度将相差\(m\)倍。二者在无正则项时具有相同最小点,但梯度步长的含义不同;一旦只给其中一个目标添加未同比缩放的正则项,连最小点也可能改变。
14.4 梯度传播、折点与有限精度
链式法则中出现的乘积说明,早期变量的影响可能在多次复合后缩小或放大。例如\(h_0=\theta\)、\(h_j=ch_{j-1}\)给出\(h_n=c^n\theta\),于是\(\partial h_n/\partial\theta=c^n\)。这个精确例子只含一条路径;多分支图还存在不同符号贡献的相消,不能仅凭某个局部导数大就断定最终梯度大。
命题 14.12 (复合映射的导数范数界). 设\(G_1,\ldots,G_s\)在相应点可微,使用欧氏范数诱导的矩阵范数。若\(\left\lVert DG_j\right\rVert\le M_j\),则 \[\left\lVert D(G_s\circ\cdots\circ G_1)\right\rVert\le\prod_{j=1}^s M_j.\]
证明. Proof. 链式法则给出导数矩阵的连乘。由诱导范数定义,对任意矩阵\(A,B\)和向量\(v\),\(\left\lVert ABv\right\rVert\le\left\lVert A\right\rVert\left\lVert B\right\rVert\left\lVert v\right\rVert\),故\(\left\lVert AB\right\rVert\le\left\lVert A\right\rVert\left\lVert B\right\rVert\)。重复使用该不等式即得结论。 ◻
此式是上界。若每个\(M_j<1\),连乘上界确会缩小;若某些\(M_j>1\),上界变大却不证明实际导数也变大,因为不同方向的作用未必对齐。对网络诊断,应把局部导数、各层伴随量、损失大小与参数状态同时记录,而不是给任何小梯度都贴上同一原因。
例 14.13 (局部导数大而总导数为零). 令\(F(t)=100t-100t\)。两条路径上的局部导数分别为\(100\)和\(-100\),反向累计恰好为零。又如\(F(t)=\exp t\,\exp(-t)\)在实数精确运算下恒为\(1\),导数为零;但极大的\(t\)可能使中间指数超出浮点表示范围。代数导数正确不能排除前向求值溢出。
常用分段函数\(\rho(t)=\max\{0,t\}\)在\(t>0\)处导数为\(1\),在\(t<0\)处导数为\(0\),在\(t=0\)处不可导。程序可以为零点指定一个计算约定,但该数值不因此成为通常意义下的导数。若核验点正好在折点,中心差分可能得到左右斜率的平均值,而不是任何既存导数。
更细致的情况是:中间节点不可导,最终复合函数却可导。例如 \[F(t)=\rho(t)-\rho(-t)=t.\] 其真实导数处处为\(1\)。若程序在两处\(\rho(0)\)都使用”局部导数取零”的约定,反向结果在\(t=0\)处为\(0\)。这并不推翻链式法则;正确性定理要求局部函数可微,而该假设已经失败。最终函数可微不能代替各个局部节点可微。
对接近零的\(x\),\(\sqrt{1+x}-1\)可以改写为\(x/(\sqrt{1+x}+1)\),以减少两个接近数相减造成的有效数字损失。两式在\(x>-1\)且分母非零时数学上相等,但数值求值过程不同。梯度核验使用的函数值本身也有误差,因此应先确认定义域和前向结果,再分析反向计算。
14.5 中心差分与方向核验
解析推导或反向程序给出候选梯度\(g\)后,可在同一点取函数值进行独立核验。对第\(j\)个坐标,中心差分为 \[\begin{equation} \label{eq:14-central} D_{j,h}F(\theta)=\frac{F(\theta+he_j)-F(\theta-he_j)}{2h},\qquad h>0. \end{equation}\] 这里的\(e_j\)是标准基向量。两次求值必须保持数据、其他参数及全部外部状态相同,否则分子比较的可能不是同一个函数。
定理 14.14 (中心差分的截断与求值误差). 设\(F\)在\(\theta\)处可微,一元函数\(\psi(t)=F(\theta+td)\)在\([-h,h]\)上三阶连续可微,并满足\(\left\lvert \psi'''(t)\right\rvert\le M\)。若两端函数值各有不超过\(\delta\)的绝对误差,则由这些近似值计算的中心差分\(\widetilde D_h\)满足 \[\begin{equation} \label{eq:14-error} \left\lvert \widetilde D_h-\left\langle \nabla F(\theta),d\right\rangle\right\rvert \le\frac M6h^2+\frac\delta h. \end{equation}\]
证明. Proof. 在零点分别对\(\psi(h)\)和\(\psi(-h)\)使用二阶Taylor公式及三阶余项。相减后常数项和二阶项消去,得到精确函数值构成的中心差分与\(\psi'(0)\)之差不超过\(Mh^2/6\)。两个函数值误差相减的绝对值不超过\(2\delta\),除以\(2h\)后不超过\(\delta/h\)。再用三角不等式及\(\psi'(0)=\left\langle \nabla F(\theta),d\right\rangle\)即得结论。 ◻
第一项随步长减小而下降,第二项随步长减小而上升。若将\(M,\delta\)看作正常数,则上界在\(h=(3\delta/M)^{1/3}\)处达到最小值。但实际计算中\(M\)和\(\delta\)通常未知,函数值误差也未必与\(h\)无关,因此该公式主要说明量级关系。用一组逐渐缩小的步长观察误差区间,比认定”越小越准确”更合理。
例 14.15 (能够精确算出差分误差的多项式). 取\(\psi(t)=t^3\),在\(t=2\)处求导。中心差分为 \[\frac{(2+h)^3-(2-h)^3}{2h}=12+h^2.\] 因此\(h=10^{-1},10^{-2},10^{-3}\)时,精确算术下的误差依次为\(10^{-2},10^{-4},10^{-6}\)。误差每次约缩小\(100\)倍对应二阶截断误差;若更小步长下这一模式停止,应检查浮点求值误差,而不应立即修改正确的解析导数\(12\)。
例 14.16 (一个方向不能认证全部梯度). 假设真实梯度为\((1,1)\),候选梯度为\((3,-1)\)。在方向\(d=(1,1)\)上,两者的内积都等于\(2\),因此该方向的差分完全无法发现错误。在方向\((1,-1)\)上,真实方向导数为\(0\),候选值为\(4\),错误立即显现。低维问题适合检查全部坐标;高维问题可检查多个不同方向,但有限个方向的成功仍只是核验证据。
以下代码核验本章共享节点函数的两个偏导数。解析式与函数求值分开书写,使检查具备一定独立性。误差量使用\(\max(1,|g_j|,|D_{j,h}|)\)归一化,避免真实导数为零附近出现除零。
def value(a, b):
u = a*b
z = u + a + u*u
return 0.5*(z-6.0)**2
def grad(a, b):
u = a*b
r = u + a + u*u-6.0
return (r*((1.0+2.0*u)*b+1.0),
r*(1.0+2.0*u)*a)
point = [1.0, 2.0]
g = grad(*point)
for h in [1e-2, 1e-3, 1e-4, 1e-5]:
error = []
for j in range(2):
plus, minus = point[:], point[:]
plus[j] += h
minus[j] -= h
approx = (value(*plus)-value(*minus))/(2.0*h)
scale = max(1.0, abs(g[j]), abs(approx))
error.append(abs(g[j]-approx)/scale)
print(h, error)
差分可以发现求导实现与函数实现之间的不一致,却不能自动发现两者共同使用了错误目标。例如原题要求平均损失,函数和梯度却都写成总损失,二者仍可能通过全部差分核验。目标定义、维度与因子检查必须先于数值核验。
14.6 本章回顾与分层习题
反向传播的核心只有三项:前向保存节点值,反向使用局部导数,多条影响在共享节点相加。其正确性来自可微条件下的全微分替换。中心差分借助函数值提供独立检查,但受截断误差、求值误差和不可导点影响。对梯度的可靠判断,应同时具备定义核对、解析推导、形状检查和有限数值证据。
基础题
对\(u=ab,v=u+a,F=v^2\),在\((a,b)=(2,1)\)处计算全部节点值与输入梯度。
对\(F(x)=x\cdot x+x\)画出计算图,说明乘法节点的两个输入位置为什么都要反向累计。
已知\(z=Wh+b\),其中\(W\)为\(3\times2\)矩阵,写出\(h,z,\bar h,\bar z,\bar W,\bar b\)的维度。
对\(F(a,b)=\exp(a+b)\),在\((0,0)\)处沿\(d=(2,-1)\)分别使用前向递推与梯度内积求方向导数。
求\(\rho(t)=\max(0,t)\)在\(t=0\)处的中心差分值,解释为何它不能证明\(\rho'(0)\)存在。
对\(F(t)=t^4\),推导\(t=1\)处中心差分与真导数之差。
推理题
对\(F(a,b)=\frac12(ab+a+(ab)^2-6)^2\),不展开整个多项式,求一般点的梯度,并核对本章数值。
证明:若两个可微损失\(F_1,F_2\)共享同一参数,\(F=\alpha F_1+\beta F_2\),则共享参数收到的梯度为\(\alpha\nabla F_1+\beta\nabla F_2\)。说明参数复制成两个独立变量会改变什么。
设两矩阵范数都很大,构造它们乘积为零的例子,以说明连乘范数上界不能反向使用。
证明:若对\(\mathbb{R}^p\)的一组基向量\(d_1,\ldots,d_p\)均有\(\left\langle g,d_i\right\rangle=\left\langle \nabla F,d_i\right\rangle\),则\(g=\nabla F\)。为什么近似差分满足这些等式只能给出近似结论?
拓展题
对\(F(t)=\rho(t)-\rho(-t)\),将零点处的局部导数约定为同一个数\(c\)。求反向计算所得值,分析何时与真实导数一致。
给定误差模型\(E(h)=Ah^2+B/h\),其中\(A,B>0\)。求最小点与最小值的量级,并说明当\(B\)减小为原来的\(1/8\)时,最优步长如何变化。
14.7 本章选题解答
前向得\(u=2,v=4,F=16\)。反向为\(\bar v=8\),于是\(\bar u=8\)、直接贡献\(\bar a=8\)。由\(u=ab\)再得\(a\)方向贡献\(8b=8\)、\(b\)方向贡献\(8a=16\),所以梯度为\((16,16)\)。
若\(v=x\cdot x\),两个输入位置分别贡献\(x\bar v\)。由于\(F=v+x\)给出\(\bar v=1\)及直接贡献\(1\),最终为\(2x+1\)。把两个输入位置合并却只保留一个局部偏导数,会错误得到\(x+1\)。
\(h,\bar h\in\mathbb{R}^2\),\(z,\bar z,b,\bar b\in\mathbb{R}^3\),\(W,\bar W\in\mathbb{R}^{3\times2}\)。外积\(\bar z h^{\mathsf T}\)恰为\(3\times2\)。
令\(u=a+b\),则\(\dot u=2-1=1\),\(\dot F=\exp(0)\dot u=1\)。直接求得梯度\((1,1)\),与\(d\)的内积也为\(1\)。
对\(h>0\),\([\rho(h)-\rho(-h)]/(2h)=1/2\)。但右导数为\(1\)、左导数为\(0\),故导数不存在。中心差分收敛是比可导性弱的条件。
展开\((1+h)^4-(1-h)^4=8h+8h^3\),故中心差分为\(4+4h^2\),误差为\(4h^2\)。
令\(u=ab,r=u+a+u^2-6\),则\(\partial_aF=r[(1+2u)b+1]\),\(\partial_bF=r(1+2u)a\)。在\((1,2)\)处\(u=2,r=1\),得到\((11,5)\)。
有\(\mathop{}\!\mathrm{d}F=\alpha\mathop{}\!\mathrm{d}F_1+\beta\mathop{}\!\mathrm{d}F_2\),比较同一参数微分的系数即得结论。若复制为独立参数\(\theta^{(1)},\theta^{(2)}\),可允许两个分支分别改变;而共享模型只允许二者同时按同一个增量改变。两者的可行参数空间不同。
取\(A=\mathop{\mathrm{diag}}(100,0)\)、\(B=\mathop{\mathrm{diag}}(0,100)\),则二者的欧氏诱导范数均为\(100\),但\(AB=0\)。第一矩阵能放大的方向被第二矩阵消去。
令\(e=g-\nabla F\),则\(e\)与每个基向量正交,从而与其张成的全部空间正交,特别有\(\left\langle e,e\right\rangle=0\),故\(e=0\)。近似等式只保证这些内积较小;从它们控制\(\left\lVert e\right\rVert\)还与所选基的条件有关,近乎平行的方向可能放大误差。
第一分支贡献\(c\),第二分支外部负号与内部\(t\mapsto-t\)的负号相乘,贡献也为\(c\),总值为\(2c\)。真实导数为\(1\),因此\(c=1/2\)时本例恰好一致。某个约定在此例一致不构成对其他非光滑复合图的普遍正确性保证。
\(E'(h)=2Ah-B/h^2\),故唯一最小点为\(h_*=(B/(2A))^{1/3}\)。代入得最小值为\(A^{1/3}B^{2/3}(2^{-2/3}+2^{1/3})\)。\(B\)变为\(B/8\)时,\(h_*\)变为原来的一半。