モデルのトレーニング
メニューを表示するにはスワイプしてください
ニューラルネットワークのトレーニングは、反復的なプロセスであり、モデルが重みとバイアスを調整して損失関数を最小化することで徐々に改善される。 このプロセスは勾配に基づく最適化と呼ばれ、体系的なアルゴリズムに従う。
一般的なアルゴリズム
データセットはネットワークに複数回ループで入力され、それぞれの完全な通過をエポックと呼ぶ。各エポックでは、モデルが訓練例の順序に基づくパターンを学習しないように、データがシャッフルされる。シャッフルによってランダム性が導入され、より堅牢なモデルにつながる。
各訓練例ごとに、モデルは順伝播を行い、入力がネットワークを層ごとに通過して出力を生成する。この出力は実際のターゲット値と比較され、損失が計算される。
次に、モデルはバックプロパゲーションを適用し、各層の重みとバイアスを更新して損失を減少させます。
このプロセスは複数エポックにわたって繰り返され、ネットワークは徐々にパラメータを洗練させます。トレーニングが進むにつれて、ネットワークはより正確な予測を行うように学習します。ただし、学習率などのハイパーパラメータの慎重な調整が、安定かつ効率的なトレーニングには不可欠です。
学習率 (α) は重み更新時のステップサイズを決定します。値が大きすぎると、モデルは最適値を飛び越えて収束しない可能性があります。逆に小さすぎると、トレーニングが遅くなり、最適でない解に陥ることがあります。適切な学習率の選択は、トレーニングの速度と安定性のバランスを取る上で重要です。一般的な値は0.001から0.1の範囲で、問題やネットワークの規模によって異なります。
下のグラフは、適切な学習率が損失を最適なペースで着実に減少させる様子を示しています。
最後に、確率的勾配降下法(SGD)は学習効率において重要な役割を果たす。データセット全体を処理した後に重みを更新するのではなく、SGDは各サンプルごとにパラメータを更新する。この方法により学習が高速化され、更新にわずかな変動が生じるため、モデルが局所的最小値から抜け出し、より良い全体解に到達しやすくなる。
fit() メソッド
fit() クラスの Perceptron メソッドは、確率的勾配降下法を用いてモデルを学習する役割を担う。
def fit(self, training_data, labels, epochs, learning_rate):
# Iterating over multiple epochs
for epoch in range(epochs):
# Shuffling the data
indices = np.random.permutation(training_data.shape[0])
training_data = training_data[indices]
labels = labels[indices]
# Iterating through each training example
for i in range(training_data.shape[0]):
inputs = training_data[i, :].reshape(-1, 1)
target = labels[i, :].reshape(-1, 1)
# Forward propagation
output = ...
# Computing the gradient of the loss function w.r.t. output
da = ...
# Backward propagation through all layers
for layer in self.layers[::-1]:
da = ...
for epoch in range(epochs):
指定されたエポック数だけトレーニング処理を繰り返す。各エポックはデータセット全体を1回通過することを表す。
indices = np.random.permutation(training_data.shape[0])
training_data = training_data[indices]
labels = labels[indices]
各エポックの前にトレーニングデータと対応するラベルをシャッフルする。これにより、モデルがデータの順序に基づくパターンを学習するのを防ぐ。
for i in range(training_data.shape[0]):
各トレーニングサンプルを順に処理する。SGD(確率的勾配降下法)が使用されているため、各サンプルごとに重みが更新される。
inputs = training_data[i, :].reshape(-1, 1)
target = labels[i, :].reshape(-1, 1)
i番目のトレーニングサンプルとそのラベルを抽出する。行列演算が正しく動作するようにn x 1行列にリシェイプする。
output = ...
順伝播を実行し、予測出力を計算する。
da = ...
損失関数の出力活性化に対する勾配を計算する。これは逆伝播の開始点となる勾配。
for layer in self.layers[::-1]:
da = ...
すべての層を逆順で逆伝播する。各層は勾配降下法を用いて重みとバイアスを更新する。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください