2

私はOctaveで勾配降下を計算しようとしています。各反復で、私のテータは指数関数的に大きくなります。私は別の関数を直接コピーしているので、何が問題なのか分かりません。ここで勾配降下:収斂していない

は私の行列である:

X = 1 98 
    1 94 
    1 93 
    1 88 
    1 84 
    1 82 
    1 79 

y = 97 
    94 
    94 
    78 
    85 
    85 
    76 

theta = 1 
     1 

私は、この式を使用しています:

theta = theta - 0.001 * (1/7) * (X' * (X * theta - y)) 

私は最適なthetasが通常の方程式を使用しているものを考え出したが、わずか数回の反復の後、私のテータは数千にのぼります。どのようなアイデアが間違っている?

答えて

1

これまでの回答で述べたように、学習率が高すぎる線形回帰の場合、勾配降下を使用しているようですが、このポストは視覚化を追加し、あなたのケースで起こっていることを正確に説明しています。

次の図に示すように、学習率は凸面コスト面で大域的な最小値に収束するほど高く、段差が大きすぎるために、Θ値が振動して最小点を逃します(RHS図)。学習率を下げると(LHSのように)収束率は低くなりますが、最終的には全体的な最小値に達するでしょう。

収束率が遅すぎたり、高すぎたりしないように、アルファ(学習率)を見つける必要があります(これはデータに依存し、機能の拡張に役立ちます)。

enter image description here

1

値が爆発している場合、ステップが大きすぎる必要があります。本質的に、あなたはたびにオーバーシュートしています。ステップが大きすぎると、[100、-100,1000、-1000、...]のような一連の見積もりが表示されます。見積もりは、連続した大きな正と負の数値の間で変動します。最も簡単な修正は

1E-6

または多分小さいようなものに

0.001 *(1月7日)

から一定のあなたのステップサイズを変更することです。

+1

数値の不安定さを避けるために、実際にデータを拡大する方が良い場合もあります。問題は、XとYの両方が100であり、XとYの両方を100で除算しても解を変えないが、同じ効果(効果的に学習率を変える)をもたらすが、数値安定性を失うことはない番号は基本的な不安定な操作の1つです) – lejlot

関連する問題