MinAI - Về trang chủ
Lý thuyết
3/2160 phút
Đang tải...

Forward và Backward Propagation

Học cách Neural Network 'suy nghĩ' (Forward) và 'học từ sai lầm' (Backward) - nền tảng của Deep Learning

0

🎯 Mục tiêu bài học

TB5 min

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!

1

➡️ Forward Propagation - Neural Network 'Suy Nghĩ'

TB5 min

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ả

Quy trình nấu phở = Forward Propagation🥩Nguyên liệu(Input)🔪Sơ chế(Layer 1)🍲Nấu nước dùng(Layer 2)🎨Trình bày(Layer 3)🍜Tô phở(Output)➡️ Forward Direction (Input → Output)

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:

  1. Đưa dữ liệu vào (Input)
  2. Qua từng layer tính toán
  3. 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ố)

Neural Network với Forward PassINPUTHIDDEN LAYEROUTPUTw₁=0.1w₂=0.2w₃=0.8w₄=0.3w₅=0.5w₆=0.5Tuổi: 25Thu nhập: 5MNeuron 1ReLUNeuron 2ReLUSigmoidMua: 72%➡️ Data Flow Direction

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:

NeuronTính toánKết quả
Neuron 125×0.1+5×0.8=6.525 \times 0.1 + 5 \times 0.8 = 6.5 → ReLU6.56.5
Neuron 225×0.2+5×0.3=6.525 \times 0.2 + 5 \times 0.3 = 6.5 → ReLU6.56.5

Bước 2 — Qua Output:

Output=6.5×0.5+6.5×0.5=6.5Sigmoid72%\text{Output} = 6.5 \times 0.5 + 6.5 \times 0.5 = 6.5 \xrightarrow{\text{Sigmoid}} \boxed{72\%}

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"?

2

📉 Loss Function - Đo 'Sai Số'

TB5 min

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ánLoss FunctionVí dụ
Có/Không (2 lớp)Binary Cross-EntropyMua/Không mua, Spam/Không spam
Nhiều lớpCategorical Cross-EntropyChó/Mèo/Chim, Chữ số 0-9
Dự đoán sốMean Squared ErrorGiá nhà, Nhiệt độ

Cách chọn Loss Function

Chọn Loss Function theo bài toán

Chọn Loss Function theo bài toánBài toán của bạn là gì?Phân loại 2 lớpBinary CrossEntropy+ SigmoidVD: Mua/Không mua, Spam/HamPhân loại nhiều lớpCategorical CrossEntropy+ SoftmaxVD: Chó/Mèo/Chim, Số 0-9Dự đoán số (Regression)MSE+ LinearVD: Giá nhà, Nhiệt độ💡 Chọn đúng Loss Function = Model học tốt hơn!

Ví dụ tính Loss

Trường hợp 1 — Dự đoán gần đúng:

Giá trịĐánh giá
Dự đoán (y^\hat{y})0.720.72 (72%)
Thực tế (yy)11 (có mua)
Loss0.33\approx 0.33✅ Thấp, tốt!

Trường hợp 2 — Dự đoán sai nhiều:

Giá trịĐánh giá
Dự đoán (y^\hat{y})0.200.20 (20%)
Thực tế (yy)11 (có mua)
Loss1.6\approx 1.6❌ Cao, tệ!

Checkpoint

Bạn đã hiểu Loss = "đo mức độ sai"?

3

⬅️ Backpropagation - Neural Network 'Học Từ Sai Lầm'

TB5 min

Analogy: Học sinh sửa bài

Khi bạn làm sai bài toán:

  1. Thầy chấm điểm (tính Loss)
  2. Thầy chỉ ra lỗi sai (Backpropagation)
  3. 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:

  1. Biết được sai số (Loss)
  2. Truyền ngược về từng layer
  3. Tìm ra mỗi weight "có lỗi" bao nhiêu

So sánh Forward vs Backward

ForwardBackward
Hướng điInput → OutputOutput → Input
Mục đíchTính kết quảTìm "ai có lỗi"
Khi nàoLuôn luônChỉ khi học (training)
AnalogyLàm bàiSửa bài

Minh họa trực quan

Forward vs Backward Propagation

Forward = làm bài | Backward = sửa bài

Forward vs Backward Propagation➡️ FORWARD (Làm bài)InputHiddenOutputLoss"Sai rồi!"⬅️ BACKWARD (Sửa bài)Sửa W₁Sửa W₂Sửa W₃

Checkpoint

Bạn đã hiểu Backward = "tìm ra cần sửa gì"?

4

🔄 Gradient Descent - 'Sửa Bài'

TB5 min

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)

Wm1˘edbi=Wc0˘169ηLearning Rate×LGradientW_{m\text{\u1edbi}} = W_{c\text{\u0169}} - \underbrace{\eta}_{\text{Learning Rate}} \times \underbrace{\nabla L}_{\text{Gradient}}

