勾配降下は、損失が最も低いモデルを生成する重みとバイアスを反復的に見つけ出す数学的な手法です。勾配降下法は、ユーザー定義の反復処理を複数回繰り返して、最適な重みとバイアスを見つけます。
モデルは、ランダム化された重みとゼロに近いバイアスでトレーニングを開始し、次の手順を繰り返します。
現在の重みとバイアスを使用して損失を計算します。
損失を減らす重みとバイアスの移動方向を決定します。
損失を減らす方向に重みとバイアスの値を少しずつ移動します。
ステップ 1 に戻り、モデルで損失をこれ以上削減できないまでこのプロセスを繰り返します。
下の図は、損失が最も低いモデルを生成する重みとバイアスを見つけるために勾配降下が実行する反復ステップの概要を示しています。
図 12. 勾配降下は、損失が最小のモデルを生成する重みとバイアスを見つける反復プロセスです。
プラスアイコンをクリックすると、勾配降下法の背後にある数学について詳しく学べます。
具体的には、自動車の重量(ポンド)とガソリン 1 ガロンあたりの走行距離の評価に関する 7 つの例を含む小規模なデータセットを使用して、勾配降下法の手順を確認できます。
ポンド(1,000 単位)(機能) | マイル / ガロン(ラベル) |
---|---|
3.5 | 18 |
3.69 | 15 |
3.44 | 18 |
3.43 | 16 |
4.34 | 15 |
4.42 | 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. 損失が最も低くなる重みとバイアスの値を使用してグラフ化されたモデル。
他の重みとバイアス値では損失が小さいモデルが生成されないため、このデータセットに最適なモデルです。