古典的勾配降下アルゴリズムについて質問があります。最近、観測データと関数のパラメーターが与えられた場合、関数フィッティングプログラムを実装したいと考えています。関数の導関数が利用できるので、私が使用した方法は勾配降下アルゴリズムです。関数パラメーターが与えられていると仮定すると、関数に基づいてシミュレートされたデータを作成できます。
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');
下の図は、シミュレートされたデータ (ぼかしアスタリスク ポイント) とポテンシャル関数 (赤) を示してい ます。は標準微分デルタであり、関数は次のように記述されます。
ここで、A と B は既知と見なすことができます。次に、勾配降下アルゴリズムを使用する場合は、2 つのことを行う必要があります。1 つは、2 つの未知のパラメーター (p とデルタ) の関数の導関数をそれぞれ定義することであり、もう 1 つは、勾配降下アルゴリズムを呼び出すことです。ただし、私が混乱しているのは、反復手順中に推定パラメーターの 1 つ (デルタ) が常に正しい方向に進まないことです。
ただし、オブジェクト関数 (フィッティング ポイントと推定関数の間の距離の 2 乗の合計) が常に小さくなっていることに気付きました。
私の質問は、最終的には正しい場所に到達できるにもかかわらず、なぜ解決策が常に正しい方向に進むとは限らないのかということです. ありがとう!