Gradient biến mất và bùng nổ
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
Thử điều này:
- Để
sigmoidrồi kéo độ sâu lên30: 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
ReLUvới weight scale1.0: mọi cột phẳng ngang đường vàng, gradient giữ nguyên1từ lớp ra về lớp đầu. - Vẫn để
ReLUrồi đẩy weight scale lên2.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
tanhvớisigmoidở cùng độ sâu:tanhcó đạo hàm tối đa1nên tụt chậm hơn hẳnsigmoidvố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.
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.
- 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?
- 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Điều gì làm gradient bùng nổ khi truyền ngược qua mạng sâu?