Mạng nơ-ron và lan truyền ngược

Bài 4/725 phút

Một lớp của mạng nơ-ron: h = f(xW + b), với f là hàm kích hoạt phi tuyến (ReLU, GELU…). Xếp chồng nhiều lớp → MLP. Không có f thì nhiều lớp tuyến tính chồng nhau vẫn chỉ là một phép tuyến tính.

mlp.py
def mlp_forward(x, W1, b1, W2, b2):
    h = np.maximum(0, x @ W1 + b1)    # lớp ẩn + ReLU
    return h @ W2 + b2                  # logits

Lan truyền ngược (backpropagation) tính gradient của loss theo mọi tham số bằng quy tắc dây chuyền, đi từ đầu ra ngược về đầu vào. Với lớp tuyến tính out = xW + b, biết dout = ∂L/∂out:

  • dW = xᵀ @ dout
  • db = dout.sum(axis=0)
  • dx = dout @ Wᵀ (truyền tiếp cho lớp phía trước)

Với ReLU: gradient đi qua khi đầu vào > 0, bị chặn (= 0) khi ≤ 0.

Mẹo kiểm tra shape: gradient của một tham số luôn cùng shape với chính tham số đó (dW cùng shape W).

?x có shape (32, 100), W có shape (100, 10). dW có shape gì?