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

Kết nối tắt ResNet

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

Kết nối tắt ResNet

Một công tắc: có đường tắt hay không. Xem gradient qua mạng rất sâu tóp về 0 hay giữ được quanh 1.

Càng xếp thêm lớp, mạng nơ ron lẽ ra càng mạnh, nhưng thực tế thì ngược lại: mạng rất sâu lại khó học hơn mạng nông. Lý do nằm ở lan truyền ngược. Gradient bắt đầu từ lớp ra rồi đi ngược về lớp đầu, và ở mỗi lớp nó bị nhân với một hệ số. Khi hệ số nhỏ hơn 1, nhân dồn qua vài chục lớp sẽ ép gradient về gần 0 trước khi kịp tới các lớp gần đầu vào, nên những lớp đó gần như không nhận được tín hiệu nào để chỉnh. Đó là gradient biến mất, và nó là bức tường chặn mọi cố gắng làm mạng sâu hơn.

Kết nối tắt của ResNet gỡ đúng chỗ nghẽn đó. Thay vì bắt mỗi khối tính y = F(x), ta cho nó tính y = x + F(x): đầu vào x được cộng thẳng vào đầu ra qua một đường tắt identity. Khi gradient truyền ngược, nó tách làm hai nhánh, một nhánh chui qua lớp F và bị nhân hệ số như cũ, một nhánh đi thẳng theo đường tắt và được chuyển qua nguyên vẹn. Vì luôn tồn tại một lối identity thẳng từ lớp ra về bất kỳ lớp nào, gradient luôn có một thành phần bằng 1 không phụ thuộc độ sâu, nên nó không còn tóp về 0 nữa.

Thử ngay

Kết nối tắt · vì sao ResNet huấn luyện được mạng rất sâu
lớp 1 không tắt = 1.14e-3gradient biến mất
F1F2F3F4F5đầu vàolớp ramỗi khối tính y = F(x), không có đường tắt nên gradient phải chui qua mọi lớp1e61e311e-31e-61e-91e-121e-151e-18lớp 1 không tắt: gradient ≈ 1.14e-3lớp 2 không tắt: gradient ≈ 1.63e-3lớp 3 không tắt: gradient ≈ 2.33e-3lớp 4 không tắt: gradient ≈ 3.32e-3lớp 5 không tắt: gradient ≈ 4.75e-3lớp 6 không tắt: gradient ≈ 6.78e-3lớp 7 không tắt: gradient ≈ 9.69e-3lớp 8 không tắt: gradient ≈ 0.014lớp 9 không tắt: gradient ≈ 0.020lớp 10 không tắt: gradient ≈ 0.028lớp 11 không tắt: gradient ≈ 0.040lớp 12 không tắt: gradient ≈ 0.058lớp 13 không tắt: gradient ≈ 0.082lớp 14 không tắt: gradient ≈ 0.118lớp 15 không tắt: gradient ≈ 0.168lớp 16 không tắt: gradient ≈ 0.240lớp 17 không tắt: gradient ≈ 0.343lớp 18 không tắt: gradient ≈ 0.490lớp 19 không tắt: gradient ≈ 0.700lớp 20 không tắt: gradient ≈ 1.000gradient = 1lớp 1 · đầu (xa lớp ra)lớp 20 · ra

Thử điều này:

  • Để công tắc TẮT rồi kéo độ sâu lên 40: các cột xám bên trái (lớp gần đầu vào) tụt xuống gần đáy thang log, gradient tới đó gần như bằng 0.
  • Bật công tắc sang BẬT: các cột đậm hiện ra nằm ngay quanh đường vàng gradient = 1, dù mạng vẫn sâu như vậy. So sánh cột xám tụt dốc với cột đậm phẳng ngang là thấy đường tắt đã cứu gradient.
  • Kéo hệ số mỗi lớp xuống 0.30 khi công tắc TẮT: cột xám sụp còn nhanh hơn. Bật đường tắt lên: cột đậm vẫn giữ quanh 1.
  • Đọc ô số bên phải toolbar: lớp 1 không tắt là con số bé xíu, còn lớp 1 có tắt luôn quanh 1, kèm nhãn trạng thái đổi từ gradient biến mất sang gradient ổn định.

Đường tắt cho gradient

Đường tắt identity cho gradient một lối đi thẳng không bị nhân nhỏ đi ở từng lớp. Nhờ lối đi luôn giữ độ lớn quanh 1 này, tín hiệu học vẫn tới được các lớp gần đầu vào dù mạng chồng hàng trăm lớp, và đó là lý do ResNet huấn luyện được những mạng rất sâu mà trước đó không ai làm nổi.

Điều rút ra

Đường tắt cộng thẳng đầu vào vào đầu ra tạo một lối identity giữ gradient quanh 1, nên mạng rất sâu vẫn học được thay vì nghẽn vì gradient biến mất.

Câu hỏi tự kiểm0/3 đúngchưa trả lời
  1. 1Để công tắc TẮT và độ sâu 40, các cột xám ở những lớp gần đầu vào trông ra sao?
  2. 2Một khối residual tính gì thay cho y = F(x) thường?
  3. 3Vì sao có đường tắt thì gradient ở lớp đầu không tóp về 0 dù mạng rất sâu?