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.
def mlp_forward(x, W1, b1, W2, b2):
h = np.maximum(0, x @ W1 + b1) # lớp ẩn + ReLU
return h @ W2 + b2 # logitsLan 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ᵀ @ doutdb = 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ì?
Luyện tập ngay
Viết code và chấm tự động — có trợ lý AI gợi ý khi bí.