优化问题:就是求最值。涉及两类函数

  • min\minmax\max,意思就是求它后面那个函数的值
  • argmin{\rm argmin}{}argmax{\rm argmax}{},意思就是求 “使得它后面东西最大” 时自变量的值
  • 符号下面写的东西:自变量 + 自变量范围
  • 对于一个方程组 Ax=bAx=b,定义它的最小二乘解为 argminAxb2\mathrm{argmin}\ \|Ax-b\|^2
  • 基本求法:令对自变量的偏导为零

# 偏导结论

约定:

  • xxnn 维列向量
  • yymm 维列向量

  • (αx)x=αT\dfrac{ {\partial}(\alpha x)}{ {\partial}x}=\alpha^{\rm T}{},其中 α\alphann 维行向量
  • (αx)xT=α\dfrac{ {\partial}(\alpha x)}{ {\partial}x^{\rm T} }=\alpha
  • (xTβ)x=β\dfrac{ {\partial}(x^{\rm T}\beta)}{ {\partial}x}=\beta,其中 β\betann 维列向量
  • (xTAx)x=(AT+A)x\dfrac{ {\partial}(x^{\rm T}Ax)}{ {\partial}x}=(A^{\rm T}+A)x,其中 AAn×nn\times n 方阵
  • (xTBy)x=By\dfrac{ {\partial}(x^{\rm T}By)}{ {\partial}x}=By,其中 BBn×mn\times m 方阵
  • Ax2x=xTATAxx=2ATAx\dfrac{ {\partial}\|Ax\|^2}{ {\partial}x}=\dfrac{ {\partial}x^{\rm T}A^{\rm T}Ax}{ {\partial}x}=2A^{\rm T}Ax,其中 AA 为任意矩阵,bb 为任意可以相加的列向量
  • 最小二乘解

    Axb2x=(xTATbT)(Axb)x=(xTATAxxTATbbTAx+bTb)x=2ATAx2ATb=2AT(Axb)\begin{aligned}\dfrac{ {\partial}\|Ax-b\|^2}{ {\partial}x}&=\dfrac{ {\partial}(x ^{\rm T}A^{\rm T}-b ^{\rm T})(Ax-b)}{ {\partial}x}=\dfrac{ {\partial}(x ^{\rm T}A ^{\rm T}Ax-x ^{\rm T}A ^{\rm T}b-b ^{\rm T}Ax+b ^{\rm T}b)}{ {\partial}x}\\&=2A ^{\rm T}Ax-2A ^{\rm T}b=2A ^{\rm T}(Ax-b)\end{aligned}{}

# 问题描述与记号规定

想象一个黑箱系统,它里头有 nn 个未知量,我们打包成列向量 θ\theta,称为 “参数”。我的目标是估计这个参数。

现在让这个系统动起来。它会吞进去一堆东西,我们打包成列向量 uu,称为 “输入”;吐出来一堆东西,我们打包成列向量 yy,称为 “输出”。我们在 0 时刻、1 时刻、……、N 时刻,观测这个系统,记录这些时刻的输入,我们记为 u(0),u(1),,u(N1)u(0),\,u(1),\,\cdots,\,u(N-1);以及这些输入在下一时刻所产生的输出,我们记为 y(1),y(2),,y(N)y(1),\,y(2),\,\cdots,\,y(N)

使用线性模型来拟合这个系统,也就是说,假定系统的输出关于那 nn 个未知参数是线性的,也即对于 tt 时刻的输出,存在一个系数矩阵(aka 测量向量)ϕ(k)\phi(k) 使得 ϕT(k)θ\phi^\mathrm T(k)\cdot\theta 能够拟合 y(k+1)y(k+1),于是 θ\theta 也就是方程组 y(k+1)=ϕT(t)θy(k+1)=\phi^\mathrm{T}(t)\cdot\theta 的数值解。(注意,ϕ\phi 中可以含有过去时刻的 yyuu,因为对于现在时刻,过去时刻是已知的。)

显然,观测的数据越多,拟合效果越好。本章后面所讲的所有方法,就是要解决:怎么利用这么多输入输出数据,具体求出这个数值解。

# 梯度下降法

思路:迭代之,每次利用一个新数据,更新已有的估计值

先验误差与后验误差

  • 先验误差,即在更新参数之前,用当前的参数看看与真实情况差多少,再更新参数:

    εo(k+1)=y(k+1)ϕT(k)θ^(k)\varepsilon^o(k+1)=y(k+1)-\phi^\mathrm{T}(k)\cdot\hat\theta({\color{orange}k})\quad\

  • 后验误差,即先更新参数,再用更新后的参数看看这一轮迭代的效果如何:

    ε(k+1)=y(k+1)ϕT(k)θ^(k+1)\quad\varepsilon(k+1)=y(k+1)-\phi^\mathrm{T}(k)\cdot\hat\theta({\color{orange}k+1})

[!success] 曰(梯度下降法)
基于先验误差的迭代:

θ^(k+1)=θ^(k)+Fϕ(k)εo(k+1)\hat\theta(k+1)=\hat\theta(k)+F\phi(k)\varepsilon^o(k+1)

