| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 牛顿法,高斯-牛顿法 -> 正文阅读 |
|
[人工智能]牛顿法,高斯-牛顿法 |
牛顿法(Newton’s method)假如已知函数 f ( x ) f(x) f(x),想要求 f ( x ) = 0 f(x)=0 f(x)=0 的解(或者叫根)。 牛顿法(Newton’s method)大致的思想是: 下面的解释1是一个比较直观的过程,不过问题的设计不太合理。解释2会好一点。 例子: 求 f ( x ) f(x) f(x) 的极小值。 解释1假如 f ( x ) f(x) f(x) 长这样: 首先,选一个初始值估计值
x
0
x_0
x0?,由于函数已知,带入得到对应的函数值为
f
(
x
0
)
f(x_0)
f(x0?)。 已知一个点和斜率,可以求得直线方程:
y
?
f
(
x
0
)
x
?
x
0
=
f
′
(
x
0
)
?
y
=
f
′
(
x
0
)
(
x
?
x
0
)
+
f
(
x
0
)
(1)
\dfrac{y-f(x_0)}{x-x_0} = f'(x_0) \\ \Downarrow \\ y = f'(x_0)(x-x_0) + f(x_0) \tag{1}
x?x0?y?f(x0?)?=f′(x0?)?y=f′(x0?)(x?x0?)+f(x0?)(1) 现在,求红色直线与
x
x
x 轴的交点:
x
1
x_1
x1? 的值。 求得 x 1 = x 0 ? f ( x 0 ) f ′ ( x 0 ) x_1 = x_0 - \frac{f(x_0)}{f'(x_0)} x1?=x0??f′(x0?)f(x0?)? 把 x 1 x_1 x1? 代回原方程,得到对应的函数值 f ( x 1 ) f(x_1) f(x1?)。在该点处继续求切线方程,重复上述步骤。 求直线与 x x x 轴的交点,得到 x 2 x_2 x2?: 从图中可以看到, f ( x 2 ) f(x_2) f(x2?) 已经几乎是极小值了。 实际操作中会判断两次迭代的差值
f
(
x
n
)
?
f
(
x
n
?
1
)
f(x_n) - f(x_{n-1})
f(xn?)?f(xn?1?),如果足够小,就可以结束迭代了。
解释2来自知乎:https://zhuanlan.zhihu.com/p/103724149 一维情况迭代公式:
牛顿法的推导基于二阶可微函数的泰勒展开,以一维函数为例,在
x
0
x_0
x0? 处
f
(
x
)
f(x)
f(x) 的泰勒展开: 即在 x 0 x_0 x0? 附近可以用 f ( x 0 ) + f ′ ( x 0 ) ( x ? x 0 ) + 1 2 f ′ ′ ( x 0 ) ( x ? x 0 ) 2 (2) \textcolor{#D97600}{f(x_0) + f'(x_0)(x-x_0) + \dfrac{1}{2} f''(x_0)(x-x_0)^2} \tag{2} f(x0?)+f′(x0?)(x?x0?)+21?f′′(x0?)(x?x0?)2(2) 近似替代 f ( x ) \textcolor{#417991}{f(x)} f(x)。 式子(2)是对
f
(
x
)
\textcolor{#417991}{f(x)}
f(x) 在
x
0
x_0
x0? 处的二阶近似,如下图橙色曲线: 蓝色曲线代表原函数 f ( x ) \textcolor{#417991}{f(x)} f(x)。绿色点代表当前点 x 0 \textcolor{#007500}{x_0} x0?。 对橙色曲线求导,求倒数的零点,得到下一次迭代的位置
x
1
x_1
x1?。 式子(4)即为一维函数的牛顿法迭代公式。 高维情况迭代公式:
对于高维函数,推导过程基于多元函数的泰勒展开: f ( x ) ≈ f ( x 0 ) + ? f ( x 0 ) T ? ( x ? x 0 ) + 1 2 ( x ? x 0 ) T ? H ( x 0 ) ? ( x ? x 0 ) (5) f(\boldsymbol{x}) \approx f(\boldsymbol{x}_0) + \nabla f(\boldsymbol{x}_0)^T \cdot (\boldsymbol{x} - \boldsymbol{x}_0) + \frac{1}{2} (\boldsymbol{x} - \boldsymbol{x}_0)^T \cdot H(\boldsymbol{x}_0) \cdot (\boldsymbol{x} - \boldsymbol{x}_0) \tag{5} f(x)≈f(x0?)+?f(x0?)T?(x?x0?)+21?(x?x0?)T?H(x0?)?(x?x0?)(5) 上面公式用高维二次曲面在
x
0
\boldsymbol{x}_0
x0? 处逼近原函数。 接下来,和一维的情况一样,令式子(5)右边的那部分对
x
\boldsymbol{x}
x 求导,令导数等于
0
0
0: 解得 x 1 = x 0 ? H ( x 0 ) ? 1 ? f ( x 0 ) (7) \boldsymbol{x}_{1} = \boldsymbol{x}_0 - H(\boldsymbol{x}_0)^{-1} \nabla f(\boldsymbol{x}_0) \tag{7} x1?=x0??H(x0?)?1?f(x0?)(7) 其中
H
H
H 是 Hessian Matrix (海森矩阵),其实就是个二阶导的矩阵。 牛顿法的优点是收敛速度快,缺点是需要求矩阵的逆,计算量比较大。 解决这个问题的方法之一是拟牛顿法(Quasi-Newton Methods)。 高斯-牛顿法(Gauss–Newton algorithm)介绍: 例子: 我们希望找到包含
n
n
n 个参数的非线性函数
f
(
x
,
θ
)
f(\boldsymbol{x}, \boldsymbol{\theta})
f(x,θ),拟合上面
m
m
m 组数据。 为了方便描述,设代入第 i i i 个样本后,函数值为 f ( i ) ( θ ) f^{(i)}(\boldsymbol{\theta}) f(i)(θ) 。也就是 f ( i ) ( θ ) = f ( x ( i ) , θ ) f^{(i)}(\boldsymbol{\theta}) = f( \boldsymbol{x}^{(i)}, \boldsymbol{\theta} ) f(i)(θ)=f(x(i),θ)。 则最小二乘目标函数(或者叫平方误差函数?)为: ? ( θ ) = ∑ i = 1 m ∥ f ( i ) ( θ ) ? y ( i ) ∥ 2 (8) \epsilon (\boldsymbol{\theta}) = \sum_{i=1}^m \| f^{(i)}(\boldsymbol{\theta}) - y^{(i)} \| ^2 \tag{8} ?(θ)=i=1∑m?∥f(i)(θ)?y(i)∥2(8) (一般用 J J J 表示代价函数,但是这里用了 ? \epsilon ?,原因是稍后要用 J J J 表示雅可比矩阵) 我们需要找到一组参数 θ = [ θ 1 , θ 2 , … , θ n ] T \boldsymbol{\theta} = [\theta_1, \theta_2, \dots, \theta_n]^T θ=[θ1?,θ2?,…,θn?]T,使式子(8)最小。也就是: arg ? min ? θ ? ( θ ) \arg\min_{\boldsymbol{\theta}} \epsilon(\boldsymbol{\theta}) argθmin??(θ) 用式子(8)对第
j
j
j 个参数
θ
j
\theta_j
θj? 求导: 令雅可比矩阵(jacobi matrix)
J
J
J 为: 所以
J
J
J 是一个
m
m
m 行
n
n
n 列的矩阵,
m
×
n
m\times n
m×n。 令残差(residual,样本与拟合值之间的差)
r
\textbf{r}
r 为: 则式子(9)可以写成矩阵形式: 接下来求海森矩阵第
k
k
k 行
j
j
j 列的元素: 令 H H H 为 ? ( θ ) \epsilon(\boldsymbol{\theta}) ?(θ) 的海森矩阵,由(11)可知: H = 2 ? ( J T J + S ) H= 2 \cdot (J^T J + S) H=2?(JTJ+S) 其中: S k , j = ∑ i = 1 m ( f ( i ) ( θ ) ? y ( i ) ) ? ? 2 f ( i ) ( θ ) ? θ k ? θ j S_{k,j} = \sum_{i=1}^m \left( f^{(i)}(\boldsymbol{\theta}) - y^{(i)} \right) \cdot \frac{\partial ^2 f^{(i)} (\boldsymbol{\theta})} { \partial \theta_k \partial \theta_j } Sk,j?=i=1∑m?(f(i)(θ)?y(i))??θk??θj??2f(i)(θ)? 把 (10) 和 (12) 带入 (7) 得: 很多时候 (13) 中的
S
S
S 可以忽略,最终高斯-牛顿法的迭代公式为: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 | -2025/4/23 16:06:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |