Project: backward pass, gradient checking và training loop
Đồ án: mạng 2 lớp phải tự chứng minh gradient của nó đúng
Bài trước ta đã chốt hợp đồng shape: X (N, D), W1 (D, H), b1 (H), W2 (H, C), b2 (C), forward đi qua H = X @ W1 + b1, A = relu(H), S = A @ W2 + b2, rồi logsumexp. Giờ ta giữ nguyên forward đó và làm phần khó hơn: viết backward, rồi chứng minh nó đúng bằng numerical gradient trước khi cho mạng học.
Vì sao phải kiểm tra? Một gradient sai một hằng số nhân (ví dụ quên chia N) vẫn làm loss giảm, chỉ chậm và lệch. Khi đó bạn sẽ đi tìm bug ở learning rate, ở dữ liệu, ở khởi tạo, mất hàng giờ. Gradient check biến câu hỏi "code tôi có đúng không" thành một con số duy nhất.
flowchart TD
X["X (N,D)"] --> L1["Linear 1"]
L1 --> R["ReLU"]
R --> L2["Linear 2"]
L2 --> L["Softmax + CE loss"]
L --> dS["dS = p - onehot, chia N"]
dS --> dW2["dW2 = Aᵀ dS"]
dS --> dA["dA = dS W2ᵀ"]
dA --> dH["dH = dA · 1[H>0]"]
dH --> dW1["dW1 = Xᵀ dH"]
Spec: ba hàm, một hợp đồng shape
Backward nhận cache từ forward và trả về grads có shape khớp tuyệt đối với params. Không có ngoại lệ.
def backward(params, cache):
X, H, A, logp, y = cache
N = X.shape[0]
dS = np.exp(logp) # softmax, shape (N, C)
dS[np.arange(N), y] -= 1.0 # trừ one-hot
dS /= N # vì loss lấy mean
grads = {}
grads["W2"] = A.T @ dS # (H, C)
grads["b2"] = dS.sum(axis=0) # (C,)
dA = dS @ params["W2"].T # (N, H)
dH = dA * (H > 0) # mask ReLU
grads["W1"] = X.T @ dH # (D, H)
grads["b1"] = dH.sum(axis=0) # (H,)
return grads
Gradient check dùng central difference, và phải tính lại forward tại theta + eps và theta - eps, không được dùng cache cũ:
In this lesson
- Lộ trình 50 phút
- Tiêu chí nghiệm thu
- Bẫy thường gặp và cách gỡ
- Chốt lại: bạn vừa có gì trong tay
About this course
Part of Khóa 5: Toán cho Machine Learning — tích chập, softmax và lan truyền ngược cho deep learning — Đi từ công thức tích chập và softmax đến tự tay viết lan truyền ngược cho một mạng nhỏ, đủ để đọc và kiểm chứng code deep learning.
- Level
- Advanced
- Goal
- Deep dive
- Language
- Vietnamese
- Focus
- tích chập và phép toán trên ảnh softmax và cross-entropy lan truyền ngược shape của gradient và numerical stability
- Prior knowledge
- Đã biết vector, ma trận và đạo hàm riêng, Đã biết xác suất cơ bản, Biết Python cơ bản
- Practice
- Capstone project
- Time
- ~5.9h
- Voice
- một nghiên cứu viên deep learning thích bóc một lớp mạng nơ-ron thành từng phép toán nhỏ rồi kiểm tra bằng code chạy được
- Not covered
- kiến trúc transformer chi tiết, lý thuyết information theory đầy đủ, tối ưu phân tán trên nhiều GPU
This lesson is premium content. Sign in and purchase the course to view the full content. Sign in