Cài đặt Thuật toán Tối ưu Hóa AdamW (Decoupled Weight Decay) từ Gốc
1. Tăng bước đếm thời gian: t ← t + 1.
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: optimizer-sgd-momentum-from-scratch.
Nội dung đề bài
Mục tiêu kiến thức
- Hiểu lỗi sai kinh điển trong Adam gốc: Adam gốc cộng L2 weight decay trực tiếp vào gradient trước khi chia cho √(vt). Điều này khiến các trọng số có gradient lớn lại bị phạt ít hơn các trọng số có gradient nhỏ.
- Thuật toán AdamW (Loshchilov & Hutter, 2017) tách rời hoàn toàn (Decoupled):
- Tăng bước đếm thời gian: t ← t + 1.
- Cập nhật moment bậc 1: mt = β1 mt-1 + (1 - β1) gt.
- Cập nhật moment bậc 2: vt = β2 vt-1 + (1 - β2) gt2.
- Hiệu chỉnh độ chệch (Bias Correction):
mt = mt1 - β1t, vt = vt1 - β2t
- Cập nhật trọng số kết hợp Decoupled Weight Decay:
wt ← wt-1 - α ( mt√(vt) + ε + λ wt-1 ) (hoặc tương đương wt ← wt-1(1 - α λ) - α mt√(vt) + ε).
Yêu cầu
Xây dựng lớp AdamWOptimizer:
class AdamWOptimizer:
def __init__(self, params: list[np.ndarray], lr: float = 1e-3, betas: tuple[float, float] = (0.9, 0.999), eps: float = 1e-8, weight_decay: float = 0.01):
pass
def step(self, grads: list[np.ndarray]) -> None:
pass- Cập nhật tham số tại chỗ (
in-place mutation).
Input
- Lớp
AdamWOptimizer(params,lr,betas,eps,weight_decay): Khởi tạo đối tượng với các tham số, trọng số hoặc cấu hình tương ứng.
Output
- Các phương thức của
AdamWOptimizer: Trả về kết quả tính toán hoặc cập nhật trạng thái nội bộ của đối tượng.
Ràng buộc
- Thời gian chạy tối đa: 3000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
w_numpy = np.array([2.0, -1.0])
grad = np.array([0.5, -0.2])
opt_custom = AdamWOptimizer([w_numpy], lr=0.01, betas=(0.9, 0.999), eps=1e-08, weight_decay=0.05)
opt_custom.step([grad])
opt_torch.step()Output
[ 1.989 , -0.9895]Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Ví dụ 2
Input
w = np.array([5.0])
opt = AdamWOptimizer([w], lr=0.1, betas=(0.9, 0.999), eps=1e-12, weight_decay=0.0)
opt.step([np.array([2.5])])Output
[4.8]Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
