2013-03-08 83 views
1

我有一个经典的梯度下降算法的问题。最近我想实现一个函数拟合程序,只要提供观察数据以及函数的参数。我使用的方法是梯度下降算法,因为函数的导数是可用的。假设给定参数的功能,我可以创建基于功能的模拟数据:为什么解决方案一直使用梯度下降算法走向正确的方向?

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

我的问题是,为什么解决方案并不总是走向正确的方向,即使最终他们可以达到正确的地方。谢谢!

回答

2

梯度下降最小化器紧跟在当前位置的函数的负梯度。你(可能)给了最小值开始(p,delta)值,其中负梯度有三角洲增加。对于不同的起始值,您可能会看到不同的行为。

一个想法,虽然。由于erfc((x-p)/delta)的比率为p/delta,因此您的参数有些相互依赖。也就是说,对于较小的值x或较大的值p/delta,该比例将占主导地位,并且最小化者可能陷入持续增加分子和分母大小的循环中。

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

相关问题