確率的勾配降下法アルゴリズムは、機械学習で一般的に使用される最適化アルゴリズムの 1 つであり、勾配降下法アルゴリズムの最適化されたバージョンであり、全体的な最適解により速く収束します。この記事では、Python の確率的勾配降下法アルゴリズムを、原理、アプリケーション シナリオ、コード例などを含めて詳しく紹介します。
1. 確率的勾配降下法アルゴリズムの原理
確率的勾配降下法アルゴリズムを紹介する前に、勾配降下法アルゴリズムについて簡単に紹介しましょう。 . .勾配降下法アルゴリズムは、機械学習で一般的に使用される最適化アルゴリズムの 1 つであり、その考え方は、損失関数が最小値に達するまで負の勾配方向に沿って移動することです。損失関数 f(x) があり、x がパラメータであると仮定すると、勾配降下アルゴリズムは次のように表現できます。
x = x - learning_rate * gradient(f(x))
ここで、learning_rate は学習率、gradient(f(x)) は損失です関数 f(x) の勾配。
確率的勾配降下法アルゴリズムは、勾配降下法アルゴリズムに基づいて開発されており、更新ごとに 1 つのサンプルのみを使用します。すべてのサンプルの勾配を使用する代わりにパラメーターを使用するため、高速になります。具体的には、確率的勾配降下法アルゴリズムは次のように表すことができます。
x = x - learning_rate * gradient(f(x, y))
ここで (x, y) はサンプルを表し、learning_rate は学習率、gradient(f(x, y)) は損失関数 f( x, y) (x, y) サンプルの勾配。
確率的勾配降下法アルゴリズムの利点は高速であることですが、欠点は局所最適解に陥りやすいことです。この問題を解決するために、人々はバッチ確率勾配降下法 (ミニバッチ SGD) や運動量勾配降下法 (運動量 SGD) など、いくつかの改良された確率的勾配降下法アルゴリズムを開発しました。
バッチ確率的勾配降下アルゴリズムは、勾配降下アルゴリズムと確率的勾配降下アルゴリズムの間の最適化アルゴリズムです。一定数のサンプルの平均勾配を使用して更新ごとにパラメーターを更新するため、確率的勾配降下アルゴリズムほど少数のサンプルの影響を受けにくくなります。具体的には、バッチ確率的勾配降下アルゴリズムは次のように表すことができます。
x = x - learning_rate * gradient(batch(f(x, y)))
ここで、batch(f(x, y)) は、(x, y) サンプルとその隣接サンプルで構成される小さなバッチ データの計算を表します。 . 損失関数 f(x, y) の勾配。
運動量勾配降下法アルゴリズムは、収束を加速できる確率的勾配降下法アルゴリズムです。前の勾配を累積することで次の更新を決定します。方向と刻み幅。具体的には、運動量勾配降下アルゴリズムは次のように表すことができます:
v = beta*v + (1-beta)*gradient(f(x, y)) x = x - learning_rate * v
ここで、v は運動量、beta は運動量パラメータで、通常は 0.9 または 0.99 の値を取ります。
2. 確率的勾配降下法アルゴリズムのアプリケーション シナリオ
確率的勾配降下法アルゴリズムは、全体的な最適解により速く収束できるため、通常、大規模なデータ セットのトレーニングに使用されます。該当するシナリオには次の側面が含まれますが、これらに限定されません:
3. 確率的勾配降下法アルゴリズムのコード例
次のコードは、確率的勾配降下法アルゴリズムを使用して線形回帰モデルをトレーニングする例です:
import numpy as np class LinearRegression: def __init__(self, learning_rate=0.01, n_iter=100): self.learning_rate = learning_rate self.n_iter = n_iter self.weights = None self.bias = None def fit(self, X, y): n_samples, n_features = X.shape self.weights = np.zeros(n_features) self.bias = 0 for _ in range(self.n_iter): for i in range(n_samples): y_pred = np.dot(X[i], self.weights) + self.bias error = y[i] - y_pred self.weights += self.learning_rate * error * X[i] self.bias += self.learning_rate * error def predict(self, X): return np.dot(X, self.weights) + self.bias
コード内の LinearRegression は、確率的勾配降下法アルゴリズムを使用してパラメーターをトレーニングする単純な線形回帰モデルです。 Fit 関数では、トレーニング中に反復ごとにパラメーターを更新するために 1 つのサンプルの勾配のみが使用されます。
4. 概要
確率的勾配降下法アルゴリズムは、機械学習で一般的に使用される最適化アルゴリズムの 1 つであり、大規模なデータセットをトレーニングする場合に大きな利点があります。確率的勾配降下法アルゴリズムに加えて、バッチ確率的勾配降下法アルゴリズムや運動量勾配降下法アルゴリズムなどの改良版もあります。実際のアプリケーションでは、特定の問題に基づいて適切な最適化アルゴリズムを選択する必要があります。
以上がPythonによる確率的勾配降下法アルゴリズムの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。