当前位置: 首页 > news >正文

最小二乘问题详解4:非线性最小二乘

1. 引言

在论述最小二乘问题的时候,很多文章都喜欢用拟合直线来举例,但是在现实中像拟合直线这样的线性最小二乘问题往往不是常态,现实世界中更多是像投影成像这种非线性最小二乘问题。在本文中,我们就讲解一下非线性最小二乘问题。

不过,在继续阅读本文之前,一定要先理解之前的3篇文章,因为线性最小二乘是求解非线性最小二乘问题的基础:

  1. 《最小二乘问题详解1:线性最小二乘》
  2. 《最小二乘问题详解2:线性最小二乘求解》
  3. 《最小二乘问题详解3:线性最小二乘实例》

2. 定义

具体来说,非线性最小二乘的目标就是找到一组参数 θ \theta θ,使得非线性模型 f ( x ; θ ) f(x; \theta) f(x;θ) 最好地拟合观测数据。非线性最小二乘模型通常使用如下公式来表达:

y = f ( x ; θ ) + ε \mathbf{y} = f(\mathbf{x}; \theta) + \varepsilon y=f(x;θ)+ε

其中:

  • x ∈ R n \mathbf{x} \in \mathbb{R}^n xRn:输入变量(如坐标、时间等)
  • θ ∈ R p \theta \in \mathbb{R}^p θRp:待估计参数向量
  • f : R d × R p → R m f: \mathbb{R}^d \times \mathbb{R}^p \to \mathbb{R}^m f:Rd×RpRm非线性向量值函数
  • ε \varepsilon ε:观测噪声
  • y ∈ R m \mathbf{y} \in \mathbb{R}^m yRm:观测输出

我们有 n n n 组数据:

{ ( x i , y i ) } i = 1 n \{ (\mathbf{x}_i, \mathbf{y}_i) \}_{i=1}^n {(xi,yi)}i=1n

同样的,非线性最小二乘的目标是最小化残差平方和

min ⁡ θ S ( θ ) = min ⁡ θ ∑ i = 1 n ∥ r i ( θ ) ∥ 2 = min ⁡ θ ∥ r ( θ ) ∥ 2 \boxed{ \min_{\theta} S(\theta) = \min_{\theta} \sum_{i=1}^n \| \mathbf{r}_i(\theta) \|^2 = \min_{\theta} \| \mathbf{r}(\theta) \|^2 } θminS(θ)=θmini=1nri(θ)2=θminr(θ)2

其中:

  • r i ( θ ) = y i − f ( x i ; θ ) \mathbf{r}_i(\theta) = \mathbf{y}_i - f(\mathbf{x}_i; \theta) ri(θ)=yif(xi;θ):第 i i i 个样本的残差向量
  • r ( θ ) = [ r 1 T , r 2 T , … , r n T ] T \mathbf{r}(\theta) = [\mathbf{r}_1^T, \mathbf{r}_2^T, \dots, \mathbf{r}_n^T]^T r(θ)=[r1T,r2T,,rnT]T:所有残差拼成的长向量,维度 N = n ⋅ m N = n \cdot m N=nm

那么非线性最小二乘能不能像线性那样直接求解呢?显然是不行的。因为在线性情况下,残差是 r = A θ − b \mathbf{r} = A\theta - b r=Aθb,目标函数是 ∥ A θ − b ∥ 2 \|A\theta - b\|^2 Aθb2,这是一个二次函数,所以有闭式解 ( A T A ) − 1 A T b (A^T A)^{-1} A^T b (ATA)1ATb。但在非线性情况下, ∥ r ( θ ) ∥ 2 \| \mathbf{r}(\theta) \|^2 r(θ)2 是一个非凸、非二次函数,无法直接求逆,也就无法计算出闭式解。更直观的说,通过非线性函数 f ( x ; θ ) f(\mathbf{x}; \theta) f(x;θ)是无法写成类似设计矩阵 A θ = b A\theta=b Aθ=b这样的线性方程组的。

一种求解的思路是局部线性化(Local Linearization)。虽然 f ( x ; θ ) f(\mathbf{x}; \theta) f(x;θ)是非线性的,但是当前估计 θ k \theta_k θk附近,我们可以用泰勒展开一阶近似

f ( x i ; θ ) ≈ f ( x i ; θ k ) + J i ( θ k ) ( θ − θ k ) f(x_i; \theta) \approx f(x_i; \theta_k) + J_i(\theta_k) (\theta - \theta_k) f(xi;θ)f(xi;θk)+Ji(θk)(θθk)