Trong đó:

  • Tốc độ học (Learning Rate η\eta): Bước đi lớn hay nhỏ
  • Hướng sửa (Gradient L\nabla L): Sửa theo hướng nào

Learning Rate quan trọng như thế nào?

Learning RateKết quảGiống như
Quá lớnNhảy lung tung, không về đíchBước quá dài, nhảy qua đáy
Quá nhỏVề đích rất chậmBước quá ngắn, đi mãi không tới
Vừa phảiVề đí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)

0.51.01.52.0WeightLossBắt đầu12345Tối ưu!Loss thấp nhất
Xuất phát

Loss cao → Weights chưa tốt

Đang học

Mỗi bước = 1 lần update weights

Tối ưu!

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"?

5

🔁 Quy trình Training Hoàn Chỉnh

TB5 min

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

Training Loop - Vòng lặp huấn luyệnTRAINING LOOPSTARTFORWARD(Làm bài)TÍNH LOSS(Chấm điểm)Loss OK?Yes ✓🎉 DONENo ✗BACKWARD(Tìm lỗi)UPDATE(Sửa bài)🔁 Lặp lại

Giải thích từng bước

BướcTênLàm gìAnalogy
1ForwardDữ liệu đi qua mạng, ra kết quảLàm bài thi
2Tính LossSo sánh kết quả với đáp ánChấm điểm
3BackwardTìm ra cần sửa weight nàoThầy chỉ lỗi
4UpdateSửa weights theo hướng giảm lossSửa bài
5Lặp lạiLàm đi làm lại nhiều lầnLuyện tập

Các thuật ngữ cần biết

Thuật ngữNghĩaVí dụ
Epoch1 vòng qua toàn bộ dataLàm hết 100 bài = 1 epoch
Batch1 nhóm nhỏ dataLàm 10 bài mỗi lần
Iteration1 lần cập nhật weightSau mỗi batch

Ví dụ trực quan:

Thông sốGiá trị
Tổng số ảnh mèo/chó10001000
Batch size3232
Số iterations / epoch1000÷32311000 \div 32 \approx 31
Số epochs1010
Tổng iterations31×10=31031 \times 10 = \boxed{310}

Checkpoint

Bạn đã hiểu quy trình training: Forward → Loss → Backward → Update → Lặp lại?

6

💻 Thực hành với Code

TB5 min

Code đơn giản với Keras

python.py
1import tensorflow as tf
2from tensorflow.keras import layers, models
3
4# 1. Tạo model đơn giản
5model = models.Sequential([
6 layers.Dense(4, activation='relu', input_shape=(2,)), # Hidden layer
7 layers.Dense(1, activation='sigmoid') # Output layer
8])
9
10# 2. Compile = Chọn cách học
11model.compile(
12 optimizer='adam', # Cách sửa weights
13 loss='binary_crossentropy', # Cách tính điểm (loss)
14 metrics=['accuracy'] # Theo dõi độ chính xác
15)
16
17# 3. Chuẩn bị data
18import numpy as np
19X = np.array([[25, 5], [30, 8], [22, 3], [45, 12], [35, 6]]) # Tuổi, Thu nhập
20y = np.array([0, 1, 0, 1, 1]) # Có mua (1) / Không mua (0)
21
22# 4. Training! (Forward + Backward + Update tự động)
23print("Bắt đầu training...")
24history = model.fit(X, y, epochs=100, verbose=0)
25
26# 5. Xem kết quả
27print(f"Loss cuối: {history.history['loss'][-1]:.4f}")
28print(f"Accuracy: {history.history['accuracy'][-1]*100:.1f}%")
29
30# 6. Dự đoán
31new_customer = np.array([[28, 7]]) # Tuổi 28, thu nhập 7 triệu
32prediction = 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}%")
Expected Output
1Bắt đầu training...
2Loss cuối: 0.4521
3Accuracy: 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:

  1. Thiết kế model
  2. Gọi model.fit()
  3. Done! 🎉

Checkpoint

Bạn đã chạy thử code chưa?

7

🎯 Tổng kết

TB5 min

Những điểm cần nhớ

Khái niệmMột câu giải thíchAnalogy
ForwardDữ liệu đi từ Input → OutputLàm bài thi
LossĐo mức độ saiĐiểm số
BackwardTìm ra cần sửa gìThầy chỉ lỗi
Gradient DescentSửa weights để giảm LossXuống núi trong sương
Epoch1 vòng qua toàn bộ dataLà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

5 bước TrainingFORWARDTính kết quả dự đoánLàm bàiLOSSĐo sai số (Loss)Chấm điểmBACKWARDTìm "thủ phạm"Thầy chỉ lỗiUPDATESửa weightsSửa bàiREPEATLặp lại cho đến khi tốtLuyện tập🔁 Lặp lại cho đến khi hoàn hảo

Câu hỏi tự kiểm tra

  1. Forward Propagation đi theo hướng nào?
  2. Loss thấp hay cao là tốt?
  3. Backpropagation dùng để làm gì?
  4. 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!