ResNet (Residual Networks)

Anh-Thi Dinh
draft
⚠️
This is a quick & dirty draft, for me only!

General

  • Motivation: Từ VGG → network rất deep → “vanishing gradient problem” (backprop và gradient ~> 0 → weights ko được updated) ← ResNet helps
  • Network này cũng rất deep (152 layers of simple architecture) ← Ex: Resnet 34 / 101 / 152
  • “Residual” is just a fancy name of “leftover” (ref)
  • Residual block → “skip connection”
    • Ref. With skip connections, we have many ways to go back from output to input.

Refs

  • CS 152 NN—17: CNN Architectures: Resnet - YouTube
    • Thay vì block bình thường x → conv → output, giờ từ x sẽ có 1 đường đến output nữa. Hay nói cách khác, output (y) giờ = x + residual h(x) cũng chính là computation của cái conv block.
      • F-2.
        So, convolution is no longer responsible for computing the final value y (where it used to be khi mà x → conv → output → …), bây giờ: “Hey, convolution, your only job is instead of coming for the final result, tao chỉ muốn mày làm rõ what is the difference from x” ← how should the output be different from the input.
    • ResNet không có skip connection in every convolution, instead, cứ cách 2 conv mới có 1 cái.
    • Giống như mọi conv nets khác, có 1 shrinking của height and width as we go through the network. Chúng ta often reduce w, h dimensions & increase d dimension → question: how to reduce h, w dimensions?
      • It’s easy to increase the d dimension, it’s just number of conv, number of kernels (it controls the depth)
      • Chúng ta phải ensure input X matches the shape of the output conv ← 2 things: make sure depth match & h,w matches.
        • Cho h,w, manipulate padding (half), stripe (one),… ← check từ phút này
        • How about the depth? ← có 2 cách
          • 2 cách để giữ depth 64: (1) dùng padding 0, (2) dùng 1 block 1
    • It’s very easy for this network to turn on or off these modules (những block ở giữa skip connections), xem từ phút này. ← chỉ cần w, b =0 thì x sẽ đi thẳng từ input đến output luôn (Xem lại hình F-2 ở trên) ← Tự hiểu: nếu khi backprop đến 1 đoạn nào đó mà w,b vanish (~0) thì khi ấy nó chỉ việc đi thẳng x → x để tiếp tục (hay nói cách khác nó đã “skip” cái block đó rùi)

Residual block?

The intuition is that it is easier to optimize the residual mapping than to optimize the original
→ Note that in practiceBottleneck Residual Blocks  are used for deeper ResNets, such as ResNet-50 and ResNet-101, as these bottleneck blocks are less computationally intensive.
The advantage of adding this type of skip connection is that if any layer hurt the performance of architecture then it will be skipped by regularization. ← how? ❓ 

Bottleneck block

  • a variant of the residual block that utilises 1x1 convolutions to create a bottleneck.
  • Use: reduces the number of parameters and matrix multiplications ← idea: make residual blocks as thin as possible to increase depth and have less parameters

From Andrew’s course

👇 Có thêm mấy cái tìm hiểu bên ngoài của mình. Tuy nhiên sau khi đọc lại lần 2, cũng ko quá hiểu, chỉ biết motivation của block này, idea chính nhưng tại sao sâu hơn thì ko!