Mô phỏng hiện tượng suy biến Gradient trên mạng Sigmoid sâu (Vanishing Gradient)
Trước khi hàm ReLU ra đời, hiện tượng Suy biến Gradient (Vanishing Gradient) là rào cản lớn nhất ngăn cản việc huấn luyện các mạng nơ-ron sâu.
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: activation-derivatives-sigmoid-tanh-relu, mlp-two-layer-forward-backward-numpy.
Nội dung đề bài
Mô tả bài toán
Trước khi hàm ReLU ra đời, hiện tượng Suy biến Gradient (Vanishing Gradient) là rào cản lớn nhất ngăn cản việc huấn luyện các mạng nơ-ron sâu. Nguyên nhân toán học: Đạo hàm của hàm Sigmoid σ'(z) = σ(z)(1 - σ(z)) có giá trị cực đại chỉ bằng 0.25 (tại z = 0). Khi gradient lan truyền ngược qua L tầng Sigmoid, theo quy tắc chuỗi nó phải nhân liên tiếp với các đạo hàm: ∂ L∂ W1 ∝ ∏l=1L σ'(Zl) Wl+1T Vì mỗi thừa số σ'(z) ≤ 0.25, sau 10 tầng tín hiệu bị suy giảm ít nhất 0.2510 ≈ 10-6 lần! Trọng số ở các tầng đầu tiên hầu như không nhận được tín hiệu học tập và dậm chân tại chỗ.
Hãy viết hàm simulate_vanishing_gradient(num_layers: int, dim: int = 10, seed: int = 42) -> tuple[list[float], float]:
- Khởi tạo một mạng gồm
num_layerstầng tuyến tính (Wl ∼ N(0, 1)) liên tiếp xen kẽ hàm kích hoạt Sigmoid. - Lan truyền forward một vector ngẫu nhiên x.
- Giả sử gradient tại tầng cuối cùng là dZL = 1.0.
- Lan truyền ngược qua từng tầng, tính chuẩn Frobenius của gradient trọng số tại mỗi tầng: |dWl|F.
- Trả về tuple
(layer_grad_norms: list[float], ratio: float): layer_grad_norms: danh sách gồmnum_layerssố thực theo thứ tự từ tầng 1 đến tầng cuối cùng [|dW1|F, …, |dWL|F].ratio: tỷ lệ suy biến giữa tầng đầu và tầng cuối |dW1|F|dWL|F.
Input
- Hàm
simulate_vanishing_gradient(num_layers,dim,seed): 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
simulate_vanishing_gradient: Trả về kết quả kiểuTuple[List[float], 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: 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
norms, ratio = simulate_vanishing_gradient(num_layers=8, dim=10, seed=42)Output
([0.005655877420799303, 0.013652207754879565, 0.030227142907572772, 0.06105007956557536, 0.12702726156860927, 0.3822322405686055, 0.5426737613029132, 1.0872569225523212], 0.005202)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
norms, ratio = simulate_vanishing_gradient(num_layers=5, dim=5, seed=123)Output
([0.012407562463996599, 0.032477576804238246, 0.03958273244563345, 0.12961729858336116, 0.4661335431462517], 0.026618)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.