其中:

  • J i ( θ k ) = ∂ f ( x i ; θ ) ∂ θ ∣ θ = θ k J_i(\theta_k) = \frac{\partial f(x_i; \theta)}{\partial \theta} \big|_{\theta = \theta_k} Ji(θk)=θf(xi;θ) θ=θk雅可比矩阵的第 i i i
  • J ( θ k ) J(\theta_k) J(θk) n × p n \times p n×p 矩阵( n n n 已知参数, p p p 待定参数)

所以残差近似为:

r ( θ ) ≈ r ( θ k ) + J ( θ k ) ( θ − θ k ) \mathbf{r}(\theta) \approx \mathbf{r}(\theta_k) + J(\theta_k) (\theta - \theta_k) r(θ)r(θk)+J(θk)(θθk)

这样就得到了一个关于 θ \theta θ 的线性模型

3. 雅可比矩阵

在进行正式求解之前,我们先理解一下雅可比矩阵(Jacobian Matrix),因为它在最小二乘问题中经常被提到。其实从泰勒公式出发也很好理解,一元函数泰勒公式的一阶项是该函数的导数,那么多元函数泰勒公式的一阶项就是该函数的偏导。对于非线性最小二乘问题来说,一阶项雅可比矩阵 J ( θ ) J(\theta) J(θ) 是残差向量 r ( θ ) \mathbf{r}(\theta) r(θ) 对参数 θ \theta θ 的一阶偏导数组成的矩阵。

J ( θ ) J(\theta) J(θ) N × p N \times p N×p 矩阵,其中 N = ∑ i = 1 n m i N = \sum_{i=1}^n m_i N=i=1nmi(通常 m i m_i mi是一个固定值 m m m),即:

J ( θ ) = [ ∂ r 1 ∂ θ T ∂ r 2 ∂ θ T ⋮ ∂ r n ∂ θ T ] ∈ R N × p J(\theta) = \begin{bmatrix} \frac{\partial \mathbf{r}_1}{\partial \theta^T} \\ \frac{\partial \mathbf{r}_2}{\partial \theta^T} \\ \vdots \\ \frac{\partial \mathbf{r}_n}{\partial \theta^T} \end{bmatrix} \in \mathbb{R}^{N \times p} J(θ)= θTr1θTr2θTrn RN×p

其中:

  • ∂ r i ∂ θ T \frac{\partial \mathbf{r}_i}{\partial \theta^T} θTri 是一个 m × p m \times p m×p 矩阵,表示第 i i i 个样本的残差对参数的梯度。

由于 r i = y i − f ( x i ; θ ) \mathbf{r}_i = \mathbf{y}_i - f(\mathbf{x}_i; \theta) ri=yif(xi;θ),且 y i \mathbf{y}_i yi 是常数,所以:

∂ r i ∂ θ T = − ∂ f ( x i ; θ ) ∂ θ T \frac{\partial \mathbf{r}_i}{\partial \theta^T} = - \frac{\partial f(\mathbf{x}_i; \theta)}{\partial \theta^T} θTri=θTf(xi;θ)

因此:

J ( θ ) = − [ ∂ f ( x 1 ; θ ) ∂ θ T ∂ f ( x 2 ; θ ) ∂ θ T ⋮ ∂ f ( x n ; θ ) ∂ θ T ] \boxed{ J(\theta) = - \begin{bmatrix} \frac{\partial f(\mathbf{x}_1; \theta)}{\partial \theta^T} \\ \frac{\partial f(\mathbf{x}_2; \theta)}{\partial \theta^T} \\ \vdots \\ \frac{\partial f(\mathbf{x}_n; \theta)}{\partial \theta^T} \end{bmatrix} } J(θ)= θTf(x1;θ)θTf(x2;θ)θTf(xn;θ)

这里 n n n表示数据量的个数, p p p表示待定参数的个数; m m m则有点绕,表示每个数据样本的输出维度,即问题模型输出多少个值。其实这里考虑 m m m确实会增加问题的复杂度,直接将其设置为1来理解就可以了。或者使用分块形式来简化表达,令

J i ( θ ) = ∂ f ( x i ; θ ) ∂ θ T ∈ R m × p J_i(\theta) = \frac{\partial f(\mathbf{x}_i; \theta)}{\partial \theta^T} \in \mathbb{R}^{m \times p} Ji(θ)=θTf(xi;θ)Rm×p

