ai-193Đọc toàn bộ đề miễn phí

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.

AINâng cao30 phút

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ủ đề

vanishing-gradientsigmoidsaturationbackpropagation

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_layers tầ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ồm num_layers số 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ểu Tuple[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ế.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

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.