Cơ chế hiệu chỉnh độ lệch (Bias Correction) trong Bộ tối ưu hóa Adam
Adam (Adaptive Moment Estimation - Kingma & Ba, 2014) kết hợp hai thành phần: Momentum (ước lượng mô-men bậc một mt) và RMSprop (ước lượng mô-men bậc hai vt):
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: rmsprop-exponential-moving-average, sgd-momentum-optimizer.
Nội dung đề bài
Mô tả bài toán
Adam (Adaptive Moment Estimation - Kingma & Ba, 2014) kết hợp hai thành phần: Momentum (ước lượng mô-men bậc một mt) và RMSprop (ước lượng mô-men bậc hai vt):
mt = β1 mt-1 + (1 - β1) gt vt = β2 vt-1 + (1 - β2) gt2
Khi khởi tạo m0 = 0 và v0 = 0, trong các bước đầu tiên (đặc biệt khi β1 = 0.9, β2 = 0.999 rất gần 1), mt và vt bị kéo lệch nghiêm trọng về phía 0. Để có được ước lượng không chệch (unbiased estimator) của kỳ vọng E[g] và E[g2], Adam bắt buộc phải chia cho hệ số hiệu chỉnh độ lệch:
mt = mt1 - β1t, vt = vt1 - β2t θt = θt-1 - η√(vt) + ε mt
Hãy cài đặt lớp AdamOptimizerWithBiasCorrection:
__init__(self, params: dict[str, np.ndarray], lr: float = 0.001, beta1: float = 0.9, beta2: float = 0.999, eps: float = 1e-8)compute_bias_correction_factors(self) -> tuple[float, float]: trả về cặp(1.0 - beta1**t, 1.0 - beta2**t)ở bướcthiện tại (vớit >= 1).step(self, grads: dict[str, np.ndarray]) -> None: tăngt += 1và cập nhật tham số theo đầy đủ công thức Adam chuẩn trên.get_state(self, key: str) -> dict: trả về dictionary{"m": m_copy, "v": v_copy, "m_hat": m_hat_copy, "v_hat": v_hat_copy, "step": self.t}.
Input
- Lớp
AdamOptimizerWithBiasCorrection(params,lr,beta1,beta2,eps): 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
AdamOptimizerWithBiasCorrection: 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: 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
w = np.array([5.0], dtype=np.float64)
params = {'w': w}
opt = AdamOptimizerWithBiasCorrection(params, lr=1.0, beta1=0.9, beta2=0.999, eps=1e-08)
opt.step({'w': np.array([2.0])})
bc1, bc2 = opt.compute_bias_correction_factors()
state = opt.get_state('w')Output
{
'm': [0.2],
'v': [0.004],
'm_hat': [2.],
'v_hat': [4.],
'step': 1
}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([0.0, 0.0])
params = {'w': w}
opt = AdamOptimizerWithBiasCorrection(params, lr=0.1)
for _ in range(5):
opt.step({'w': np.array([1.0, -1.0])})
bc1, bc2 = opt.compute_bias_correction_factors()Output
(0.40951, 0.00499)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.