基于后验误差的迭代:

θ^(k+1)=θ^(k)+Fϕ(k)εo(k+1)1+ϕT(k)Fϕ(k)\hat\theta(k+1)=\hat\theta(k)+\dfrac{F\phi(k)\varepsilon^o(k+1)}{1+\phi^\mathrm{T}(k)F\phi(k)}{}

其中 FF 相当于学习率,可以取任意正定矩阵,一般用单位矩阵。后验误差稳定性比先验误差好一些。

推导:

(1) 先验误差情形。误差函数定为 12εo(k+1)2\dfrac12\|\varepsilon^o(k+1)\|^2。令更新沿着梯度反方向

Δθ=Fεo(k+1)22θ(k)=Fy(k+1)ϕT(k)θ(k)22θ(k)=Fϕ(k)(y(k+1)ϕT(k)θ(k))=Fϕ(k)εo(k+1)\begin{aligned} \Delta\theta&= -F\dfrac{\partial\,\|\varepsilon^o(k+1)\|^2}{2\ \partial\theta(k)}\\ &= -F\dfrac{\partial\,\|y(k+1)-\phi^\mathrm{T}(k)\theta(k)\|^2}{2\ \partial\theta(k)}\\ &= F\phi (k)\big(y(k+1)-\phi^\mathrm{T}(k)\theta(k)\big)\\ &= F\phi (k)\varepsilon^o(k+1) \end{aligned}

(2) 后验误差情形。这意味着误差函数要改为 12ε(k+1)2\dfrac12\|\varepsilon(k+1)\|^2,取 k+1k\!+\!1 时刻的梯度。

Δθ\Delta\theta 沿误差函数梯度反方向。误差函数的梯度和之前类似:ε(k+1)22θ(k+1)=ϕ(k)ε(k+1)\dfrac{\partial\,\|\varepsilon(k+1)\|^2}{2\ \partial\theta(k+1)}=-\phi (k)\varepsilon(k+1),但是不能只用 Δθ=Fϕ(k)ε(k+1)\Delta\theta=F\phi(k)\varepsilon(k+1) 来计算,因为 ε(k+1)\varepsilon(k\!+\!1) 依赖 θ(k+1)\theta(k\!+\!1),相当于互为因果了。所以要把 ε(k+1)\varepsilon(k\!+\!1)θ(k+1)\theta(k\!+\!1) 中剥离开:

ε(k+1)=y(k+1)ϕT(k)(θ(k)+Δθ)=y(k+1)ϕT(k)θ(k)ϕT(k)Δθ=εo(k+1)ϕT(k)Δθ=εo(k+1)ϕT(k)Fϕ(k)ε(k+1)ε(k+1)=εo(k+1)1+ϕT(k)Fϕ(k)\begin{aligned}\\ \varepsilon(k+1)&= y(k+1)-\phi^\mathrm{T}(k)\big(\theta(k)+\Delta\theta\big)\\ &= y(k+1)-\phi^\mathrm{T}(k)\theta(k)-\phi^\mathrm{T}(k)\Delta\theta\\ &= \varepsilon^o(k+1)-\phi^\mathrm{T}(k)\Delta\theta\\ &= \varepsilon^o(k+1)-\phi^\mathrm{T}(k)F\phi (k)\varepsilon(k+1)\\ \varepsilon(k+1)&= \dfrac{\varepsilon^o(k+1)}{1+\phi^\mathrm{T}(k)F\phi (k)} \end{aligned}

这样就分开了,于是就可以说 Δθ=Fϕ(k)ε(k+1)=Fϕ(k)εo(k+1)1+ϕT(k)Fϕ(k)\Delta\theta=F\phi(k)\varepsilon(k+1)=\dfrac{F\phi(k)\varepsilon^o(k+1)}{1+\phi^\mathrm{T}(k)F\phi (k)}{}

# 最小二乘法

刚才是逐个考虑,而这个方法则是同时把所有数据都考虑进来。将这些数据同时列出并写成矩阵表达式:

