🎯 Mục tiêu bài học
Sau bài này, bạn sẽ:
✅ Hiểu Neural Network "suy nghĩ" như thế nào (Forward)
✅ Hiểu Neural Network "học" như thế nào (Backward)
✅ Biết Loss Function là gì và tại sao quan trọng
✅ Hiểu quy trình training từ đầu đến cuối
Không cần nhớ công thức! Quan trọng là hiểu ý tưởng.
Ôn lại bài trước
Bài trước ta đã học:
- Neuron = đơn vị tính toán nhỏ nhất
- Weight = mức độ quan trọng của input
- Activation = hàm quyết định output (ReLU, Sigmoid...)
Hôm nay ta sẽ học cách ghép các neuron lại và dạy chúng!
➡️ Forward Propagation - Neural Network 'Suy Nghĩ'
Analogy: Quán phở
Hãy tưởng tượng một quán phở với quy trình:
Quy trình nấu phở = Forward Propagation
Dữ liệu đi qua từng bước xử lý cho đến khi ra kết quả
Forward Propagation = Nguyên liệu đi qua từng bước để ra thành phẩm.
Định nghĩa đơn giản
Forward Propagation là quá trình:
- Đưa dữ liệu vào (Input)
- Qua từng layer tính toán
- Ra kết quả dự đoán (Output)
Minh họa trực quan
Neural Network với Forward Pass
Dữ liệu đi từ trái → phải, mỗi đường có 1 weight (trọng số)
Ví dụ cụ thể
Bài toán: Dự đoán khách hàng có mua hàng không?
Input: Tuổi = 25, Thu nhập = 5 triệu/tháng
Bước 1 — Qua Hidden Layer:
| Neuron | Tính toán | Kết quả |
|---|---|---|
| Neuron 1 | → ReLU | |
| Neuron 2 | → ReLU |
Bước 2 — Qua Output:
→ Kết luận: Khả năng mua = 72% ✅
Checkpoint
Bạn đã hiểu Forward = "dữ liệu chảy từ đầu đến cuối"?
📉 Loss Function - Đo 'Sai Số'
Analogy: Điểm số bài thi
Loss Function giống như điểm số khi làm bài thi:
- Đáp án đúng = 1, bạn trả lời = 0.9 → Sai ít → Loss thấp ✅
- Đáp án đúng = 1, bạn trả lời = 0.2 → Sai nhiều → Loss cao ❌
Mục tiêu: Làm sao để Loss càng thấp càng tốt!
Các loại Loss Function
| Bài toán | Loss Function | Ví dụ |
|---|---|---|
| Có/Không (2 lớp) | Binary Cross-Entropy | Mua/Không mua, Spam/Không spam |
| Nhiều lớp | Categorical Cross-Entropy | Chó/Mèo/Chim, Chữ số 0-9 |
| Dự đoán số | Mean Squared Error | Giá nhà, Nhiệt độ |
Cách chọn Loss Function
Chọn Loss Function theo bài toán
Ví dụ tính Loss
Trường hợp 1 — Dự đoán gần đúng:
| Giá trị | Đánh giá | |
|---|---|---|
| Dự đoán () | (72%) | |
| Thực tế () | (có mua) | |
| Loss | ✅ Thấp, tốt! |
Trường hợp 2 — Dự đoán sai nhiều:
| Giá trị | Đánh giá | |
|---|---|---|
| Dự đoán () | (20%) | |
| Thực tế () | (có mua) | |
| Loss | ❌ Cao, tệ! |
Checkpoint
Bạn đã hiểu Loss = "đo mức độ sai"?
⬅️ Backpropagation - Neural Network 'Học Từ Sai Lầm'
Analogy: Học sinh sửa bài
Khi bạn làm sai bài toán:
- Thầy chấm điểm (tính Loss)
- Thầy chỉ ra lỗi sai (Backpropagation)
- Bạn sửa cách làm (Update weights)
Backpropagation = Tìm ra "ai" gây ra lỗi và cần sửa bao nhiêu.
Định nghĩa đơn giản
Backpropagation (lan truyền ngược) là quá trình:
- Biết được sai số (Loss)
- Truyền ngược về từng layer
- Tìm ra mỗi weight "có lỗi" bao nhiêu
So sánh Forward vs Backward
| Forward | Backward | |
|---|---|---|
| Hướng đi | Input → Output | Output → Input |
| Mục đích | Tính kết quả | Tìm "ai có lỗi" |
| Khi nào | Luôn luôn | Chỉ khi học (training) |
| Analogy | Làm bài | Sửa bài |
Minh họa trực quan
Forward vs Backward Propagation
Forward = làm bài | Backward = sửa bài
Checkpoint
Bạn đã hiểu Backward = "tìm ra cần sửa gì"?
🔄 Gradient Descent - 'Sửa Bài'
Analogy: Xuống núi trong sương mù
Bạn đứng trên núi, muốn xuống đến đáy (Loss thấp nhất).
Nhưng sương mù dày đặc, bạn không nhìn thấy đường!
Cách làm: Mỗi bước, dò xem hướng nào dốc xuống, rồi bước về hướng đó.
Gradient = hướng dốc xuống Learning Rate = bước chân to hay nhỏ
Công thức (đơn giản hóa)
Trong đó:
- Tốc độ học (Learning Rate ): Bước đi lớn hay nhỏ
- Hướng sửa (Gradient ): Sửa theo hướng nào
Learning Rate quan trọng như thế nào?
| Learning Rate | Kết quả | Giống như |
|---|---|---|
| Quá lớn | Nhảy lung tung, không về đích | Bước quá dài, nhảy qua đáy |
| Quá nhỏ | Về đích rất chậm | Bước quá ngắn, đi mãi không tới |
| Vừa phải | Về đích nhanh và chính xác | ✅ Hoàn hảo! |
Minh họa
📊 Gradient Descent — Xuống núi tìm Loss thấp nhất
Mỗi bước đi theo hướng dốc xuống (gradient) cho đến khi tìm được đáy (loss tối thiểu)
Loss cao → Weights chưa tốt
Mỗi bước = 1 lần update weights
Loss thấp nhất → Model dự đoán tốt
Tip cho người mới:
- Dùng optimizer Adam (tự điều chỉnh learning rate)
- Bắt đầu với learning rate = 0.001
- Quan sát Loss có giảm không → tăng/giảm learning rate
Checkpoint
Bạn đã hiểu Gradient Descent = "đi xuống núi"?
🔁 Quy trình Training Hoàn Chỉnh
Sơ đồ đơn giản
Training Loop - Vòng lặp huấn luyện
Quá trình này lặp đi lặp lại cho đến khi Loss đủ thấp
Giải thích từng bước
| Bước | Tên | Làm gì | Analogy |
|---|---|---|---|
| 1 | Forward | Dữ liệu đi qua mạng, ra kết quả | Làm bài thi |
| 2 | Tính Loss | So sánh kết quả với đáp án | Chấm điểm |
| 3 | Backward | Tìm ra cần sửa weight nào | Thầy chỉ lỗi |
| 4 | Update | Sửa weights theo hướng giảm loss | Sửa bài |
| 5 | Lặp lại | Làm đi làm lại nhiều lần | Luyện tập |
Các thuật ngữ cần biết
| Thuật ngữ | Nghĩa | Ví dụ |
|---|---|---|
| Epoch | 1 vòng qua toàn bộ data | Làm hết 100 bài = 1 epoch |
| Batch | 1 nhóm nhỏ data | Làm 10 bài mỗi lần |
| Iteration | 1 lần cập nhật weight | Sau mỗi batch |
Ví dụ trực quan:
| Thông số | Giá trị |
|---|---|
| Tổng số ảnh mèo/chó | |
| Batch size | |
| Số iterations / epoch | |
| Số epochs | |
| Tổng iterations |
Checkpoint
Bạn đã hiểu quy trình training: Forward → Loss → Backward → Update → Lặp lại?
💻 Thực hành với Code
Code đơn giản với Keras
1import tensorflow as tf2from tensorflow.keras import layers, models34# 1. Tạo model đơn giản5model = models.Sequential([6 layers.Dense(4, activation='relu', input_shape=(2,)), # Hidden layer7 layers.Dense(1, activation='sigmoid') # Output layer8])910# 2. Compile = Chọn cách học11model.compile(12 optimizer='adam', # Cách sửa weights13 loss='binary_crossentropy', # Cách tính điểm (loss)14 metrics=['accuracy'] # Theo dõi độ chính xác15)1617# 3. Chuẩn bị data18import numpy as np19X = np.array([[25, 5], [30, 8], [22, 3], [45, 12], [35, 6]]) # Tuổi, Thu nhập20y = np.array([0, 1, 0, 1, 1]) # Có mua (1) / Không mua (0)2122# 4. Training! (Forward + Backward + Update tự động)23print("Bắt đầu training...")24history = model.fit(X, y, epochs=100, verbose=0)2526# 5. Xem kết quả27print(f"Loss cuối: {history.history['loss'][-1]:.4f}")28print(f"Accuracy: {history.history['accuracy'][-1]*100:.1f}%")2930# 6. Dự đoán31new_customer = np.array([[28, 7]]) # Tuổi 28, thu nhập 7 triệu32prediction = model.predict(new_customer, verbose=0)33print(f"\nKhách hàng mới (28 tuổi, 7 triệu):")34print(f"Xác suất mua: {prediction[0][0]*100:.1f}%")1Bắt đầu training...2Loss cuối: 0.45213Accuracy: 80.0%4 5Khách hàng mới (28 tuổi, 7 triệu):6Xác suất mua: 65.3%Giải thích code
| Dòng code | Ý nghĩa |
|---|---|
Sequential([...]) | Tạo mạng neural với các layer xếp chồng |
Dense(4, activation='relu') | Layer có 4 neurons, dùng ReLU |
compile(optimizer='adam') | Chọn Adam để tự động điều chỉnh learning rate |
model.fit(X, y, epochs=100) | Train 100 epochs (Forward→Backward→Update × 100) |
model.predict(new_data) | Dự đoán data mới (chỉ Forward, không Backward) |
Tin vui: Keras tự động làm Forward, Backward, Update cho bạn!
Bạn chỉ cần:
- Thiết kế model
- Gọi
model.fit() - Done! 🎉
Checkpoint
Bạn đã chạy thử code chưa?
🎯 Tổng kết
Những điểm cần nhớ
| Khái niệm | Một câu giải thích | Analogy |
|---|---|---|
| Forward | Dữ liệu đi từ Input → Output | Làm bài thi |
| Loss | Đo mức độ sai | Điểm số |
| Backward | Tìm ra cần sửa gì | Thầy chỉ lỗi |
| Gradient Descent | Sửa weights để giảm Loss | Xuống núi trong sương |
| Epoch | 1 vòng qua toàn bộ data | Làm hết bộ đề |
Quy trình training = 5 bước
5 bước Training
Quy trình lặp đi lặp lại cho đến khi model đủ tốt
Câu hỏi tự kiểm tra
- Forward Propagation đi theo hướng nào?
- Loss thấp hay cao là tốt?
- Backpropagation dùng để làm gì?
- Learning rate quá lớn gây vấn đề gì?
Bài tiếp theo
Training với TensorFlow/Keras - Thực hành xây dựng và train model thực tế!
🎉 Tuyệt vời! Bạn đã hiểu cách Neural Network học!
Nhớ: Keras làm hết Forward + Backward cho bạn.
Việc của bạn là thiết kế model và gọi fit() thôi!
