最优化步长因子t可以取负吗

宝宝妈妈2023-07-25  53

t可以取负。

首先我们先来看一下下面这段代码:

number = [1,2,3,4,5,6,7,8,9,10]

number[7:9]

第一行代码的作用是创建一个number数组,然后将数字一到十写进去。第二行代码就是今天的重点,在前面公主和程序员的故事中,我们了解到编程语言是从0开始算起的,也就是说0是第一个数,那么,同理可得,7就是第八个数字,9就是第十个数字。我们来看第二行代码,7:9表示的就是第八个数字到第十个数字,你只要输入这条命令,按回车,就会出现数组中第八个到第十个数字,也就是8,9,10。那要是我们想反方向寻找数组中的元素,我们应该怎么做?把7和9反过来写?当然不是。反过来写就是用负数来表达,比如上面数组中的10就是 -1, 9 就是 -2。然后就是,我们还有没有其他的表示方法来寻找这些数组里面的元素,有的!请看下面代码:

number = [1,2,3,4,5,6,7,8,9,10]

number[:9]

这个样子就表示说从数组的第一个到第十个,而且你也可以把那个9一起省略掉,这样就变成了寻找整个数组的所有元素,当然,你也可以只写前面的数,不写后面的,比如7,这样就表示从第八个数到最后一个。是不是很简单?

接下来我们来说一下什么是步长?

步长就是说你在取了一个数之后,相隔多少个数之后再取一个。相隔的这个范围就叫步长。那么步长怎么使用,请看代码:

number = [1,2,3,4,5,6,7,8,9,10]

number[0:9:2]

和之前的代码差不多,第一行代码表示的是创建一个数组并赋值,第二行代码中,0:9表示的是取值范围,就是说在数组的第一个元素到第十个元素中取值。而后面的2则表示每隔两个数取一个,这段代码的运行结果是这样的:1  3  5  7  9

步长不能为0,但是可以为负数,为负数的时候就是反方向取值,看下面代码及运行结果:

number = [1,2,3,4,5,6,7,8,9,10]

number[8:3:-1]

#下面试运行结果:

[9,8,7,6,5]

设地球物理数据和模型参数之间满足以下非线性关系:

d=f(m) (8.1)

其中:f表示非线性算子d、m都是列向量。

建立如下目标函数:

φ(m)=[d-f(m)]2=min (8.2)

目标函数在模型mi处的梯度为

地球物理反演教程

梯度法的模型修改量是目标函数的负梯度:

mi+1=mi+Δmi=mi-λgi(8.4)

其中:λ为步长因子,是一个数,用来控制修改量的大小g、m都为列向量。

下面推导λ的计算公式。

将式(8.2)目标函数φ(m)按泰勒公式展开,并略去高次项得

地球物理反演教程

将式(8.4)中的Δmi=-λgi带入式(8.5)得

地球物理反演教程

设经过修改模型后,目标函数φ(mi+1)为零,有

地球物理反演教程

由上式可推出步长因子λ的计算公式:

地球物理反演教程

给定初始模型mi后,首先计算出梯度gi,然后按式(8.8)计算步长因子,最后按式(8.4)修改模型。如果:

φ(mi+1)<φ(mi) (8.9)

则说明修正量合适,采用新模型继续迭代。否则减小λ后再计算,一般λ减小一半。

梯度法的计算过程如下:

(1)给定初始模型m0

(2)进行正演计算

(3)判断是否满足精度要求,是则反演结束,否则进行第(4)步

(4)按照式(8.4)修改模型,转第(2)步。

一般反演精度采用实测数据和理论数据的相对均方差来量度。

因为目标函数的梯度就是φ值下降最快的方向,所以梯度法又称为“最速下降法”。下面用一个简单的例子来说明梯度法的原理。设有如下一维目标函数:

φ(x)=f(x) (8.10)

从图8.1可见,x0为目标函数的极小值点。g1为x1处的梯度,g2为x2处的梯度。如果初始模型为x1,模型修改量应该为正值才能使目标函数向最小值前进。从图上可知g1为负值,负梯度为正,满足修改方向。同理如果初始模型为x2,模型修改量应该为负值。从图上可知g2为正值,负梯度为负值,满足修改量为负值的要求。

图8.1 一维目标函数示意图

从这个例子容易看出即使初始模型远远偏离极小值点,只要按照负梯度方向修改模型参数,总能使目标函数达到极小值点。但是上图的极小值点只有一个,容易达到全局极小,如果目标函数具有多个极小值点,那么初始模型的选择就很关键了,选的不好容易陷入局部极小。此外在极小值点附近梯度法反演收敛的速度将会很慢。因此一般在反演的开始采用梯度法,在反演的后期采用其他收敛速度快的反演方法,如前面所介绍的最小二乘法(或称为高斯-牛顿法)。

图8.2 最小二乘法和梯度法修正方向示意图

最小二乘法和梯度法在极小值点附近的模型修正方向如图8.2所示[10]。这个图形将形象的说明为何梯度法在极小值点附近收敛速度慢。

图8.2是二维的简单情况,目标函数是个椭圆面。在初始模型m0处梯度法的修正方向是最速下降方向,也就是和等值线的切线垂直的方向,可见它的方向偏离椭圆的中心极小值点。而最小二乘法(高斯-牛顿法)是解椭圆函数最优化问题的精确方法[6],它的修正方向将会指向椭圆的中心极小值点。因此在接近极小值点附近最小二乘法的收敛速度要快于梯度法。

为了克服最速下降法收敛慢的缺点,1964年Fletcher和Reeves提出了无约束极小化的共轭梯度法,它是直接从Hestenes和Stiefel(1952)解线性方程组的共轭梯度法发展而来。共轭梯度法使最速下降方向具有共轭性,提高了算法的有效性和可靠性[6]。

梯度法的关键是计算目标函数的梯度,最终还是会归结为计算观测数据对模型参数的偏导数。在一维反演时可以用有限差分法进行偏导数的计算,在高维反演时可以采用其他快速计算偏导数的方法,如第9章将要介绍的利用互换定理计算二维直流电测深偏导数矩阵。


转载请注明原文地址:https://54852.com/read/962574.html