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 trên đường vàng gradient = 1 chứ không tụt xuống dưới nó, 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, đo được là 1.43.
  • Đọ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 không bao giờ xuống dưới 1, kèm nhãn trạng thái đổi từ gradient biến mất sang gradient ổn định.

Nhưng đừng đọc cái sàn đó thành một cái trần. Đường tắt chặn được chiều biến mất, không chặn chiều bùng nổ: ở trạng thái mở bài, tức độ sâu 20 và hệ số 0.7, lớp 1 có tắt đã là 3.33 chứ không phải 1; đẩy hệ số lên 1.0 ở độ sâu 40 thì nó thành đúng 40, và ở hệ số 1.5 thì nó lên tới hơn 22 triệu. Trên toàn bộ lưới hai thanh kéo có 925 cấu hình, 236 cấu hình trong đó bị chính sim gắn nhãn gradient bùng nổ dù đã bật đường tắt. Cái đường tắt hứa là gradient không tụt về 0, chỉ có thế.

Đườ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. Lối đi đó luôn góp đúng 1 bất kể mạng sâu bao nhiêu, nên nó đặt một sàn bằng 1 dưới gradient: 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. Cái sàn đó không kèm theo một cái trần, nên bùng nổ vẫn phải chữa bằng thứ khác, chẳng hạn khởi tạo trọng số hoặc chuẩn hoá theo lô.

Đ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 góp đúng 1 ở mọi độ sâu, tức một sàn dưới gradient, nên mạng rất sâu vẫn học được thay vì nghẽn vì gradient biến mất. Nó không đặt trần: với hệ số mỗi lớp từ 1 trở lên thì gradient vẫn bùng nổ dù đã có đường tắ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?