オプティマイザー、学習、評価

PyTorchによる中級ディープラーニング

Michal Oleszak

Machine Learning Engineer

学習ループ

import torch.nn as nn
import torch.optim as optim

criterion = nn.BCELoss()
optimizer = optim.SGD(net.parameters(), lr=0.01)


for epoch in range(1000): for features, labels in dataloader_train:
optimizer.zero_grad()
outputs = net(features)
loss = criterion( outputs, labels.view(-1, 1) )
loss.backward()
optimizer.step()
  • 損失関数とオプティマイザーを定義
    • 二値分類には BCELoss
    • SGD オプティマイザー
  • エポックと学習バッチを反復処理
  • 勾配をリセット
  • 順伝播:モデルの出力を取得
  • 損失を計算
  • 勾配を計算
  • オプティマイザーのステップ:パラメーターを更新
PyTorchによる中級ディープラーニング

オプティマイザーの仕組み

 

長さ2のベクトルが2つ:パラメーター値(1と0.5)を持つものと、勾配(0.9と-0.2)を持つもの。

PyTorchによる中級ディープラーニング

オプティマイザーの仕組み

 

矢印がパラメーターと勾配の2つのベクトルをオプティマイザー(的の絵で表現)に渡す様子を示している。

PyTorchによる中級ディープラーニング

オプティマイザーの仕組み

 

オプティマイザーからの矢印が、2つのパラメーター更新値(-0.5と0.5)を持つベクトルを指している。

PyTorchによる中級ディープラーニング

オプティマイザーの仕組み

 

パラメーター更新の矢印が更新後のパラメーター値(0.5と1.0)を指している

PyTorchによる中級ディープラーニング

オプティマイザーの仕組み

 

パラメーター更新の矢印が更新後のパラメーター値(0.5と1.0)を指している

PyTorchによる中級ディープラーニング

確率的勾配降下法(SGD)

optimizer = optim.SGD(net.parameters(), lr=0.01)
  • 更新量は学習率に依存
  • シンプルで効率的、基本モデルに適している
  • 実際にはあまり使用されない
PyTorchによる中級ディープラーニング

適応勾配法(Adagrad)

optimizer = optim.Adagrad(net.parameters(), lr=0.01)
  • 各パラメーターの学習率を適応的に調整
  • スパースデータに有効
  • 学習率が急激に低下する場合がある
PyTorchによる中級ディープラーニング

二乗平均平方根伝播(RMSprop)

optimizer = optim.RMSprop(net.parameters(), lr=0.01)
  • 過去の勾配の大きさに基づいて各パラメーターを更新
PyTorchによる中級ディープラーニング

適応的モーメント推定(Adam)

optimizer = optim.Adam(net.parameters(), lr=0.01)
  • 最も汎用的で広く使用されている
  • RMSprop+勾配モメンタム
  • デフォルトのオプティマイザーとして頻繁に使用される
PyTorchによる中級ディープラーニング

モデルの評価

from torchmetrics import Accuracy

acc = Accuracy(task="binary")


net.eval() with torch.no_grad(): for features, labels in dataloader_test:
outputs = net(features)
preds = (outputs >= 0.5).float()
acc(preds, labels.view(-1, 1))
accuracy = acc.compute() print(f"Accuracy: {accuracy}")
Accuracy: 0.6759443283081055
  • 精度メトリクスを設定
  • モデルを評価モードにし、勾配なしでテストデータを反復処理
  • データをモデルに渡して予測確率を取得
  • 予測ラベルを計算
  • 精度メトリクスを更新
PyTorchによる中級ディープラーニング

練習しましょう!

PyTorchによる中級ディープラーニング

Preparing Video For Download...