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

下の図は、シミュレートされたデータ (ぼかしアスタリスク ポイント) とポテンシャル関数 (赤) を示してい ここに画像の説明を入力 ます。は標準微分デルタであり、関数は次のように記述されます。

ここに画像の説明を入力

ここで、A と B は既知と見なすことができます。次に、勾配降下アルゴリズムを使用する場合は、2 つのことを行う必要があります。1 つは、2 つの未知のパラメーター (p とデルタ) の関数の導関数をそれぞれ定義することであり、もう 1 つは、勾配降下アルゴリズムを呼び出すことです。ただし、私が混乱しているのは、反復手順中に推定パラメーターの 1 つ (デルタ) が常に正しい方向に進まないことです。

ここに画像の説明を入力

ただし、オブジェクト関数 (フィッティング ポイントと推定関数の間の距離の 2 乗の合計) が常に小さくなっていることに気付きました。 ここに画像の説明を入力

私の質問は、最終的には正しい場所に到達できるにもかかわらず、なぜ解決策が常に正しい方向に進むとは限らないのかということです. ありがとう!

4

1 に答える 1

2

勾配降下最小化は、現在の位置で関数の負の勾配をたどります。あなたは(おそらく)(p,delta)負の勾配のデルタが増加する最小値の開始値を与えました。開始値が異なると、異なる動作が見られる可能性があります。

ただし、1つの考え。erfc( (x-p)/delta )の比率があるためp/delta、パラメーターはある程度相互依存しています。つまり、 の値が小さい場合x、または の値が大きい場合p/delta、比率が支配的になり、分子と分母の大きさを継続的に増加させるサイクルで最小化がスタックする可能性があります。

変更されたパラメーターを使用してみてください: erfc( x/delta - pdratio )、および と に適合しdeltaますpdratio。その後、元のpパラメータを取り消すことができます: p = pdratio*delta.

于 2013-03-08T21:51:06.907 に答える