为什么解决方案始终使用梯度下降算法到达正确的方向?

时间:2013-03-08 18:20:36

标签: matlab optimization gradient-descent

我对经典的梯度下降算法有疑问。最近我想实现一个函数拟合程序,只要给出观察数据以及函数的参数。我使用的方法是梯度下降算法,因为函数的导数是可用的。假设给出了函数参数,我可以根据函数创建模拟数据:

clean;
rng('default');
rng(54321);
low_value = 15;
high_value = 200;
dis_value  = (high_value-low_value)/2;
central_value = (low_value+high_value)/2;
x = 1:55;
central_pixel = (1+length(x))/2;
delta = 3;
len = length(x);
y_true = dis_value*erf((x-central_pixel)./delta)+central_value;
y = y_true + randn(1,len);
figure;plot(x,y,'b*');
hold on; plot(x,y_true,'r');

下图显示了模拟数据(模糊星号点)以及潜在功能(红色): enter image description here 从图中可以看出,在这个例子中有两个要估计的参数,一个是中心点位置p,另一个是标准派生增量,函数写成

enter image description here

其中A和B可视为已知。然后,如果我想使用梯度下降算法,我应该做两件事:一个是分别为两个未知参数(p和delta)定义函数的导数,另一个是调用梯度下降算法。然而,我发现令人困惑的是,在迭代过程中,其中一个估计参数(delta)并没有始终向正确的方向发展:

enter image description here

然而,我注意到,对象函数(拟合点与估计函数之间的平方距离之和)总是变小: enter image description here

我的问题是,为什么解决方案并不总是朝着正确的方向发展,即使最终它们可以到达正确的位置。谢谢!

1 个答案:

答案 0 :(得分:2)

梯度下降最小化器仅跟随当前位置处的函数的负梯度。您(可能)给出了最小化器开始(p,delta)值,其中负梯度具有增量增量。对于不同的起始值,您可能会看到不同的行为。

但是有一种想法。由于erfc( (x-p)/delta )的比率为p/delta,因此您的参数有些相互依赖。也就是说,对于x的小值或p/delta的大值,该比率将占主导地位,并且最小化器可能会陷入不断增加分子和分母幅度的循环中。

尝试使用修改过的参数:erfc( x/delta - pdratio ),并适合deltapdratio。然后,您可以退出原始p参数:p = pdratio*delta

相关问题