Adam(アダム)は、主にディープラーニングで広く使われている最適化アルゴリズムの一種。最適化アルゴリズムは、モデルの学習において、損失関数の値を最小化するためのパラメータの更新方法を決定する役割
import torch import torch.nn as nn import torch.optim as optim X = torch.randn(100, 1) * 10 y = 2 * X + 1 + torch.randn(100, 1) class LinearRegression(nn.Module): def __init__(self): super().__init__() self.linear = nn.Linear(1, 1) def forward(self, x): return self.linear(x) model = LinearRegression() # 損失関数とオプティマイザの定義 # 損失関数は平均二乗誤差 criterion = nn.MSELoss() # オプティマイザはAdam optimizer = optim.Adam(model.parameters(), lr=0.01) # モデルの学習ループ num_epochs = 1000 for epoch in range(num_epochs): # 順伝播 y_pred = model(X) # 損失の計算 loss = criterion(y_pred, y) # 逆伝播と最適化 optimizer.zero_grad() loss.backward() optimizer.step() if (epoch+1) % 100 == 0: print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}') # 学習後のパラメータ表示 weight, bias = model.linear.weight.item(), model.linear.bias.item() print(f'Learned parameters: weight = {weight:.4f}, bias = {bias:.4f}')
勾配が急な方向には学習率を大きく、勾配が緩やかな方向には学習率を小さくすることで、効率的かつ安定して学習を進めることができる