Newton 方法
Newton 步
设
称为
因此 Newton 步是下降方向(除非
二阶近似的极小点
它是
Hessian 范数下的最速下降方向
Newton 步也是
下的最速下降方向。这提供了 Newton 步为何是好的搜索方向的另一种解释:回忆最速下降方法在二次范数

上图由下面的 TikZ 代码编译而来:
\definecolor{cblue}{RGB}{31,119,180}
\definecolor{cred}{RGB}{214,39,40}
\definecolor{cgreen}{RGB}{44,160,44}
\definecolor{corange}{RGB}{255,127,14}
\definecolor{cpurple}{RGB}{148,103,189}
\definecolor{cbrown}{RGB}{140,86,75}
\definecolor{cpink}{RGB}{227,119,194}
\definecolor{cgray}{RGB}{127,127,127}
\begin{tikzpicture}[x=1cm,y=1cm,>=stealth,line cap=round,line join=round]
\draw[cgray] plot [smooth,tension=0.55] coordinates {(2.043,0.000) (1.646,0.316) (1.184,0.497) (0.855,0.612) (0.610,0.695) (0.413,0.759) (0.245,0.814) (0.093,0.862) (-0.052,0.907) (-0.196,0.952) (-0.347,0.998) (-0.512,1.047) (-0.705,1.103) (-0.942,1.169) (-1.253,1.247) (-1.681,1.334) (-2.214,1.357) (-2.584,1.140) (-2.701,0.765) (-2.730,0.378) (-2.736,0.000) (-2.730,-0.378) (-2.701,-0.765) (-2.584,-1.140) (-2.214,-1.357) (-1.681,-1.334) (-1.253,-1.247) (-0.942,-1.169) (-0.705,-1.103) (-0.512,-1.047) (-0.347,-0.998) (-0.196,-0.952) (-0.052,-0.907) (0.093,-0.862) (0.245,-0.814) (0.413,-0.759) (0.610,-0.695) (0.855,-0.612) (1.184,-0.497) (1.646,-0.316) (2.043,0.000)};
\draw[cgray] plot [smooth,tension=0.55] coordinates {(2.082,0.000) (1.674,0.320) (1.205,0.504) (0.871,0.621) (0.623,0.704) (0.423,0.770) (0.253,0.825) (0.099,0.874) (-0.048,0.920) (-0.194,0.965) (-0.347,1.012) (-0.515,1.062) (-0.710,1.119) (-0.951,1.186) (-1.267,1.267) (-1.704,1.357) (-2.250,1.383) (-2.625,1.161) (-2.741,0.778) (-2.770,0.384) (-2.775,0.000) (-2.770,-0.384) (-2.741,-0.778) (-2.625,-1.161) (-2.250,-1.383) (-1.704,-1.357) (-1.267,-1.267) (-0.951,-1.186) (-0.710,-1.119) (-0.515,-1.062) (-0.347,-1.012) (-0.194,-0.965) (-0.048,-0.920) (0.099,-0.874) (0.253,-0.825) (0.423,-0.770) (0.623,-0.704) (0.871,-0.621) (1.205,-0.504) (1.674,-0.320) (2.082,0.000)};
\draw[cgray] plot [smooth,tension=0.55] coordinates {(2.149,0.000) (1.724,0.328) (1.241,0.516) (0.899,0.635) (0.645,0.720) (0.441,0.787) (0.266,0.844) (0.109,0.894) (-0.041,0.941) (-0.190,0.988) (-0.347,1.036) (-0.519,1.088) (-0.719,1.147) (-0.967,1.217) (-1.292,1.301) (-1.743,1.397) (-2.312,1.428) (-2.696,1.197) (-2.810,0.800) (-2.837,0.394) (-2.843,0.000) (-2.837,-0.394) (-2.810,-0.800) (-2.696,-1.197) (-2.312,-1.428) (-1.743,-1.397) (-1.292,-1.301) (-0.967,-1.217) (-0.719,-1.147) (-0.519,-1.088) (-0.347,-1.036) (-0.190,-0.988) (-0.041,-0.941) (0.109,-0.894) (0.266,-0.844) (0.441,-0.787) (0.645,-0.720) (0.899,-0.635) (1.241,-0.516) (1.724,-0.328) (2.149,0.000)};
\draw[cgray] plot [smooth,tension=0.55] coordinates {(2.254,0.000) (1.801,0.340) (1.297,0.534) (0.942,0.657) (0.679,0.745) (0.468,0.815) (0.288,0.873) (0.125,0.925) (-0.030,0.975) (-0.184,1.023) (-0.347,1.074) (-0.525,1.128) (-0.733,1.190) (-0.990,1.264) (-1.330,1.354) (-1.805,1.459) (-2.408,1.498) (-2.807,1.254) (-2.917,0.835) (-2.942,0.411) (-2.947,0.000) (-2.942,-0.411) (-2.917,-0.835) (-2.807,-1.254) (-2.408,-1.498) (-1.805,-1.459) (-1.330,-1.354) (-0.990,-1.264) (-0.733,-1.190) (-0.525,-1.128) (-0.347,-1.074) (-0.184,-1.023) (-0.030,-0.975) (0.125,-0.925) (0.288,-0.873) (0.468,-0.815) (0.679,-0.745) (0.942,-0.657) (1.297,-0.534) (1.801,-0.340) (2.254,0.000)};
\draw[cblue,thick] plot [smooth,tension=0.6] coordinates {(1.298,0.500) (1.259,0.514) (1.235,0.523) (1.218,0.528) (1.206,0.532) (1.196,0.536) (1.188,0.538) (1.181,0.540) (1.175,0.542) (1.168,0.544) (1.162,0.546) (1.156,0.548) (1.150,0.550) (1.143,0.552) (1.135,0.554) (1.126,0.557) (1.115,0.560) (1.101,0.564) (1.080,0.570) (1.048,0.578) (0.991,0.592) (0.883,0.611) (0.824,0.587) (0.929,0.529) (1.002,0.500) (1.041,0.486) (1.065,0.477) (1.082,0.472) (1.094,0.468) (1.104,0.464) (1.112,0.462) (1.119,0.460) (1.125,0.458) (1.132,0.456) (1.138,0.454) (1.144,0.452) (1.150,0.450) (1.157,0.448) (1.165,0.446) (1.174,0.443) (1.185,0.440) (1.199,0.436) (1.220,0.430) (1.252,0.422) (1.309,0.408) (1.417,0.389) (1.476,0.413) (1.371,0.471) (1.298,0.500)};
\draw[->,cblue,very thick] (1.1500,0.5000) -- (0,0) node[above right=0pt,font=\scriptsize] {$\Delta x_{\mathrm{nt}}$};
\draw[->,cred,very thick] (1.1500,0.5000) -- (0.8448,-0.3467) node[above left=0pt,font=\scriptsize] {$-\nabla f(x)$};
\draw[->,color=black!60] (-1.9,0) -- (2.2,0) node[below] {$x_1$};
\draw[->,color=black!60] (0,-1.3) -- (0,1.7) node[left] {$x_2$};
\fill (1.1500,0.5000) circle (1.8pt) node[below=3pt,font=\scriptsize] {$x$};
\end{tikzpicture}线性化最优性条件的解
将最优性条件
这是关于

上图由下面的 TikZ 代码编译而来:
\definecolor{cblue}{RGB}{31,119,180}
\definecolor{cred}{RGB}{214,39,40}
\definecolor{cgreen}{RGB}{44,160,44}
\definecolor{corange}{RGB}{255,127,14}
\definecolor{cpurple}{RGB}{148,103,189}
\definecolor{cbrown}{RGB}{140,86,75}
\definecolor{cpink}{RGB}{227,119,194}
\definecolor{cgray}{RGB}{127,127,127}
\begin{tikzpicture}[x=1cm,y=1cm,>=stealth,line cap=round,line join=round]
\begin{scope}
\draw[->,color=black!60] (-2.3,0) -- (3.1,0) node[below] {$u$};
\draw[->,color=black!60] (0,-0.7) -- (0,3.6) node[left] {};
\draw[cred,very thick,domain=-2.2:1.62,samples=60] plot (\x,{exp(\x)+0.5*\x*\x});
\draw[cblue,very thick,domain=-0.8000:2.3500,samples=60] plot (\x,{5.0352+5.4552*(\x-1.4000)+0.5*5.0552*(\x-1.4000)*(\x-1.4000)});
\draw[color=black!55,dotted] (1.4000,0) -- (1.4000,5.0352);
\draw[color=black!55,dotted] (0.3209,0) -- (0.3209,2.0918);
\fill[cred] (1.4000,5.0352) circle (1.7pt);
\fill[cblue] (0.3209,2.0918) circle (1.7pt);
\node[below,font=\scriptsize,color=black!60] at (1.4000,0) {$x$};
\node[below,font=\scriptsize,color=black!60] at (0.3209,0) {$x+\Delta x_{\mathrm{nt}}$};
\node[font=\scriptsize,color=cred] at (-1.25,3.1) {$f$};
\node[font=\scriptsize,color=cblue] at (-0.3991,2.5118) {$\hat{f}$};
\end{scope}
\begin{scope}[xshift=8.4cm]
\draw[->,color=black!60] (-2.3,0) -- (3.1,0) node[below] {$u$};
\draw[->,color=black!60] (0,-1.2) -- (0,3.6) node[left] {};
\draw[cred,very thick,domain=-2.2:1.25,samples=60] plot (\x,{exp(\x)+\x});
\draw[cblue,very thick,domain=-0.3500:1.8500] plot (\x,{5.4552+5.0552*(\x-1.4000)});
\draw[color=black!55,dotted] (1.4000,0) -- (1.4000,5.4552);
\draw[color=black!55,dotted] (0.3209,0) -- (1.4000,5.4552);
\fill[cred] (1.4000,5.4552) circle (1.7pt);
\fill[cblue] (0.3209,0) circle (1.7pt);
\node[below,font=\scriptsize,color=black!60] at (1.4000,0) {$x$};
\node[below,font=\scriptsize,color=black!60] at (0.3209,0) {$x+\Delta x_{\mathrm{nt}}$};
\node[font=\scriptsize,color=cred] at (-1.35,3.1) {$f'$};
\node[font=\scriptsize,color=cblue] at (0.2500,0.0917) {$\hat{f}'$};
\end{scope}
\end{tikzpicture}Newton 步的仿射不变性
Newton 步的一个重要特征是它不依赖于线性(或仿射)坐标变换。设
其中
即
Newton 减量
量
称为
即
Newton 减量也可以表示为
这说明
它可以解释为
Newton 方法
下面的算法有时称为阻尼(damped)Newton 方法或受保护(guarded)Newton 方法,以区别于使用固定步长
算法 9.5(Newton 方法) 给定初始点
- 计算 Newton 步与减量:
; 。 - 终止准则:若
则退出。 - 直线搜索:用回溯直线搜索选取步长
。 - 更新:
。
这与一般下降方法基本相同,只是用 Newton 步作搜索方向,且终止准则在计算搜索方向之后(而不是更新之后)检查。
收敛性分析
假设
收敛证明的思路
可以证明存在满足
- 若
,则 ; - 若
,则回溯直线搜索选择 ,且
分析第二个条件:一旦它对第
这说明第二条件成立后收敛极其迅速,这一现象称为二次收敛(quadratic convergence):大致地说,在足够多次迭代之后,每次迭代会使正确数字的位数翻倍。
Newton 方法的迭代自然分为两个阶段。第二阶段(条件
复杂度估计
阻尼 Newton 阶段中
次迭代(其中
其中
更精确的表述是:该式是计算极好近似解所需迭代次数的界。
阻尼 Newton 阶段
设
步长
(利用
二次收敛阶段
设
积分两次并取
若
即第二条性质。综上,当
时算法选取单位步并满足二次收敛条件。总迭代次数的上界为
例子
中的例子
对前文的非二次测试函数采用参数

上图由下面的 TikZ 代码编译而来:
\definecolor{cblue}{RGB}{31,119,180}
\definecolor{cred}{RGB}{214,39,40}
\definecolor{cgreen}{RGB}{44,160,44}
\definecolor{corange}{RGB}{255,127,14}
\definecolor{cpurple}{RGB}{148,103,189}
\definecolor{cbrown}{RGB}{140,86,75}
\definecolor{cpink}{RGB}{227,119,194}
\definecolor{cgray}{RGB}{127,127,127}
\begin{tikzpicture}[x=1cm,y=1cm,>=stealth,line cap=round,line join=round]
\draw[cgray] plot [smooth,tension=0.55] coordinates {(0.269,0.000) (0.218,0.089) (0.121,0.152) (0.030,0.192) (-0.046,0.218) (-0.110,0.237) (-0.164,0.251) (-0.213,0.262) (-0.258,0.272) (-0.302,0.279) (-0.347,0.286) (-0.393,0.291) (-0.443,0.296) (-0.499,0.298) (-0.563,0.298) (-0.638,0.292) (-0.725,0.275) (-0.815,0.239) (-0.893,0.178) (-0.945,0.095) (-0.962,0.000) (-0.945,-0.095) (-0.893,-0.178) (-0.815,-0.239) (-0.725,-0.275) (-0.638,-0.292) (-0.563,-0.298) (-0.499,-0.298) (-0.443,-0.296) (-0.393,-0.291) (-0.347,-0.286) (-0.302,-0.279) (-0.258,-0.272) (-0.213,-0.262) (-0.164,-0.251) (-0.110,-0.237) (-0.046,-0.218) (0.030,-0.192) (0.121,-0.152) (0.218,-0.089) (0.269,0.000)};
\draw[cgray] plot [smooth,tension=0.55] coordinates {(0.689,0.000) (0.581,0.147) (0.401,0.243) (0.249,0.304) (0.129,0.345) (0.029,0.376) (-0.056,0.400) (-0.132,0.421) (-0.204,0.439) (-0.274,0.455) (-0.347,0.470) (-0.423,0.485) (-0.509,0.499) (-0.608,0.512) (-0.726,0.522) (-0.870,0.523) (-1.035,0.500) (-1.193,0.431) (-1.306,0.312) (-1.365,0.161) (-1.382,0.000) (-1.365,-0.161) (-1.306,-0.312) (-1.193,-0.431) (-1.035,-0.500) (-0.870,-0.523) (-0.726,-0.522) (-0.608,-0.512) (-0.509,-0.499) (-0.423,-0.485) (-0.347,-0.470) (-0.274,-0.455) (-0.204,-0.439) (-0.132,-0.421) (-0.056,-0.400) (0.029,-0.376) (0.129,-0.345) (0.249,-0.304) (0.401,-0.243) (0.581,-0.147) (0.689,0.000)};
\draw[cgray] plot [smooth,tension=0.55] coordinates {(1.247,0.000) (1.036,0.219) (0.740,0.353) (0.512,0.438) (0.337,0.497) (0.196,0.542) (0.075,0.580) (-0.035,0.612) (-0.138,0.642) (-0.240,0.670) (-0.347,0.698) (-0.462,0.728) (-0.593,0.759) (-0.750,0.792) (-0.948,0.827) (-1.201,0.854) (-1.499,0.837) (-1.748,0.714) (-1.877,0.497) (-1.927,0.250) (-1.940,0.000) (-1.927,-0.250) (-1.877,-0.497) (-1.748,-0.714) (-1.499,-0.837) (-1.201,-0.854) (-0.948,-0.827) (-0.750,-0.792) (-0.593,-0.759) (-0.462,-0.728) (-0.347,-0.698) (-0.240,-0.670) (-0.138,-0.642) (-0.035,-0.612) (0.075,-0.580) (0.196,-0.542) (0.337,-0.497) (0.512,-0.438) (0.740,-0.353) (1.036,-0.219) (1.247,0.000)};
\draw[cgray] plot [smooth,tension=0.55] coordinates {(1.927,0.000) (1.558,0.302) (1.121,0.477) (0.806,0.587) (0.571,0.667) (0.382,0.729) (0.220,0.780) (0.075,0.827) (-0.064,0.870) (-0.202,0.912) (-0.347,0.955) (-0.505,1.002) (-0.689,1.054) (-0.915,1.115) (-1.209,1.188) (-1.611,1.264) (-2.108,1.280) (-2.461,1.077) (-2.580,0.726) (-2.613,0.359) (-2.620,0.000) (-2.613,-0.359) (-2.580,-0.726) (-2.461,-1.077) (-2.108,-1.280) (-1.611,-1.264) (-1.209,-1.188) (-0.915,-1.115) (-0.689,-1.054) (-0.505,-1.002) (-0.347,-0.955) (-0.202,-0.912) (-0.064,-0.870) (0.075,-0.827) (0.220,-0.780) (0.382,-0.729) (0.571,-0.667) (0.806,-0.587) (1.121,-0.477) (1.558,-0.302) (1.927,0.000)};
\draw[cblue] plot [smooth,tension=0.55] coordinates {(-1.225,1.000) (-1.267,1.023) (-1.296,1.038) (-1.318,1.047) (-1.335,1.055) (-1.349,1.060) (-1.362,1.065) (-1.375,1.070) (-1.387,1.074) (-1.400,1.079) (-1.415,1.083) (-1.432,1.089) (-1.455,1.095) (-1.486,1.103) (-1.533,1.112) (-1.602,1.116) (-1.658,1.094) (-1.631,1.041) (-1.575,1.000) (-1.533,0.977) (-1.504,0.962) (-1.482,0.953) (-1.465,0.945) (-1.451,0.940) (-1.438,0.935) (-1.425,0.930) (-1.413,0.926) (-1.400,0.921) (-1.385,0.917) (-1.368,0.911) (-1.345,0.905) (-1.314,0.897) (-1.267,0.888) (-1.198,0.884) (-1.142,0.906) (-1.169,0.959) (-1.225,1.000)};
\draw[cblue!60] plot [smooth,tension=0.55] coordinates {(-0.147,0.345) (-0.207,0.383) (-0.254,0.406) (-0.290,0.422) (-0.318,0.433) (-0.342,0.442) (-0.364,0.449) (-0.384,0.455) (-0.403,0.461) (-0.424,0.466) (-0.446,0.472) (-0.472,0.478) (-0.504,0.484) (-0.546,0.490) (-0.603,0.495) (-0.679,0.492) (-0.752,0.464) (-0.758,0.403) (-0.701,0.345) (-0.641,0.306) (-0.594,0.283) (-0.558,0.267) (-0.529,0.256) (-0.505,0.247) (-0.484,0.240) (-0.464,0.234) (-0.444,0.228) (-0.424,0.223) (-0.401,0.217) (-0.375,0.212) (-0.344,0.205) (-0.302,0.199) (-0.245,0.195) (-0.169,0.197) (-0.095,0.225) (-0.090,0.286) (-0.147,0.345)};
\draw[cblue!60] plot [smooth,tension=0.55] coordinates {(0.183,0.009) (0.157,0.059) (0.107,0.094) (0.056,0.114) (0.013,0.126) (-0.023,0.132) (-0.052,0.137) (-0.079,0.139) (-0.103,0.140) (-0.126,0.141) (-0.149,0.141) (-0.174,0.140) (-0.200,0.138) (-0.231,0.134) (-0.267,0.128) (-0.312,0.116) (-0.364,0.096) (-0.414,0.060) (-0.435,0.009) (-0.409,-0.041) (-0.359,-0.076) (-0.308,-0.096) (-0.265,-0.107) (-0.230,-0.114) (-0.200,-0.118) (-0.173,-0.121) (-0.149,-0.122) (-0.126,-0.123) (-0.103,-0.123) (-0.078,-0.122) (-0.052,-0.120) (-0.021,-0.116) (0.015,-0.109) (0.060,-0.098) (0.112,-0.077) (0.162,-0.042) (0.183,0.009)};
\draw[cblue!60] plot [smooth,tension=0.55] coordinates {(-0.030,0.002) (-0.051,0.054) (-0.096,0.092) (-0.146,0.116) (-0.190,0.130) (-0.228,0.139) (-0.261,0.144) (-0.290,0.147) (-0.317,0.148) (-0.343,0.149) (-0.369,0.149) (-0.396,0.147) (-0.425,0.144) (-0.458,0.139) (-0.496,0.130) (-0.541,0.116) (-0.591,0.092) (-0.636,0.054) (-0.655,0.002) (-0.635,-0.050) (-0.590,-0.088) (-0.540,-0.112) (-0.495,-0.126) (-0.458,-0.135) (-0.425,-0.140) (-0.396,-0.143) (-0.369,-0.145) (-0.343,-0.145) (-0.317,-0.145) (-0.290,-0.143) (-0.261,-0.140) (-0.228,-0.135) (-0.190,-0.127) (-0.145,-0.112) (-0.095,-0.088) (-0.050,-0.050) (-0.030,0.002)};
\draw[cblue!60] plot [smooth,tension=0.55] coordinates {(-0.034,0.000) (-0.054,0.052) (-0.099,0.090) (-0.149,0.114) (-0.193,0.128) (-0.232,0.137) (-0.264,0.142) (-0.294,0.145) (-0.321,0.147) (-0.347,0.147) (-0.372,0.147) (-0.399,0.145) (-0.429,0.142) (-0.462,0.137) (-0.500,0.128) (-0.544,0.114) (-0.594,0.090) (-0.639,0.052) (-0.659,0.000) (-0.639,-0.052) (-0.594,-0.090) (-0.544,-0.114) (-0.500,-0.128) (-0.462,-0.137) (-0.429,-0.142) (-0.399,-0.145) (-0.372,-0.147) (-0.347,-0.147) (-0.321,-0.147) (-0.294,-0.145) (-0.264,-0.142) (-0.232,-0.137) (-0.193,-0.128) (-0.149,-0.114) (-0.099,-0.090) (-0.054,-0.052) (-0.034,0.000)};
\draw[cblue!60] plot [smooth,tension=0.55] coordinates {(-0.034,0.000) (-0.054,0.052) (-0.099,0.090) (-0.149,0.114) (-0.193,0.128) (-0.232,0.137) (-0.264,0.142) (-0.294,0.145) (-0.321,0.147) (-0.347,0.147) (-0.372,0.147) (-0.399,0.145) (-0.429,0.142) (-0.462,0.137) (-0.500,0.128) (-0.544,0.114) (-0.594,0.090) (-0.639,0.052) (-0.659,0.000) (-0.639,-0.052) (-0.594,-0.090) (-0.544,-0.114) (-0.500,-0.128) (-0.462,-0.137) (-0.429,-0.142) (-0.399,-0.145) (-0.372,-0.147) (-0.347,-0.147) (-0.321,-0.147) (-0.294,-0.145) (-0.264,-0.142) (-0.232,-0.137) (-0.193,-0.128) (-0.149,-0.114) (-0.099,-0.090) (-0.054,-0.052) (-0.034,0.000)};
\draw[->,color=black!60] (-2.6,0) -- (2.0,0) node[below] {$x_1$};
\draw[->,color=black!60] (0,-1.5) -- (0,1.5) node[left] {$x_2$};
\draw[cblue,dotted] plot coordinates {(-1.400,1.000) (-0.424,0.345) (-0.126,0.009) (-0.343,0.002) (-0.347,0.000) (-0.347,0.000)};
\fill[cblue] (-1.400,1.000) circle (1.5pt) node[above=1.5pt] {$x^{(0)}$};
\fill[cblue] (-0.424,0.345) circle (1.5pt) node[above=1.5pt] {$x^{(1)}$};
\fill[cblue] (-0.126,0.009) circle (1.5pt);
\fill[cblue] (-0.343,0.002) circle (1.5pt);
\fill[cblue] (-0.347,0.000) circle (1.5pt);
\fill[cblue] (-0.347,0.000) circle (1.5pt);
\fill[cred] (-0.3466,0.0000) circle (1.6pt) node[below right=0pt,font=\scriptsize] {$x^{\star}$};
\end{tikzpicture}
上图由下面的 TikZ 代码编译而来:
\definecolor{cblue}{RGB}{31,119,180}
\definecolor{cred}{RGB}{214,39,40}
\definecolor{cgreen}{RGB}{44,160,44}
\definecolor{corange}{RGB}{255,127,14}
\definecolor{cpurple}{RGB}{148,103,189}
\definecolor{cbrown}{RGB}{140,86,75}
\definecolor{cpink}{RGB}{227,119,194}
\definecolor{cgray}{RGB}{127,127,127}
\begin{tikzpicture}[x=1cm,y=1cm,>=stealth,line cap=round,line join=round]
\draw[color=black!25,very thin] (0.0000,0.0000) -- (6.6000,0.0000) (0.0000,0.3231) -- (6.6000,0.3231) (0.0000,0.6462) -- (6.6000,0.6462) (0.0000,0.9692) -- (6.6000,0.9692) (0.0000,1.2923) -- (6.6000,1.2923) (0.0000,1.6154) -- (6.6000,1.6154) (0.0000,1.9385) -- (6.6000,1.9385) (0.0000,2.2615) -- (6.6000,2.2615) (0.0000,2.5846) -- (6.6000,2.5846) (0.0000,2.9077) -- (6.6000,2.9077) (0.0000,3.2308) -- (6.6000,3.2308) (0.0000,3.5538) -- (6.6000,3.5538) (0.0000,3.8769) -- (6.6000,3.8769) (0.0000,4.2000) -- (6.6000,4.2000);
\draw[color=black!15,very thin] (0.0000,0.0000) -- (0.0000,4.2000) (1.3200,0.0000) -- (1.3200,4.2000) (2.6400,0.0000) -- (2.6400,4.2000) (3.9600,0.0000) -- (3.9600,4.2000) (5.2800,0.0000) -- (5.2800,4.2000) (6.6000,0.0000) -- (6.6000,4.2000);
\draw[->,color=black!60] (0.0000,0.0000) -- (6.9500,0.0000) node[anchor=west,xshift=2pt,yshift=-6pt] {$k$};
\draw[->,color=black!60] (0.0000,0.0000) -- (0.0000,4.5500) node[left=1pt] {$f-p^{\star}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.0000) {$10^{-12}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.3231) {$10^{-11}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.6462) {$10^{-10}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.9692) {$10^{-9}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,1.2923) {$10^{-8}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,1.6154) {$10^{-7}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,1.9385) {$10^{-6}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,2.2615) {$10^{-5}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,2.5846) {$10^{-4}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,2.9077) {$10^{-3}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,3.2308) {$10^{-2}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,3.5538) {$10^{-1}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,3.8769) {1};
\node[left,font=\scriptsize,color=black!60] at (0.0000,4.2000) {$10$};
\node[below,font=\scriptsize,color=black!60] at (0.0000,0.0000) {0};
\node[below,font=\scriptsize,color=black!60] at (1.3200,0.0000) {1};
\node[below,font=\scriptsize,color=black!60] at (2.6400,0.0000) {2};
\node[below,font=\scriptsize,color=black!60] at (3.9600,0.0000) {3};
\node[below,font=\scriptsize,color=black!60] at (5.2800,0.0000) {4};
\node[below,font=\scriptsize,color=black!60] at (6.6000,0.0000) {5};
\node[font=\small] at (3.3,4.95) {$\mathbf{R}^2$: $f(x^{(k)})-p^{\star}$ vs.\ $k$};
\draw[cblue,very thick] plot coordinates {(0.000,4.119) (1.320,3.827) (2.640,3.489) (3.960,2.456) (5.280,0.843) (6.600,-93.046)};
\fill[cblue] (0.000,4.119) circle (1.7pt);
\fill[cblue] (1.320,3.827) circle (1.7pt);
\fill[cblue] (2.640,3.489) circle (1.7pt);
\fill[cblue] (3.960,2.456) circle (1.7pt);
\fill[cblue] (5.280,0.843) circle (1.7pt);
\fill[cblue] (6.600,-93.046) circle (1.7pt);
\end{tikzpicture} 中的例子
对

上图由下面的 TikZ 代码编译而来:
\definecolor{cblue}{RGB}{31,119,180}
\definecolor{cred}{RGB}{214,39,40}
\definecolor{cgreen}{RGB}{44,160,44}
\definecolor{corange}{RGB}{255,127,14}
\definecolor{cpurple}{RGB}{148,103,189}
\definecolor{cbrown}{RGB}{140,86,75}
\definecolor{cpink}{RGB}{227,119,194}
\definecolor{cgray}{RGB}{127,127,127}
\begin{tikzpicture}[x=1cm,y=1cm,>=stealth,line cap=round,line join=round]
\draw[color=black!25,very thin] (0.0000,0.0000) -- (6.6000,0.0000) (0.0000,0.2800) -- (6.6000,0.2800) (0.0000,0.5600) -- (6.6000,0.5600) (0.0000,0.8400) -- (6.6000,0.8400) (0.0000,1.1200) -- (6.6000,1.1200) (0.0000,1.4000) -- (6.6000,1.4000) (0.0000,1.6800) -- (6.6000,1.6800) (0.0000,1.9600) -- (6.6000,1.9600) (0.0000,2.2400) -- (6.6000,2.2400) (0.0000,2.5200) -- (6.6000,2.5200) (0.0000,2.8000) -- (6.6000,2.8000) (0.0000,3.0800) -- (6.6000,3.0800) (0.0000,3.3600) -- (6.6000,3.3600) (0.0000,3.6400) -- (6.6000,3.6400) (0.0000,3.9200) -- (6.6000,3.9200) (0.0000,4.2000) -- (6.6000,4.2000);
\draw[color=black!15,very thin] (0.0000,0.0000) -- (0.0000,4.2000) (0.9429,0.0000) -- (0.9429,4.2000) (1.8857,0.0000) -- (1.8857,4.2000) (2.8286,0.0000) -- (2.8286,4.2000) (3.7714,0.0000) -- (3.7714,4.2000) (4.7143,0.0000) -- (4.7143,4.2000) (5.6571,0.0000) -- (5.6571,4.2000) (6.6000,0.0000) -- (6.6000,4.2000);
\draw[->,color=black!60] (0.0000,0.0000) -- (6.9500,0.0000) node[anchor=west,xshift=2pt,yshift=-6pt] {$k$};
\draw[->,color=black!60] (0.0000,0.0000) -- (0.0000,4.5500) node[left=1pt] {$f-p^{\star}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.0000) {$10^{-14}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.2800) {$10^{-13}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.5600) {$10^{-12}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.8400) {$10^{-11}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,1.1200) {$10^{-10}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,1.4000) {$10^{-9}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,1.6800) {$10^{-8}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,1.9600) {$10^{-7}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,2.2400) {$10^{-6}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,2.5200) {$10^{-5}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,2.8000) {$10^{-4}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,3.0800) {$10^{-3}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,3.3600) {$10^{-2}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,3.6400) {$10^{-1}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,3.9200) {1};
\node[left,font=\scriptsize,color=black!60] at (0.0000,4.2000) {$10$};
\node[below,font=\scriptsize,color=black!60] at (0.0000,0.0000) {0};
\node[below,font=\scriptsize,color=black!60] at (0.9429,0.0000) {1};
\node[below,font=\scriptsize,color=black!60] at (1.8857,0.0000) {2};
\node[below,font=\scriptsize,color=black!60] at (2.8286,0.0000) {3};
\node[below,font=\scriptsize,color=black!60] at (3.7714,0.0000) {4};
\node[below,font=\scriptsize,color=black!60] at (4.7143,0.0000) {5};
\node[below,font=\scriptsize,color=black!60] at (5.6571,0.0000) {6};
\node[below,font=\scriptsize,color=black!60] at (6.6000,0.0000) {7};
\node[font=\small] at (3.3,4.95) {$\mathbf{R}^{100}$: $f(x^{(k)})-p^{\star}$ vs.\ $k$};
\draw[cblue,very thick] plot coordinates {(0.000,4.465) (0.943,4.384) (1.886,4.123) (2.829,3.721) (3.771,3.415) (4.714,2.923) (5.657,1.955) (6.600,0.000)};
\fill[cblue] (0.000,4.465) circle (1.6pt);
\fill[cblue] (0.943,4.384) circle (1.6pt);
\fill[cblue] (1.886,4.123) circle (1.6pt);
\fill[cblue] (2.829,3.721) circle (1.6pt);
\fill[cblue] (3.771,3.415) circle (1.6pt);
\fill[cblue] (4.714,2.923) circle (1.6pt);
\fill[cblue] (5.657,1.955) circle (1.6pt);
\fill[cblue] (6.600,0.000) circle (1.6pt);
\draw[cred,very thick] plot coordinates {(0.000,4.465) (0.943,4.335) (1.886,4.027) (2.829,3.766) (3.771,3.416) (4.714,2.745) (5.657,1.351) (6.600,0.000)};
\fill[cred] (0.000,4.465) circle (1.6pt);
\fill[cred] (0.943,4.335) circle (1.6pt);
\fill[cred] (1.886,4.027) circle (1.6pt);
\fill[cred] (2.829,3.766) circle (1.6pt);
\fill[cred] (3.771,3.416) circle (1.6pt);
\fill[cred] (4.714,2.745) circle (1.6pt);
\fill[cred] (5.657,1.351) circle (1.6pt);
\fill[cred] (6.600,0.000) circle (1.6pt);
\node[font=\scriptsize,color=cblue] at (3.63,3.024) {backtracking};
\node[font=\scriptsize,color=cred] at (1.9799999999999998,1.26) {exact LS};
\end{tikzpicture}
上图由下面的 TikZ 代码编译而来:
\definecolor{cblue}{RGB}{31,119,180}
\definecolor{cred}{RGB}{214,39,40}
\definecolor{cgreen}{RGB}{44,160,44}
\definecolor{corange}{RGB}{255,127,14}
\definecolor{cpurple}{RGB}{148,103,189}
\definecolor{cbrown}{RGB}{140,86,75}
\definecolor{cpink}{RGB}{227,119,194}
\definecolor{cgray}{RGB}{127,127,127}
\begin{tikzpicture}[x=1cm,y=1cm,>=stealth,line cap=round,line join=round]
\draw[color=black!15,very thin] (0.0000,0) -- (0.0000,4.2) (0.9429,0) -- (0.9429,4.2) (1.8857,0) -- (1.8857,4.2) (2.8286,0) -- (2.8286,4.2) (3.7714,0) -- (3.7714,4.2) (4.7143,0) -- (4.7143,4.2) (5.6571,0) -- (5.6571,4.2) (6.6000,0) -- (6.6000,4.2) ;
\draw[->,color=black!60] (0,0) -- (6.8999999999999995,0) node[below] {$k$};
\draw[->,color=black!60] (0,0) -- (0,4.5) node[left] {$t$};
\draw[cblue,very thick] plot [smooth] coordinates {(0.000,2.000) (0.943,4.000) (1.886,4.000) (2.829,4.000) (3.771,4.000) (4.714,4.000) (5.657,4.000)};
\fill[cblue] (0.000,2.000) circle (1.6pt);
\fill[cblue] (0.943,4.000) circle (1.6pt);
\fill[cblue] (1.886,4.000) circle (1.6pt);
\fill[cblue] (2.829,4.000) circle (1.6pt);
\fill[cblue] (3.771,4.000) circle (1.6pt);
\fill[cblue] (4.714,4.000) circle (1.6pt);
\fill[cblue] (5.657,4.000) circle (1.6pt);
\draw[cred,very thick] plot [smooth] coordinates {(0.000,3.296) (0.943,4.205) (1.886,4.515) (2.829,5.823) (3.771,4.210) (4.714,4.017) (5.657,4.061)};
\fill[cred] (0.000,3.296) circle (1.6pt);
\fill[cred] (0.943,4.205) circle (1.6pt);
\fill[cred] (1.886,4.515) circle (1.6pt);
\fill[cred] (2.829,5.823) circle (1.6pt);
\fill[cred] (3.771,4.210) circle (1.6pt);
\fill[cred] (4.714,4.017) circle (1.6pt);
\fill[cred] (5.657,4.061) circle (1.6pt);
\node[below,font=\scriptsize,color=black!60] at (0.0000,0) {0};
\node[below,font=\scriptsize,color=black!60] at (0.9429,0) {1};
\node[below,font=\scriptsize,color=black!60] at (1.8857,0) {2};
\node[below,font=\scriptsize,color=black!60] at (2.8286,0) {3};
\node[below,font=\scriptsize,color=black!60] at (3.7714,0) {4};
\node[below,font=\scriptsize,color=black!60] at (4.7143,0) {5};
\node[below,font=\scriptsize,color=black!60] at (5.6571,0) {6};
\node[below,font=\scriptsize,color=black!60] at (6.6000,0) {7};
\node[font=\small] at (3.3,4.95) {step length vs.\ $k$};
\node[font=\scriptsize,color=cblue] at (4.752,1.1760000000000002) {backtracking};
\node[font=\scriptsize,color=cred] at (3.63,2.1) {exact LS};
\end{tikzpicture} 中的例子
考虑更大规模的问题
其中

上图由下面的 TikZ 代码编译而来:
\definecolor{cblue}{RGB}{31,119,180}
\definecolor{cred}{RGB}{214,39,40}
\definecolor{cgreen}{RGB}{44,160,44}
\definecolor{corange}{RGB}{255,127,14}
\definecolor{cpurple}{RGB}{148,103,189}
\definecolor{cbrown}{RGB}{140,86,75}
\definecolor{cpink}{RGB}{227,119,194}
\definecolor{cgray}{RGB}{127,127,127}
\begin{tikzpicture}[x=1cm,y=1cm,>=stealth,line cap=round,line join=round]
\draw[color=black!25,very thin] (0.0000,0.0000) -- (6.6000,0.0000) (0.0000,0.3000) -- (6.6000,0.3000) (0.0000,0.6000) -- (6.6000,0.6000) (0.0000,0.9000) -- (6.6000,0.9000) (0.0000,1.2000) -- (6.6000,1.2000) (0.0000,1.5000) -- (6.6000,1.5000) (0.0000,1.8000) -- (6.6000,1.8000) (0.0000,2.1000) -- (6.6000,2.1000) (0.0000,2.4000) -- (6.6000,2.4000) (0.0000,2.7000) -- (6.6000,2.7000) (0.0000,3.0000) -- (6.6000,3.0000) (0.0000,3.3000) -- (6.6000,3.3000) (0.0000,3.6000) -- (6.6000,3.6000) (0.0000,3.9000) -- (6.6000,3.9000) (0.0000,4.2000) -- (6.6000,4.2000);
\draw[color=black!15,very thin] (0.0000,0.0000) -- (0.0000,4.2000) (0.7333,0.0000) -- (0.7333,4.2000) (1.4667,0.0000) -- (1.4667,4.2000) (2.2000,0.0000) -- (2.2000,4.2000) (2.9333,0.0000) -- (2.9333,4.2000) (3.6667,0.0000) -- (3.6667,4.2000) (4.4000,0.0000) -- (4.4000,4.2000) (5.1333,0.0000) -- (5.1333,4.2000) (5.8667,0.0000) -- (5.8667,4.2000) (6.6000,0.0000) -- (6.6000,4.2000);
\draw[->,color=black!60] (0.0000,0.0000) -- (6.9500,0.0000) node[anchor=west,xshift=2pt,yshift=-6pt] {$k$};
\draw[->,color=black!60] (0.0000,0.0000) -- (0.0000,4.5500) node[left=1pt] {$f-p^{\star}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.0000) {$10^{-12}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.3000) {$10^{-11}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.6000) {$10^{-10}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,0.9000) {$10^{-9}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,1.2000) {$10^{-8}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,1.5000) {$10^{-7}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,1.8000) {$10^{-6}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,2.1000) {$10^{-5}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,2.4000) {$10^{-4}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,2.7000) {$10^{-3}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,3.0000) {$10^{-2}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,3.3000) {$10^{-1}$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,3.6000) {1};
\node[left,font=\scriptsize,color=black!60] at (0.0000,3.9000) {$10$};
\node[left,font=\scriptsize,color=black!60] at (0.0000,4.2000) {$10^{2}$};
\node[below,font=\scriptsize,color=black!60] at (0.0000,0.0000) {0};
\node[below,font=\scriptsize,color=black!60] at (0.7333,0.0000) {1};
\node[below,font=\scriptsize,color=black!60] at (1.4667,0.0000) {2};
\node[below,font=\scriptsize,color=black!60] at (2.2000,0.0000) {3};
\node[below,font=\scriptsize,color=black!60] at (2.9333,0.0000) {4};
\node[below,font=\scriptsize,color=black!60] at (3.6667,0.0000) {5};
\node[below,font=\scriptsize,color=black!60] at (4.4000,0.0000) {6};
\node[below,font=\scriptsize,color=black!60] at (5.1333,0.0000) {7};
\node[below,font=\scriptsize,color=black!60] at (5.8667,0.0000) {8};
\node[below,font=\scriptsize,color=black!60] at (6.6000,0.0000) {9};
\node[font=\small] at (3.3,4.95) {$\mathbf{R}^{10000}$: $f(x^{(k)})-p^{\star}$ vs.\ $k$};
\draw[cblue,very thick] plot coordinates {(0.000,4.747) (0.733,4.632) (1.467,4.479) (2.200,3.952) (2.933,3.562) (3.667,3.400) (4.400,3.164) (5.133,2.713) (5.867,1.819) (6.600,-1.200)};
\fill[cblue] (0.000,4.747) circle (1.7pt);
\fill[cblue] (0.733,4.632) circle (1.7pt);
\fill[cblue] (1.467,4.479) circle (1.7pt);
\fill[cblue] (2.200,3.952) circle (1.7pt);
\fill[cblue] (2.933,3.562) circle (1.7pt);
\fill[cblue] (3.667,3.400) circle (1.7pt);
\fill[cblue] (4.400,3.164) circle (1.7pt);
\fill[cblue] (5.133,2.713) circle (1.7pt);
\fill[cblue] (5.867,1.819) circle (1.7pt);
\fill[cblue] (6.600,-1.200) circle (1.7pt);
\end{tikzpicture}Newton 方法的仿射不变性
Newton 方法的一个非常重要的特征是它不依赖于线性(或仿射)坐标变换。设
例如,对前文条件数随参数
总结
与梯度和最速下降方法相比,Newton 方法有以下非常强的优点:
- 收敛一般很快,且在
附近是二次的。一旦进入二次收敛阶段,至多六次左右的迭代即可产生很高精度的解。 - Newton 方法是仿射不变的,对坐标选择和目标函数下水平集的条件数不敏感。
- Newton 方法对问题规模具有很好的伸缩性:它在
问题上的表现与其在 问题上的表现相似,所需步数只有适度的增加。 - Newton 方法的良好性能不依赖于算法参数的选择;相比之下,最速下降方法中范数的选择对其性能起关键作用。
Newton 方法的主要缺点是形成和存储 Hessian 的代价,以及计算 Newton 步(需要求解一个线性方程组)的代价。许多情形下可以利用问题的结构显著降低计算 Newton 步的代价(见下文实现部分)。另一类替代算法是拟 Newton(quasi-Newton)方法,它们形成搜索方向所需计算量更小,但保留了 Newton 方法的一些重要优点(如
实现
直线搜索的预计算
最简单的直线搜索实现对每个
设
一个更具体的例子是线性矩阵不等式的解析中心问题,即极小化
先对
其中
计算 Newton 步
计算 Newton 步
Newton 减量可由
带状结构:若
例如
稀疏结构:更一般地,当目标函数可以表示为一些只依赖少数变量的函数之和、且每个变量只出现在其中少数几个函数中时,Hessian 是稀疏的。此时可用稀疏 Cholesky 分解计算置换矩阵
对角加低秩:若 Hessian 可以表示为对角矩阵加低秩(秩为
其中
求解后由