# ⚙️ Project: backward pass, gradient checking và training loop

By Better Wise

> This lesson is premium content. Sign in and purchase the course to view the full content.

## Đồ á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.

```mermaid
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ệ.

```python
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


---

## Contents

Part of [🧠 Khóa 5: Toán cho Machine Learning — tích chập, softmax và lan truyền ngược cho deep learning](https://everwise.study/courses/khoa-5-toan-cho-machine-learning-tich-chap-softmax-va-lan-truyen-nguoc-cho.md)

- **🖼️ Tích chập, shape và lan truyền ngược**
  - [🔲 Tích chập 1D và 2D: kernel, stride, padding](https://everwise.study/courses/khoa-5-toan-cho-machine-learning-tich-chap-softmax-va-lan-truyen-nguoc-cho/tich-chap-1d-2d-kernel-stride-padding.md)
  - [📐 Kiểm tra shape và vector hóa tích chập bằng im2col](https://everwise.study/courses/khoa-5-toan-cho-machine-learning-tich-chap-softmax-va-lan-truyen-nguoc-cho/kiem-tra-shape-va-vector-hoa-tich-chap-im2col.md) (sign-in required)
  - [🔁 Lan truyền ngược qua lớp tuyến tính và lớp tích chập](https://everwise.study/courses/khoa-5-toan-cho-machine-learning-tich-chap-softmax-va-lan-truyen-nguoc-cho/lan-truyen-nguoc-qua-lop-tuyen-tinh-va-lop-tich-chap.md)
  - [✅ Checkpoint: tích chập và backprop](https://everwise.study/courses/khoa-5-toan-cho-machine-learning-tich-chap-softmax-va-lan-truyen-nguoc-cho/checkpoint-tich-chap-va-backprop.md)
- **📉 Softmax, cross-entropy và numerical stability**
  - [📊 Softmax và log-sum-exp: ổn định số học](https://everwise.study/courses/khoa-5-toan-cho-machine-learning-tich-chap-softmax-va-lan-truyen-nguoc-cho/softmax-va-log-sum-exp-on-dinh-so-hoc.md)
  - [🎯 Cross-entropy và đạo hàm của loss theo từng tham số](https://everwise.study/courses/khoa-5-toan-cho-machine-learning-tich-chap-softmax-va-lan-truyen-nguoc-cho/cross-entropy-va-dao-ham-loss-theo-tham-so.md)
  - [🧪 Vanishing/exploding gradient, numerical stability và gradient checking](https://everwise.study/courses/khoa-5-toan-cho-machine-learning-tich-chap-softmax-va-lan-truyen-nguoc-cho/vanishing-exploding-gradient-numerical-stability-gradient-checking.md)
  - [✅ Checkpoint: loss, gradient và numerical stability](https://everwise.study/courses/khoa-5-toan-cho-machine-learning-tich-chap-softmax-va-lan-truyen-nguoc-cho/checkpoint-loss-gradient-va-numerical-stability.md)
- **🚀 Capstone: forward/backward cho mạng 2 lớp**
  - [🏗️ Project: forward pass và kiểm tra shape cho mạng 2 lớp](https://everwise.study/courses/khoa-5-toan-cho-machine-learning-tich-chap-softmax-va-lan-truyen-nguoc-cho/project-forward-pass-va-kiem-tra-shape-mang-2-lop.md)
  - [⚙️ Project: backward pass, gradient checking và training loop](https://everwise.study/courses/khoa-5-toan-cho-machine-learning-tich-chap-softmax-va-lan-truyen-nguoc-cho/project-backward-pass-gradient-checking-va-training-loop.md) (premium content) — this lesson
  - [✅ Checkpoint: capstone forward/backward](https://everwise.study/courses/khoa-5-toan-cho-machine-learning-tich-chap-softmax-va-lan-truyen-nguoc-cho/checkpoint-capstone-forward-backward.md) (premium content)
- [Course cheatsheet](https://everwise.study/courses/khoa-5-toan-cho-machine-learning-tich-chap-softmax-va-lan-truyen-nguoc-cho/cheatsheet.md) (premium content)
