TROISINH
FoundationsNeural Network Primitives

Skip Connections — Đường cao tốc cho gradient

Tại sao mạng neural sâu 100+ layers có thể train được? Bí mật nằm ở đường tắt cho gradient chạy ngược — residual connection giúp thông tin không bị 'chết' khi đi qua hàng trăm lớp.

Bạn có bao giờ tự hỏi làm sao để huấn luyện một mạng neural sâu đến 152 lớp? Trước năm 2015, điều đó là bất khả thi — mạng càng sâu càng dễ "tắt" trong khi train, không phải vì thiếu dữ liệu, mà vì gradient bốc hơi trước khi kịp về đến lớp đầu tiên. Giải pháp đơn giản đến ngạc nhiên: xây một đường cao tốc song song với đường chính, cho phép gradient chạy thẳng không cần qua khúc cua.

Vấn đề

Năm 2012, AlexNet chỉ có 8 lớp và đã gây chấn động. Logic tự nhiên là: thêm nhiều lớp nữa, mạng sẽ học được biểu diễn phức tạp hơn. Nhưng thực tế phũ phàng: khi tăng từ 20 lớp lên 56 lớp, accuracy không những không tăng mà còn giảm — không phải trên tập test (overfitting), mà ngay trên tập train. Hiện tượng này gọi là degradation problem: mạng sâu hơn nhưng học kém hơn.

Vấn đề nằm ở vanishing gradient. Trong backpropagation, gradient được tính bằng cách nhân liên tiếp các ma trận Jacobian qua từng lớp. Nếu mỗi lớp có đạo hàm trung bình 0.9, sau 50 lớp gradient chỉ còn 0.9^50 ≈ 0.005. Thông tin từ lớp đầu (edges, textures) không bao giờ nhận được tín hiệu cập nhật, khiến toàn bộ mạng "đóng băng". Trước ResNet, giới hạn thực tế chỉ khoảng 20–30 lớp cho mạng convolutional, và transformer sâu hơn cũng gặp vấn đề tương tự với activation functions như sigmoid.

Ý tưởng cốt lõi

Thay vì bắt mạng học mapping trực tiếp H(x) từ input sang output, hãy bắt nó học residual F(x) = H(x) − x, sau đó cộng lại với input gốc: y = F(x) + x.

Đây là toàn bộ ý chính. Không có ma thuật, không có tham số thêm. Chỉ là phép cộng.

Tại sao điều này thay đổi mọi thứ? Hãy tưởng tượng bạn đang leo núi qua một đèo hiểm (các lớp convolution phức tạp). Nếu đèo bị sạt lở (gradient bị chặn), bạn không thể lùi về. Nhưng nếu có một đường hầm xuyên núi (skip connection) nối thẳng từ chân đèo đến đỉnh, bạn luôn có lối thoát. Đó là lý do nó được gọi là "skip" — nó nhảy qua một hoặc nhiều lớp.

Điểm "aha" quan trọng nhất: nếu F(x) quá khó học, mạng có thể đẩy F(x) về 0, và output trở thành y = x — một identity mapping hoàn hảo. Điều này có nghĩa là mạng sâu luôn có khả năng "tự do" trở về trạng thái của mạng cạn hơn bằng cách tắt các residual block. Không còn chuyện "sâu hơn thì tệ hơn" nữa; ít nhất, mạng 152 lớp có thể học để giống hệt mạng 20 lớp nếu không cần thêm độ phức tạp.

Nhiều người nghĩ residual connection là "trick kiến trúc" phức tạp — thực ra nó chỉ là cộng input vào output. Cái hay nằm ở chỗ: phép cộng này tạo ra một đường dẫn song song cho gradient trong backprop, nơi đạo hàm là 1 (không đổi), cho dù F(x) có bị saturate hay không.

Tại sao nó hoạt động

Toán học đằng sau cực kỳ thanh lịch. Giả sử ta có một block tính F(x) rồi cộng x:

y = F(x, [W]) + x

Khi tính gradient cho input x trong backprop, theo chain rule:

∂L/∂x = ∂L/∂y * ∂y/∂x = ∂L/∂y * (∂F/∂x + 1)

Dấu + 1 đó là chìa khóa. Ngay cả khi ∂F/∂x rất nhỏ (vanishing), gradient vẫn được bảo toàn ít nhất là 1 lần đạo hàm loss, nhờ đường tắt ∂y/∂x = 1 từ phép cộng. Điều này ngăn gradient "bốc hơi" trước khi về đến lớp đầu tiên.

Trong kiến trúc Transformer (xem thêm ở sequence-modeling), residual connection kết hợp với LayerNorm tạo thành cơ chế ổn định gradient. Mỗi sub-layer (attention hoặc FFN) đều có công thức: LayerNorm(x + Sublayer(x)). Điều này giúp stack hàng trăm layer mà không bị exploding/vanishing gradients.

Một cách nhìn khác: weight initialization như Xavier/He giúp gradient không nổ tung ở khởi tạo, nhưng residual connection là "bảo hiểm" chống lại việc gradient chết dần trong quá trình học sâu.

Ý nghĩa thực tế

Trước ResNet (2015), mạng sâu nhất hiệu quả là VGG-19 (19 lớp). ResNet-152 (152 lớp) không chỉ train được mà còn vượt xa accuracy, mở đường cho mọi kiến trúc sâu hiện đại — từ DenseNet đến Vision Transformer (ViT) và GPT. Không có skip connections, training-at-scale cho model 100B+ parameters sẽ bất khả thi vì gradient không thể lan truyền qua hàng trăm layer.

So sánh nhanh:

Đặc điểmPlain Network (không residual)Residual Network
Giới hạn depth~20–30 lớp1000+ lớp (đã thử nghiệm)
Gradient flowBị chặn ở lớp sâuVề đến tận layer 1
Khởi tạoCực kỳ nhạy cảmBền vững hơn
OverheadKhông cóChỉ phép cộng (negligible)

Ai đang dùng:

  • ResNet: Khối xây dựng cho computer vision (mọi model từ 2016 trở đi).
  • Transformers: GPT, BERT, LLaMA đều dùng residual ở mọi sub-layer.
  • U-Net: Skip connections nối encoder-decoder để giữ thông tin chi tiết.

Hạn chế:

  • Không phải "thuốc thần": vẫn cần batch normalization hoặc LayerNorm để ổn định.
  • Pre-activation vs Post-activation: Thứ tự residual + norm hay norm + residual ảnh hưởng đến gradient flow (Pre-LN thường tốt hơn cho mạng rất sâu).
  • Không giải quyết vấn đề memory: Dù gradient có về được, KV cache hay activation vẫn tốn VRAM khi scale lên.

Đào sâu hơn

Cùng cụm (nn-primitives):

  • Backpropagation — Hiểu chain rule để thấy tại sao skip connections cứu được gradient.
  • BatchNorm vs LayerNorm — Cặp đôi thường đi cùng residual trong mọi kiến trúc hiện đại.
  • Weight Initialization — Cùng nhau tạo nên "bộ ba" ổn định training (Init + Norm + Residual).

Đọc tiếp:

  • Sequence Modeling — Xem residual connections hoạt động ra sao trong Transformer attention blocks.
  • Training at Scale — Làm thế nào để scale residual networks lên hàng trăm tỷ parameters mà gradient vẫn sống sót.

On this page