Cắt Giảm Gradient Toàn Cục theo Chuẩn L2 (Gradient Norm Clipping)
1. Tính chuẩn L2 tổng thể trên toàn bộ các tensor gradient:
Tiến độ của tôi ở bài này
Điểm và code bạn nộp đượ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: numpy-broadcasting-matrix-norm.
Nội dung đề bài
Mục tiêu kiến thức
- Phòng ngừa hiện tượng Bùng nổ Gradient (Exploding Gradient) trong huấn luyện RNN/Transformer.
- Phân biệt giữa Clip từng phần tử (Value Clipping) và Clip toàn cục theo chuẩn (Global Norm Clipping):
- Value clipping làm méo mó vector hướng của gradient (directional distortion).
- Global Norm clipping bảo toàn 100% phương hướng của vector gradient trong không gian tham số, chỉ co tỷ lệ độ dài (magnitude scaling).
- Thuật toán:
- Tính chuẩn L2 tổng thể trên toàn bộ các tensor gradient:
totalnorm = √(Σi Σj gij2)
- Nếu total_norm > max_norm:
Hệ số co: clipcoef = maxnormtotalnorm + epsilon. Nhân từng gradient với hệ số co: gi arrow gi · clipcoef.
- Ngược lại (nếu total_norm ≤ max_norm): Giữ nguyên gradient.
Yêu cầu
Viết hàm clip_grad_norm(grads: list[np.ndarray], max_norm: float, eps: float = 1e-6) -> tuple[list[np.ndarray], float]:
- Nhận danh sách các mảng NumPy gradient grads.
- Cập nhật tại chỗ hoặc trả về danh sách các gradient đã được chuẩn hóa co tỉ lệ.
- Trả về tuple: (clipped_grads, float(total_norm)).
Input
- Hàm clip_grad_norm(grads, max_norm, 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 clip_grad_norm: Trả về kết quả kiểu tuple[list[np.ndarray], float] 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: 2000ms.
- 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
g1 = np.array([3.0])
g2 = np.array([4.0])
clipped, total_norm = clip_grad_norm([g1, g2], max_norm=2.5)
Output
([array([1.4999997]), array([1.9999996])], 5)
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
g = [np.array([1.0, 1.0])]
clipped, total_norm = clip_grad_norm(g, max_norm=10.0)
Output
([array([1., 1.])], 1.414214)
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.
