地下目标探测中的反演方法
第一部分 数值优化算法
第1章 优化方法概述
反演的流程一般来说包括构造目标函数和最优化目标函数两部分。反演算法指的就是最优化目标函数的算法。
如果在一个规划问题的目标函数和约束条件中,至少有一个方程式决策变量的非线性函数,就将这类规划问题称为非线性规划。当一个非线性规划问题的自变量x没有任何约束,或说可行域即是整个n维向量空间,则称这样的非线性规划问题为无约束问题。
所谓的无约束优化问题,就是对目标函数的求解,没有任何的约束限制的优化问题,比如求函数最小值。
求解这类的问题可以分为两大类:一个是最优条件法和迭代法。
最优条件法是是指当函数存在解析形式,能够通过最优性条件求解出显式最优解。对于无约束最优化问题,如果f(x)在最优点x附近可微,那么x是局部极小点的必要条件为:导数为零。我们常常就是通过这个必要条件去求取可能的极小值点,再验证这些点是否真的是极小值点。当上式方程可以求解的时候,无约束最优化问题基本就解决了。
实际中,这个方程往往难以求解。这就引出了第二大类方法:迭代法。
第2章 梯度下降法
梯度下降法是迭代法的一种。
简单地来说,多元函数的“导数”(derivative)就是梯度(gradient)。
对于凸优化问题来说,导数为0(梯度为0向量)的点,就是优化问题的解。为了找到这个解,我们沿着梯度的反方向进行线性搜索,每次搜索的步长为某个特定的数值α,直到梯度与0向量非常接近为止。
X i + 1 = X i − α ∇ f X i (2.1) X^{i+1}=X^{i}-α\nabla f_{X^{i}}\tag{2.1} Xi+1=Xi−α∇fXi(2.1)
上面描述的这个方法就是梯度下降法。
全批量梯度下降法 简单来说,全批量梯度下降法就是在算目标函数梯度的时候带入所有样本点。全批量梯度法每计算一次梯度的代价是O(N),运算次数与样本点数量N成线性关系。
随机梯度下降法 随机梯度下降法(Stochastic Gradient Decent, SGD)是对全批量梯度下降法计算效率的改进算法。SGD在计算∇L时,并不使用全部样本,而是随机地挑选了一个样本。全批量梯度下降虽然稳定,但速度较慢;SGD虽然快,但是不够稳定。
小批量随机梯度下降法 小批量随机梯度下降法(Mini-batch Stochastic Gradient Decent)是对速度和稳定性进行妥协后的产物。小批量随机梯度下降的关键思想是,我们不是随机使用一个样本,而是随机使用b个不同的样本。
最速下降法 最速下降法和梯度下降法唯一的区别就是,梯度下降法的步长lambda是固定的、人为设置的,而最速下降法是在确定了梯度后对步长的值进行一维搜索,选取最优步长。也可以说就是在确定迭代方向的前提上,确定在该方向上使得函数值最小的迭代步长。
第3章 牛顿法和拟牛顿法
3.1 牛顿法原理
用牛顿法迭代解非线性方程:把非线性方程 f(x)=0线性化的一种近似方法。x0作为初始近似解,在x0领域内泰勒级数展开,保留其线性部分(前两项)(可以理解为切线):
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) (3.1) f(x)=f(x_0)+f^{'}(x_0)(x-x_0)\tag{3.1} f(x)=f(x0)+f′(x0)(x−x0)(3.1)
求解
f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) = 0 (3.2) f(x_0)+f^{'}(x_0)(x-x_0)=0\tag{3.2} f(x0)+f′(x0)(x−x0)=0(3.2)
得到下一个近似点 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 n + 1 = x n − f ( x n ) f ′ ( x n ) (3.3) x_{n+1}=x_n-\frac{f(x_n)}{f^{'}(x_n)}\tag{3.3} xn+1=xn−f′(xn)f(xn)(3.3)
另一种目标函数如求非线性方程f(x)极值,在近似解x0领域内做二阶泰勒展开
g ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + 1 2 f ′ ′ ( x 0 ) ( x − x 0 ) 2 (3.4) g(x)=f(x_0)+f^{'}(x_0)(x-x_0)+\frac{1}{2}f^{''}(x_0)(x-x_0)^{2}\tag{3.4} g(x)=f(x0)+f′(x0)(x−x0)+21f′′(x0)(x−x0)2(3.4)
求 g ′ ( x ) = 0 g^{'}(x)=0 g′(x)=0,即 f ′ ( x 0 ) + f ′ ′ ( x 0 ) ( x − x 0 ) = 0 f^{'}(x_0)+f^{''}(x_0)(x-x_0)=0 f′(x0)+f′′(x0)(x−x0)=0得到一个新的近似解 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 n + 1 = x n − f ′ ( x n ) f ′ ′ ( x n ) (3.5) x_{n+1}=x_n-\frac{f^{'}(x_n)}{f^{''}(x_n)}\tag{3.5} xn+1=xn−f′′(xn)f′(xn)(3.5)
与求解f(x)=0不同得是,这里用了二次函数近似每个近似解的领域,而不是用线性函数。
当变量由单个变量x变为向量X时,仍可使用同样的求解方法,这时,迭代公式3.5中的一阶导 f ′ f^{'} f′变为了 f f f的梯度向量 ∇ f \nabla f ∇f,二阶导 f ‘ ′ f^{‘'} f‘′变为了 f f f的海森矩阵 ∇ 2 f \nabla ^{2}f ∇2f。迭代公式变为了:
X k + 1 = X k − ∇ f ( X k ) ∇ 2 f ( X k ) (3.5) X_{k+1}=X_k-\frac{\nabla f(X_k)}{\nabla ^{2}f(X_k)}\tag{3.5} Xk+1=Xk−∇2f(Xk)∇f(Xk)(3.5)
将梯度向量和海森矩阵分别记为 g k g_k gk(gradient)和 H k H_k Hk(Hessian)。
X k + 1 = X k − H k − 1 ⋅ g k (3.6) X_{k+1}=X_k-H^{-1}_k·g_k\tag{3.6} Xk+1=Xk−Hk−1⋅gk(3.6)
d k = − H k − 1 ⋅ g k d_k=-H^{-1}_k·g_k dk=−Hk−1⋅gk称为牛顿方向。
阻尼牛顿法 原始牛顿法迭代公式中没有步长因子,是定步长迭代,不能保证目标函数值稳定的下降,所以使用阻尼牛顿法,每次在迭代方向