So sánh L2 Regularization (Adam L2) vs Decoupled Weight Decay (AdamW)
Trong bài báo mang tính bước ngoặt *Fixing Weight Decay Regularization in Adam* (ICLR 2019), Ilya Loshchilov và Frank Hutter đã chỉ ra nguyên nhân khiến Adam thường tổng quát hóa k…
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: adam-bias-correction-mechanics, adamw-weight-decay.
Nội dung đề bài
Mô tả bài toán
Trong bài báo mang tính bước ngoặt *Fixing Weight Decay Regularization in Adam* (ICLR 2019), Ilya Loshchilov và Frank Hutter đã chỉ ra nguyên nhân khiến Adam thường tổng quát hóa kém hơn SGD Momentum: các framework thời đó đã nhầm lẫn giữa L2 Regularization và Weight Decay.
- L2 Regularization trong Adam cổ điển (Adam with L2):
- Thêm λ θ trực tiếp vào gradient:
gt ← gt + λ θt-1
- Sau đó tính mt và vt từ gt này.
- Hậu quả: Nếu tham số có gradient lịch sử rất lớn (vt lớn), hệ số phạt λ θ sẽ bị chia cho √(vt), khiến tham số quan trọng lại bị suy giảm ít hơn tham số ít quan trọng!
- Decoupled Weight Decay (AdamW):
- Giữ nguyên gradient gt sạch để tính mt, vt, mt, vt.
- Tách rời hoàn toàn trọng số suy giảm khỏi gradient thích nghi:
θt = θt-1 - η λ θt-1 - η√(vt) + ε mt
Hãy viết hàm compare_adam_l2_vs_adamw(params_init: dict[str, np.ndarray], grads_seq: list[dict[str, np.ndarray]], lr: float = 1e-3, weight_decay: float = 0.01, beta1: float = 0.9, beta2: float = 0.999, eps: float = 1e-8) -> tuple[dict[str, np.ndarray], dict[str, np.ndarray]]:
- Chạy lần lượt chuỗi gradient
grads_seqtrên hai bộ tham số độc lập sao chép từparams_init. - Trả về tuple
(params_adam_l2, params_adamw).
Input
- Hàm
compare_adam_l2_vs_adamw(params_init,grads_seq,lr,weight_decay,beta1,beta2,eps): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.
Output
- Hàm
compare_adam_l2_vs_adamw: Trả về kết quả kiểutuple[dict[str, np.ndarray], dict[str, np.ndarray]]theo đúng đặc tả kỹ thuật và kích thước quy định.
Ràng buộc
- Thời gian chạy tối đa: 6000ms.
- Giới hạn bộ nhớ: 512MB.
- 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
params = {'w': np.array([2.0, 5.0])}
grads = [{'w': np.array([0.5, 10.0])}, {'w': np.array([0.2, 8.0])}, {'w': np.array([0.1, 12.0])}]
p_l2, p_w = compare_adam_l2_vs_adamw(params, grads, lr=0.01, weight_decay=0.1)Output
({
'w': [1.9714, 4.9702]
}, {
'w': [1.9671, 4.9552]
})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
params = {'w': np.array([1.5, -3.0])}
grads = [{'w': np.array([0.1, -0.4])}, {'w': np.array([-0.2, 0.8])}]
p_l2, p_w = compare_adam_l2_vs_adamw(params, grads, lr=0.01, weight_decay=0.0)Output
({
'w': [ 1.4937, -2.9937]
}, {
'w': [ 1.4937, -2.9937]
})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.