是第 i i i 个样本的模型输出对参数的雅可比块

则整体雅可比为:

J ( θ ) = − [ J 1 ( θ ) T J 2 ( θ ) T ⋯ J n ( θ ) T ] T J(\theta) = - \begin{bmatrix} J_1(\theta)^T & J_2(\theta)^T & \cdots & J_n(\theta)^T \end{bmatrix}^T J(θ)=[J1(θ)TJ2(θ)TJn(θ)T]T

4. Gauss-Newton

求解非线性最小二乘问题最基础最好理解的就是Gauss-Newton方法,它结合了牛顿法的迭代优化框架(就是高中数学中迭代逼近求解平方根的过程)和高斯的线性化思想,所以将其称为Gauss-Newton方法。它的算法流程如下:

  1. 初始化:选一个初始猜测 θ 0 \theta_0 θ0

  2. 迭代:对 k = 0 , 1 , 2 , … k = 0, 1, 2, \dots k=0,1,2,
    a. 计算当前残差: r k = y − f ( x ; θ k ) \mathbf{r}_k = \mathbf{y} - f(\mathbf{x}; \theta_k) rk=yf(x;θk)
    b. 计算雅可比矩阵 J k = J ( θ k ) J_k = J(\theta_k) Jk=J(θk)
    c. 求解线性最小二乘子问题

    min ⁡ Δ θ ∥ J k Δ θ + r k ∥ 2 \min_{\Delta \theta} \| J_k \Delta \theta + \mathbf{r}_k \|^2 ΔθminJkΔθ+rk2

    解为:

    Δ θ = − ( J k T J k ) − 1 J k T r k \Delta \theta = - (J_k^T J_k)^{-1} J_k^T \mathbf{r}_k Δθ=(JkTJk)1JkTrk

    d. 更新参数:

    θ k + 1 = θ k + Δ θ \theta_{k+1} = \theta_k + \Delta \theta θk+1=θk+Δθ

  3. 终止:当 ∥ Δ θ ∥ \|\Delta \theta\| ∥Δθ 很小或目标函数变化很小时停止

Gauss-Newton方法的基本思路是每一步都在当前点附近做线性近似;然后走一步,走的方向是让残差平方和下降最快的方向之一;最终收敛到一个局部最小值。可能这个算法流程可能还是有点抽象,我们将其中一次迭代的过程论述的更清楚一些:

  1. θ k \theta_k θk 处做一阶泰勒展开。对残差函数 r ( θ ) \mathbf{r}(\theta) r(θ) θ k \theta_k θk 附近线性化:

    r ( θ ) ≈ r ( θ k ) + J ( θ k ) ( θ − θ k ) \mathbf{r}(\theta) \approx \mathbf{r}(\theta_k) + J(\theta_k) (\theta - \theta_k) r(θ)r(θk)+J(θk)(θθk)

    Δ θ = θ − θ k \Delta \theta = \theta - \theta_k Δθ=θθk,则:

    r ( θ ) ≈ r k + J k Δ θ \mathbf{r}(\theta) \approx \mathbf{r}_k + J_k \Delta \theta r(θ)rk+JkΔθ

    其中:

    • r k = r ( θ k ) \mathbf{r}_k = \mathbf{r}(\theta_k) rk=r(θk)
    • J k = J ( θ k ) J_k = J(\theta_k) Jk=J(θk)
  2. 构造局部二次近似目标函数。代入原目标:

    S ( θ ) = ∥ r ( θ ) ∥ 2 ≈ ∥ r k + J k Δ θ ∥ 2 S(\theta) = \| \mathbf{r}(\theta) \|^2 \approx \| \mathbf{r}_k + J_k \Delta \theta \|^2 S(θ)=r(θ)2rk+JkΔθ2

    展开:

    S ( θ ) ≈ r k T r k + 2 r k T J k Δ θ + Δ θ T J k T J k Δ θ S(\theta) \approx \mathbf{r}_k^T \mathbf{r}_k + 2 \mathbf{r}_k^T J_k \Delta \theta + \Delta \theta^T J_k^T J_k \Delta \theta S(θ)rkTrk+2rkTJkΔθ+ΔθTJkTJkΔθ

    这是一个关于 Δ θ \Delta \theta Δθ二次函数

  3. 最小化这个二次函数。对 Δ θ \Delta \theta Δθ 求导并令导数为零:

    ∂ S ∂ ( Δ θ ) = 2 J k T r k + 2 J k T J k Δ θ = 0 \frac{\partial S}{\partial (\Delta \theta)} = 2 J_k^T \mathbf{r}_k + 2 J_k^T J_k \Delta \theta = 0 (Δθ)S=2JkTrk+2JkTJkΔθ=0

    得到正规方程(Normal Equation):

    J k T J k Δ θ = − J k T r k \boxed{ J_k^T J_k \Delta \theta = - J_k^T \mathbf{r}_k } JkTJkΔθ=JkTrk

  4. 求解 Gauss-Newton 步长。如果 J k T J k J_k^T J_k JkTJk 可逆,则解为:

    Δ θ = − ( J k T J k ) − 1 J k T r k \boxed{ \Delta \theta = - (J_k^T J_k)^{-1} J_k^T \mathbf{r}_k } Δθ=(JkTJk)1JkTrk

  5. 更新参数

    θ k + 1 = θ k + Δ θ \theta_{k+1} = \theta_k + \Delta \theta θk+1=θk+Δθ

