# 🧠 Cheatsheet: Khóa 5: Toán cho Machine Learning — tích chập, softmax và lan truyền ngược cho deep learning

By Better Wise

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

Tra cứu nhanh cho toàn khóa. Mỗi mục là một "công thức + khi nào dùng".

---

## 1. Tích chập 1D và 2D: kernel, stride, padding

### Ký hiệu

| Ký hiệu | Ý nghĩa |
| --- | --- |
| $W$ | chiều rộng input (1D) |
| $K$ | kích thước kernel |
| $S$ | stride |
| $P$ | padding (mỗi bên) |
| $C_{in}, C_{out}$ | số channel vào/ra |
| $N$ | batch size |

### Công thức shape output (cốt lõi)

$$
W_{out} = \left\lfloor \frac{W + 2P - K}{S} \right\rfloor + 1
$$

- 1D: áp dụng cho trục chiều dài.
- 2D: áp dụng độc lập cho $H$ và $W$:

$$
H_{out} = \left\lfloor \frac{H + 2P - K}{S} \right\rfloor + 1,\quad
W_{out} = \left\lfloor \frac{W + 2P - K}{S} \right\rfloor + 1
$$

### Bảng chọn padding để giữ nguyên kích thước ("same")

| Kernel $K$ | Stride $S$ | Padding $P$ để $W_{out}=W$ |
| --- | --- | --- |
| 3 | 1 | 1 |
| 5 | 1 | 2 |
| 7 | 1 | 3 |
| $K$ lẻ | 1 | $(K-1)/2$ |
| bất kỳ | $>1$ | không có $P$ đơn giản giữ nguyên (dùng công thức, thường không "same") |

### Khi nào dùng gì

| Tình huống | Lựa chọn |
| --- | --- |
| Muốn giữ nguyên $H,W$ | $P=(K-1)/2$, $S=1$ |
| Muốn giảm một nửa kích thước | $K=2,S=2$ hoặc $K=3,S=2,P=1$ |
| Tăng receptive field, giữ chi phí | $K$ lớn hơn, $S=1$, "same" padding |
| Giảm chi phí tính toán | tăng $S$ trước khi tăng $K$ |

### Output shape tổng quát (2D, batch)

Input $(N, C_{in}, H, W)$, kernel $(C_{out}, C_{in}, K_h, K_w)$ → output $(N, C_{out}, H_{out}, W_{out})$.

> **Tip:** 
> Luôn viết công thức shape ra giấy trước khi code. Nếu $W+2P-K < 0$ thì kernel lớn hơn vùng input, không hợp lệ.

---

## 2. Kiểm tra shape và vector hóa bằng im2col

### Ý tưởng im2col

Biến mỗi "cửa sổ trượt" thành một cột → tích chập thành một phép nhân ma trận lớn.

```
Input  (N, C_in, H, W)
  │  im2col (K_h x K_w, stride S, pad P)
  ▼
Cols   (N, C_in*K_h*K_w, H_out*W_out)
Kernel (C_out, C_in*K_h*K_w)
  │  matmul
  ▼
Out    (N, C_out, H_out*W_out) → reshape (N, C_out, H_out, W_out)
```

### Bảng shape trung gian
