Bộ tối ưu, huấn luyện và đánh giá

Deep Learning nâng cao với PyTorch

Michal Oleszak

Machine Learning Engineer

Vòng lặp huấn luyện

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()
  • Định nghĩa hàm mất mát và bộ tối ưu
    • BCELoss cho phân loại nhị phân
    • Bộ tối ưu SGD
  • Lặp qua epoch và batch huấn luyện
  • Xóa gradient
  • Forward: lấy đầu ra mô hình
  • Tính loss
  • Tính gradient
  • Bước tối ưu: cập nhật tham số
Deep Learning nâng cao với PyTorch

Bộ tối ưu hoạt động thế nào

 

Hai vector độ dài 2: một chứa giá trị tham số (1 và 0.5), một chứa gradient (0.9 và -0.2).

Deep Learning nâng cao với PyTorch

Bộ tối ưu hoạt động thế nào

 

Mũi tên cho thấy hai vector tham số và gradient được đưa vào bộ tối ưu, vẽ như bia mục tiêu.

Deep Learning nâng cao với PyTorch

Bộ tối ưu hoạt động thế nào

 

Mũi tên từ bộ tối ưu trỏ tới vector gồm hai cập nhật tham số: -0.5 và 0.5.

Deep Learning nâng cao với PyTorch

Bộ tối ưu hoạt động thế nào

 

Mũi tên từ cập nhật tham số trỏ tới giá trị tham số mới: 0.5 và 1.0

Deep Learning nâng cao với PyTorch

Bộ tối ưu hoạt động thế nào

 

Mũi tên từ cập nhật tham số trỏ tới giá trị tham số mới: 0.5 và 1.0

Deep Learning nâng cao với PyTorch

Stochastic Gradient Descent (SGD)

optimizer = optim.SGD(net.parameters(), lr=0.01)
  • Cập nhật phụ thuộc vào learning rate
  • Đơn giản, hiệu quả cho mô hình cơ bản
  • Hiếm dùng trong thực tế
Deep Learning nâng cao với PyTorch

Adaptive Gradient (Adagrad)

optimizer = optim.Adagrad(net.parameters(), lr=0.01)
  • Điều chỉnh learning rate theo từng tham số
  • Tốt cho dữ liệu thưa
  • Có thể giảm learning rate quá nhanh
Deep Learning nâng cao với PyTorch

Root Mean Square Propagation (RMSprop)

optimizer = optim.RMSprop(net.parameters(), lr=0.01)
  • Cập nhật mỗi tham số dựa trên độ lớn gradient trước đó
Deep Learning nâng cao với PyTorch

Adaptive Moment Estimation (Adam)

optimizer = optim.Adam(net.parameters(), lr=0.01)
  • Linh hoạt và phổ biến nhất
  • RMSprop + động lượng gradient
  • Thường là lựa chọn mặc định
Deep Learning nâng cao với PyTorch

Đánh giá mô hình

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
  • Thiết lập chỉ số accuracy
  • Đưa mô hình sang chế độ eval và lặp qua batch test không tính gradient
  • Cho dữ liệu qua mô hình để lấy xác suất dự đoán
  • Tính nhãn dự đoán
  • Cập nhật chỉ số accuracy
Deep Learning nâng cao với PyTorch

Ayo berlatih!

Deep Learning nâng cao với PyTorch

Preparing Video For Download...