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}')
勾配が急な方向には学習率を大きく、勾配が緩やかな方向には学習率を小さくすることで、効率的かつ安定して学習を進めることができる