勾配降下は、損失が最も低いモデルを生成する重みとバイアスを反復的に見つけ出す数学的な手法です。勾配降下法では、ユーザー定義の反復処理に対して以下のプロセスを繰り返すことで、最適な重みとバイアスを見つけます。
モデルは、ランダムな重みとバイアスがゼロに近い状態でトレーニングを開始し、次の手順を繰り返します。
現在の重みとバイアスを使用して損失を計算します。
損失を減らす重みとバイアスを移動する方向を決定します。
損失を減らす方向に重みとバイアスの値を少しずつ移動します。
ステップ 1 に戻り、モデルが損失をこれ以上削減できなくなるまでこのプロセスを繰り返します。
下の図は、損失が最も低いモデルを生成する重みとバイアスを見つけるために勾配降下が実行する反復ステップの概要を示しています。
図 12. 勾配降下は、損失が最小のモデルを生成する重みとバイアスを見つける反復プロセスです。
プラスアイコンをクリックすると、勾配降下法の背後にある数学について詳しく学べます。
具体的には、自動車の重量(ポンド)とガソリン 1 ガロンあたりの走行距離の評価に関する 7 つの例を含む小規模なデータセットを使用して、勾配降下の手順を確認できます。
ポンド(1,000 単位)(機能) | マイル/ガロン(ラベル) |
---|---|
3.5 | 18 |
3.69 | 15 |
3.44 | 18 |
3.43 | 16 |
4.34 | 15 |
442 | 14 |
2.37 | 24 |
- モデルは、重みとバイアスをゼロに設定してトレーニングを開始します。
- 現在のモデル パラメータで MSE 損失を計算します。
- 各重みとバイアスにおける損失関数の接線の傾斜を計算します。
- 負の勾配の方向に少し移動して、次の重みとバイアスを取得します。ここでは、任意で「少額」を 0.01 と定義します。
プラスアイコンをクリックすると、勾配の計算方法について学習できます。
重みとバイアスに接する線の傾斜を取得するには、重みとバイアスに対する損失関数の導関数を取得し、方程式を解きます。
予測の式を次のように記述します。
$ f_{w,b}(x) = (w*x)+b $。
実際の値は $ y $ と表します。
MSE は、次の式で計算します。
$ \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)})^2 $
ここで、$i$ は $i$ 番目のトレーニング サンプルを表し、$M$ はサンプル数を表します。
重みに対する損失関数の導関数は、次のように表されます。
$ \frac{\partial }{\partial w} \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)})^2 $
評価結果は次のようになります。
$ \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)}) * 2x_{(i)} $
まず、各予測値から実際の値を引いた値に、特徴値の 2 倍を掛けます。次に、その合計をサンプル数で割ります。 その結果、重みの値に接する線の傾きが導き出されます。
重みとバイアスを 0 としてこの方程式を解くと、線の傾斜は -119.7 になります。
バイアス微分
バイアスに対する損失関数の導関数は、次のように表されます。
$ \frac{\partial }{\partial b} \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)})^2 $
評価結果は次のようになります。
$ \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)}) * 2 $
まず、それぞれの予測値から実際の値を引いた値に 2 を掛けます。次に、その合計をサンプル数で割ります。結果は、バイアスの値に接する線の傾斜です。
重みとバイアスを 0 に設定してこの方程式を解くと、線の傾斜は -34.3 になります。
新しい重みとバイアスを使用して損失を計算し、繰り返します。6 回の反復処理を完了すると、次の重み、バイアス、損失が得られます。
繰り返し | 重量 | バイアス | 損失(MSE) |
---|---|---|---|
1 | 0 | 0 | 303.71 |
2 | 1.2 | 0.34 | 170.67 |
3 | 2.75 | 0.59 | 67.3 |
4 | 3.17 | 0.72 | 50.63 |
5 | 3.47 | 0.82 | 42.1 |
6 | 3.68 | 0.9 | 37.74 |
重みとバイアスが更新されるたびに損失が低下していることがわかります。 この例では、6 回の反復処理の後に停止しています。実際には、モデルは収束するまでトレーニングします。モデルが収束しても、反復処理を追加しても損失はそれ以上減少しません。これは、勾配降下法によって、損失をほぼ最小化する重みとバイアスが見つかったためです。
モデルが収束後もトレーニングを継続すると、モデルがパラメータを最小値の周りで継続的に更新するため、損失が少しずつ変動します。これにより、モデルが実際に収束したことを確認するのが難しくなる可能性があります。モデルが収束したことを確認するには、損失が安定するまでトレーニングを続けます。
モデルの収束と損失曲線
モデルをトレーニングする際は、多くの場合、損失曲線を確認して、モデルが収束したかどうかを判断します。損失曲線は、モデルのトレーニング中に損失がどのように変化するかを示します。一般的な損失曲線は次のとおりです。損失は y 軸、イテレーションは x 軸に表示されます。
図 13. 1,000 回目の反復処理のあたりでモデルが収束していることを示す損失曲線。
最初の数回の反復処理で損失が大幅に減少し、その後徐々に減少して 1,000 回目の反復処理あたりで横ばいになることがわかります。1,000 回のイテレーション後、モデルが収束したことをほぼ確信できます。
次の図は、トレーニング プロセスの開始、中間、終了の 3 つの時点でモデルを描画しています。トレーニング プロセス中のスナップショットでモデルの状態を可視化すると、重みとバイアスの更新、損失の削減、モデルの収束との関連性が明確になります。
図では、特定のイテレーションで導出された重みとバイアスを使用してモデルを表しています。データポイントとモデル スナップショットのグラフでは、モデルからデータポイントへの青い損失線が損失の量を示します。線が長くなるほど、損失が大きくなります。
次の図は、2 回目の反復処理のあたりで、損失が大きくなるため、モデルの予測精度が低下することを示しています。
図 14. トレーニング プロセスの開始時の損失曲線とモデルのスナップショット。
400 回目の反復処理あたりで、勾配降下法がより優れたモデルを生成する重みとバイアスを見つけていることがわかります。
図 15. トレーニングの途中の時点のモデルのスナップショットと損失曲線。
1,000 回目の反復処理あたりで、モデルが収束し、可能な限り低い損失のモデルが生成されていることがわかります。
図 16. トレーニング プロセスの終了近くのモデルの損失曲線とスナップショット。
演習: 理解度を確認する
収束と凸関数
線形モデルの損失関数は常に凸なサーフェスを生成します。この特性により、線形回帰モデルが収束すると、損失が最も低くなる重みとバイアスがモデルによって検出されたことを意味します。
1 つの特徴を持つモデルの損失表面をグラフ化すると、凸形状になります。次の図は、前述の例で使用した 1 ガロンあたりのマイルの値のデータセットの損失サーフェスです。重みは x 軸、バイアスは y 軸、損失は z 軸に表示されます。
図 17. 凸形状を示す損失表面。
この例では、重みが -5.44、バイアスが 35.94 の場合、損失が 5.54 で最も低くなります。
図 18. 損失が最も低くなる重みとバイアス値を示す損失サーフェス。
線形モデルは、最小損失が見つかった時点で収束します。したがって、反復処理を追加しても、勾配降下法によって重みとバイアスの値が最小値の周りでごくわずかに移動するだけです。勾配降下中の重みとバイアスの点をグラフにすると、丘を転がるボールのようになり、下り坂がなくなるポイントで停止します。
図 19。グラフの最低点で停止する勾配降下ポイントを示す損失グラフ。
黒い損失ポイントは損失曲線の正確な形状を作成します。つまり、急激に減少した後、損失表面の最も低いポイントに達するまで徐々に下がります。
モデルが各重みとバイアスの正確な最小値を見つけることはほとんどなく、非常に近い値を見つけることに注意してください。また、重みとバイアスの最小値はゼロ損失に対応するわけではなく、そのパラメータの損失が最も低い値になるだけです。
損失が最も小さい重みとバイアスの値(この場合は重みが -5.44、バイアスが 35.94)を使用してモデルをグラフに描画し、データへの適合度を確認できます。
図 20. 損失が最も低くなる重みとバイアスの値を使用してグラフ化されたモデル。
他の重みとバイアス値では損失が小さいモデルが生成されないため、このデータセットに最適なモデルです。