看到这个过程中的正规方程了吗?这就是我们说的非线性最小二乘求解的基础是线性最小二乘的原因了,非线性最小二乘问题的每次迭代过程就是一个线性最小二乘子问题。

非线性最小二乘与线性最小二乘求解过程的对比如下:

特性线性最小二乘非线性最小二乘(Gauss-Newton)
模型 f ( x ; θ ) = A θ f(x; \theta) = A \theta f(x;θ)=Aθ f ( x ; θ ) f(x; \theta) f(x;θ) 任意非线性
残差 r = A θ − b \mathbf{r} = A\theta - b r=Aθb r ( θ ) = y − f ( x ; θ ) \mathbf{r}(\theta) = \mathbf{y} - f(\mathbf{x}; \theta) r(θ)=yf(x;θ)
雅可比 J = A J = A J=A(常数) J ( θ ) = − ∂ f ∂ θ T J(\theta) = -\frac{\partial f}{\partial \theta^T} J(θ)=θTf(依赖 θ \theta θ
θ ∗ = ( A T A ) − 1 A T b \theta^* = (A^T A)^{-1} A^T b θ=(ATA)1ATb θ k + 1 = θ k − ( J k T J k ) − 1 J k T r k \theta_{k+1} = \theta_k - (J_k^T J_k)^{-1} J_k^T \mathbf{r}_k θk+1=θk(JkTJk)1JkTrk
是否迭代
http://www.dtcms.com/a/482903.html

相关文章:

  • pcba方案开发|车载智能充气泵
  • c++项目篇:高并发内存池项目开发记录01
  • wordpress wp_term_taxonomy优化网站哪家好
  • 怎么选择宜昌网站建设沈阳网站建设与开发
  • SQL提数与数据分析指南
  • 新手用Godot打造2D像素风游戏
  • 框架--SpringMVC
  • 做外贸网站注意wordpress 附件下载插件
  • 微波人体传感器技术深度解析:从多普勒效应到工程落地
  • 定长内存池 思考实现过程 C++ 附源码
  • 风电场站AGC/AVC系统方案|风力发电AGC/AVC系统方案|风电场站一次调频系统方案|风力发电一次调频系统产品方案概述
  • sward,一款超级轻量且简洁的知识管理工具
  • 类似京东的购物网站开发价格课程设计代做网站推荐
  • 网站开发毕业设计开题报告手机怎么安装网站程序
  • python调用远程服务器的ollama embedding模型
  • 手机电子商务网站建设怎么做网站排名优化
  • SQL入门:行列转换实战-从基础到高级
  • 科大讯飞【免费】的开源模型实现录音转写与角色判定
  • 上海专业建设网站制作微信群推广
  • 景区网站建设原则做网站需要每年都缴费吗
  • 推广一下自己刚撸的 IDEA 插件—Bean Copy 助手
  • 线粒体靶向压电催化剂调控焦亡与胞葬作用以增强骨肉瘤免疫原性死亡
  • Vue 3 + TypeScript 开发的视频直播页面组件
  • 【开题答辩实录分享】以《智能体育训练助手的设计与实现》为例进行答辩实录分享
  • Vue + Element Plus 手动注册 v-loading 指令
  • docker elasticsearch端口映射解决端口冲突问题
  • SD:在一个 Ubuntu 系统安装 stable diffusion ComfyUI
  • 如何使用命令修改conda虚拟环境目录
  • 学习随笔-ES6和ES5的区别
  • 文件上传阿里云OSS以及本地图片服务器搭建