Chuyển tới nội dung chính

Gradient biến mất và bùng nổ

Đổi tham sốTính lại thậtThang log

Gradient biến mất và bùng nổ

Mạng càng sâu, gradient càng phải đi qua nhiều lớp trước khi tới lớp đầu. Xem nó tóp về 0 hay vọt lên.

Để học, mạng nơ ron phải biết mỗi trọng số nên chỉnh theo hướng nào, và câu trả lời đó là gradient. Lan truyền ngược tính gradient bắt đầu từ lớp ra rồi đẩy dần về lớp đầu. Vấn đề là ở mỗi lớp gradient bị nhân với một hệ số, nên khi mạng sâu, con số đó bị nhân đi nhân lại rất nhiều lần trước khi chạm tới những lớp gần đầu vào.

Hệ số nhân mỗi lớp bằng đạo hàm của hàm kích hoạt nhân với độ lớn trọng số. Nếu hệ số nhỏ hơn 1, nhân dồn qua vài chục lớp sẽ ép gradient về gần 0: các lớp đầu gần như không nhận được tín hiệu nào để học, đó là gradient biến mất. Nếu hệ số lớn hơn 1, nhân dồn lại thổi gradient lên rất lớn, các bước cập nhật nhảy loạn, đó là gradient bùng nổ. Chỉ khi hệ số quanh 1 thì gradient mới giữ nguyên độ lớn xuyên suốt.

Thử ngay

Gradient biến mất và bùng nổ · sâu bao nhiêu thì tắt
gradient lớp 1 = 3.73e-9nhỏ nhất 3.73e-9lớn nhất 1.000gradient biến mất
1e61e311e-31e-61e-91e-121e-151e-18lớp 1: gradient ≈ 3.73e-9lớp 2: gradient ≈ 1.49e-8lớp 3: gradient ≈ 5.96e-8lớp 4: gradient ≈ 2.38e-7lớp 5: gradient ≈ 9.54e-7lớp 6: gradient ≈ 3.81e-6lớp 7: gradient ≈ 1.53e-5lớp 8: gradient ≈ 6.10e-5lớp 9: gradient ≈ 2.44e-4lớp 10: gradient ≈ 9.77e-4lớp 11: gradient ≈ 3.91e-3lớp 12: gradient ≈ 0.016lớp 13: gradient ≈ 0.063lớp 14: gradient ≈ 0.250lớp 15: gradient ≈ 1.000gradient = 1lớp 1 · đầu (xa lớp ra)lớp 15 · ra

Thử điều này:

  • Để sigmoid rồi kéo độ sâu lên 30: các cột bên trái (lớp đầu) tụt xuống gần đáy thang log, gradient tới đó chỉ còn cỡ một phần tỉ tỉ.
  • Đổi sang ReLU với weight scale 1.0: mọi cột phẳng ngang đường vàng, gradient giữ nguyên 1 từ lớp ra về lớp đầu.
  • Vẫn để ReLU rồi đẩy weight scale lên 2.0: các cột dựng đứng vượt lên trên đường vàng, gradient bùng nổ theo cấp số nhân.
  • So tanh với sigmoid ở cùng độ sâu: tanh có đạo hàm tối đa 1 nên tụt chậm hơn hẳn sigmoid vốn bị chặn ở 0.25.

Vì sao ReLU giúp

Với một nơ ron đang hoạt động, đạo hàm của ReLU đúng bằng 1, nên nó chuyển gradient qua nguyên vẹn thay vì cắt bớt như sigmoid (tối đa chỉ 0.25 mỗi lớp). Nhờ vậy gradient không bị tóp dần khi mạng sâu, và các lớp gần đầu vào vẫn nhận được tín hiệu để học. Đây là một lý do lớn khiến ReLU thay thế sigmoid ở các lớp ẩn của mạng sâu.

Điều rút ra

Gradient bị nhân dồn qua từng lớp, nên hệ số nhỏ hơn 1 sẽ làm nó biến mất và lớn hơn 1 sẽ làm nó bùng nổ khi mạng đủ sâu.

Câu hỏi tự kiểm0/3 đúngchưa trả lời
  1. 1Chọn sigmoid và kéo độ sâu lên 30, các cột ở những lớp gần đầu vào trông ra sao?
  2. 2Với ReLU và weight scale bằng 1.0, gradient thay đổi thế nào khi đi từ lớp ra về lớp đầu?
  3. 3Điều gì làm gradient bùng nổ khi truyền ngược qua mạng sâu?