【问题标题】:Why does solution go to the right directions all the time with the gradient descent algorithm?为什么梯度下降算法的解总是朝着正确的方向发展?
【发布时间】:2013-03-08 18:20:36
【问题描述】:

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

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');

下图显示了模拟数据(模糊星号点)以及势函数(红色): 从图中可以看出,本例中估计有两个参数,一个是中心点位置p,一个是标准导数delta,函数写为

其中A和B可以被认为是已知的。那么如果我想使用梯度下降算法,我应该做两件事:一是分别为两个未知参数(p和delta)定义函数的导数,二是调用梯度下降算法。然而,我发现令人困惑的是,在迭代过程中,估计的参数之一(delta)并不总是朝着正确的方向发展:

但是,我确实注意到,目标函数(拟合点与估计函数之间的平方距离之和)总是越来越小:

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

【问题讨论】:

    标签: matlab optimization gradient-descent


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-17
      • 2014-01-11
      • 2020-08-09
      • 2016-06-13
      • 2014-06-26
      • 1970-01-01
      • 2019-06-24
      • 2014-12-27
      相关资源
      最近更新 更多