{y(1)=ϕT(0)θy(2)=ϕT(1)θy(N)=ϕT(N1)θ[y(1)y(2)y(N)]=[ϕT(0)ϕT(1)ϕT(N1)]θ\left\{ \begin{aligned} y(1)&=\phi^\mathrm{T}(0)\cdot\theta\\ y(2)&=\phi^\mathrm{T}(1)\cdot\theta\\ &\cdots\\ y(N)&=\phi^\mathrm{T}(N-1)\cdot\theta \end{aligned} \right.\ \Rightarrow\ \begin{bmatrix}y(1)\\y(2)\\\vdots\\y(N)\end{bmatrix}=\begin{bmatrix}\phi^\mathrm{T}(0)\\\phi^\mathrm{T}(1)\\\vdots\\\phi^\mathrm{T}(N-1)\end{bmatrix}\cdot\theta

记这个表达式为

yN=ΦNθy_N=\Phi_N \cdot\theta

因此 θ\theta 就是这个方程组的数值解。这块就不用迭代了,直接最小二乘法

[!success] 曰(最小二乘法)

θ^LS=(ΦNTΦN)1ΦNTyN\hat\theta_{LS}=\big(\Phi_N^\mathrm{T}\Phi_N\big)^{-1}\Phi_N^\mathrm{T}y_N

# 各种改进的最小二乘法

算那么大一个 Φ\Phi 矩阵毕竟很麻烦,且只用一条公式去推导的时候稳定性也很差,因此做出改良。赌他不考推导,死记

# 递归最小二乘

递归形式具有如下形式:Δθ=\Delta\theta= 增益 ×\times 测量向量 ×\times 误差

F(k+1)=F(k)F(k)ϕ(k)ϕT(k)F(k)1+ϕ(k)TF(k)ϕ(k)θ^(k+1)=θ^(k)+F(k+1)ϕ(k)εo(k+1)\begin{aligned} F(k+1)&= F(k) - \dfrac{F(k)\phi(k)\phi^\mathrm{T}(k) F(k)}{1 + \phi(k)^\mathrm{T} F(k)\phi(k)}\\ \hat{\theta}(k+1)&= \hat{\theta}(k) + F(k+1)\phi(k)\varepsilon^o(k+1) \end{aligned}

# 加权最小二乘

使用一个正定对称矩阵 WNW_N,规定误差函数中每个参数各自误差的权重,也即优化 J=εTWNεJ=\varepsilon^\mathrm{T}\cdot W_N\cdot\varepsilon

非递归:

θ^WLS=(ΦNTWNΦN)1ΦNTWNyN\hat\theta_{WLS}=\big(\Phi_N^\mathrm{T}W_N\Phi_N\big)^{-1}\Phi_N^\mathrm{T}W_Ny_N

递归:

FW(k+1)=FW(k+1)ϕ(k)w(k)=FW(k)ϕ(k)1w(k)+ϕT(k)FW(k)ϕ(k)FW(k+1)=(IFW(k+1)ϕT(k))FW(k)θ^(k+1)=θ^(k)+FW(k+1)εo(k+1)\begin{aligned} \overline{F}_W(k+1) &= F_W(k+1)\phi(k)w(k) = \dfrac{F_W(k)\phi(k)}{\frac{1}{w(k)} + \phi^\mathrm{T}(k)F_W(k)\phi(k)}\\ F_W(k+1) &= \left( \boldsymbol{I} - \overline{F}_W(k+1)\phi^\mathrm{T}(k) \right) F_W(k)\\ \hat{\theta}(k+1)&= \hat{\theta}(k) + \overline{F}_W(k+1)\varepsilon^o(k+1) \end{aligned}

# 带遗忘因子的递归最小二乘

按顺序迭代

FW(k+1)=FW(k)ϕ(k)λ+ϕT(k)FW(k)ϕ(k)FW(k+1)=(IFW(k+1)ϕT(k))FW(k)1λθ^(k+1)=θ^(k)+FW(k+1)εo(k+1)\begin{aligned} \overline F_W(k+1)&=\dfrac{F_W(k)\phi(k)}{\lambda+\phi^{\rm T}(k)F_W(k)\phi(k)}\\ F_W(k+1)&=\big(\boldsymbol{I}-\overline F_W(k+1)\phi^{\rm T}(k)\big)F_W(k)\dfrac1\lambda\\ \hat\theta(k+1)&=\hat\theta(k)+\overline F_W(k+1)\varepsilon^o(k+1) \end{aligned}

# 带正则化的最小二乘

对于 J=yNΦNθ2J=\|y_N-\Phi_N\theta\|^2,引入正则项以稳定

L2 正则化:即最小化 J+λθ2J+\lambda\|\theta\|^2,结论:θ^=(ΦNTΦN+λI)1ΦNTyN\hat\theta=\left( \Phi_N^\mathrm{T} \Phi_N + \lambda I\right)^{-1} \Phi_N^\mathrm{T}y_N

Tikhonov 正则化(吉洪诺夫):即最小化 J+γθTKθJ+\gamma\theta^\mathrm{T}\boldsymbol{K}\theta,其中后面那项记为 Ω(θ)\Omega(\theta)K\boldsymbol{K}{} 一般是对称的。结论:θ^=(ΦNTΦN+γK)1ΦNTyN\hat\theta=\left( \Phi_N^\mathrm{T} \Phi_N + \gamma \boldsymbol{K} \right)^{-1} \Phi_N^\mathrm{T}y_N

# 带约束的最小二乘

等式约束:例如约束 θcol(U)\theta\in \mathrm{col}(U),做法:θ=Ub\theta=Ub,这样 bb 就是一个不受约束的变量,只要对 bb 做无约束的最小二乘,然后 θ^LS=Ub^LS\hat\theta_{LS}=U\hat b_{LS}{}

不等式约束:递推最小二乘。如果递推过程中某一项 θ\theta 违反了这个约束,则映射到另一个空间上:ρ=F(k)1/2θ\rho=F(k)^{-1/2}\theta,在这个另外的空间上投影(沿着法向量)到约束边界上,然后再反向映射回原来的那个空间