Backpropagation
Lan truyền ngược: truy ngược lỗi qua từng lớp
Mạng đoán sai. Vậy lỗi đến từ LỚP NÀO?
Hình dung bạn là giáo viên chấm bài nhóm. Cả nhóm cùng làm một bài tập, kết quả cuối sai 5 điểmso với đáp án. Câu hỏi quan trọng không phải “sai hay đúng”, mà là mỗi thành viên góp bao nhiêu vào cái sai đó, để bạn biết ai cần học lại phần gì.
Mạng nơ-ron cũng vậy. Khi ŷ khác target 0.2 đơn vị, câu hỏi thú vị là: weight nào chịu trách nhiệm bao nhiêu? Câu trả lời cho cả triệu weight cùng một lúc chính là backpropagation. Nó “truy ngược lỗi” từ đầu ra về từng lớp bằng quy tắc chuỗi, chỉ tốn một lần duyệt ngược.
Forward
Dữ liệu chảy từ trái sang phải, mạng đưa ra dự đoán.
So loss
So dự đoán với đáp án, ra một con số sai lệch.
Backward
Truy ngược lỗi qua từng lớp, phân bổ trách nhiệm cho từng weight.
Bạn đã biết phải 'truy ngược lỗi qua từng lớp'. Mạng có 1 triệu weight. Nếu bạn truy ngược NGÂY THƠ, tức mỗi weight chạy lại cả mạng một lần để đo ảnh hưởng, thì mất bao nhiêu lần duyệt mạng cho một bước cập nhật?
Hình minh họa
Mạng có 2 đầu vào, 3 nơ-ron ẩn (sigmoid), 1 đầu ra (sigmoid). Tổng 9 weight. Mục tiêu y = 0.8. Bấm các nút dưới để thấy forward, backward, và cập nhật diễn ra trên cùng một sơ đồ.
η nhỏ thì học chậm. η vừa thì mượt. η lớn thì dao động hoặc phân kỳ.
Bước
0
ŷ
0.568
Target
0.80
Loss
0.0269
Bấm một nút để đặt mạng về trạng thái khởi tạo và chọn η tương ứng, rồi bấm Tự chạy ở trên để quan sát.
Giờ mổ xẻ một mạng mini (một đầu vào → một ẩn → một ra) với số nhỏ để bạn có thể theo dõi mọi con số. Bấm Tiếp tục để xem từng bước. Con số ở mỗi bước được tính thật bằng công thức bạn vừa thấy.
Bước 1. Forward: lấy ŷ
x → z = w₁·x → h = σ(z) → z_out = w₂·h → ŷ = σ(z_out)
Cho đầu vào x₁ = 0.6, x₂ = 0.9. Với weight khởi tạo, mạng tính z = -0.09, activation h = σ(z) = 0.478. Qua lớp ra: z_out = w₂·h = 0.167, và dự đoán ŷ = σ(z_out) = 0.542. Forward KHÔNG vứt đi các con số này. Chúng sẽ dùng lại ở backward.
Mạng 2-3-1. Bạn tính được ∂L/∂ŷ = 0.3, ŷ = 0.7, và weight w₂ nối h₁ → ŷ bằng 0.5. Áp dụng chain rule, ∂L/∂h₁ bằng bao nhiêu?
Mạng 50 lớp, toàn sigmoid. Đạo hàm sigmoid cực đại = 0.25 (đạt khi activation = 0.5). Gradient ở LỚP ĐẦU TIÊN (xa output nhất) có độ lớn xấp xỉ bao nhiêu so với gradient ở lớp CUỐI?
Giải thích
Bạn đã thấy backprop chạy bằng số trong mạng mini ở Bước 4. Giờ ta viết lại bằng ba công thức tổng quát. Mỗi công thức kèm một hình minh hoạ và một câu “nó nghĩa là gì bằng tiếng Việt đời thường”.
Quy tắc chuỗi xuyên mạng
Gradient của loss theo một weight ở lớp đầu = tích các đạo hàm cục bộ suốt đường đi từ weight đó đến output.
“Để biết một weight ở lớp đầu ảnh hưởng loss bao nhiêu, đi ngược đường đi tín hiệu, nhân đạo hàm cục bộ ở mỗi đoạn.”
Gradient loss theo một weight, dạng gọn
Mỗi weight wᵢⱼ (nối nơ-ron j → nơ-ron i) có công thức: gradient sai số lan về nhân với activation đi vào.
“Weight giữa A và B được cập nhật theo tích của hai thứ: A phát ra bao nhiêu (a_j), và B chịu trách nhiệm bao nhiêu cho lỗi cuối (δ_i).”
Cập nhật weight bằng gradient descent
Sau khi backprop xong, áp dụng công thức này cho MỌI weight cùng một lúc.
“Weight cũ trừ đi cỡ bước (η) nhân trách nhiệm (gradient). Làm đồng thời cho mọi weight. Đó là một lần gradient descent trên toàn mạng.”
Để hiểu sâu về cách tính đạo hàm (chain rule, đạo hàm riêng, gradient), đọc giải tích cho backprop. Để hiểu cách dùng gradient để đi về minimum (learning rate, momentum, Adam), đọc gradient descent. Backprop chỉ tính gradient. Việc đi xuống đồi là của gradient descent.
- Backprop trả lời câu hỏi: mỗi weight ảnh hưởng loss bao nhiêu. Gradient ∂L/∂w là đơn vị đo của 'trách nhiệm'.
- Cách làm: bắt đầu từ ∂L/∂output (con số duy nhất biết trực tiếp), rồi áp quy tắc chuỗi để lan ngược về từng lớp.
- Công thức gọn cho một weight: ∂L/∂w_ij = δ_i · a_j. Tích của gradient lan về và activation đi vào.
- Gradient descent cập nhật: w ← w − η · ∂L/∂w. Dấu TRỪ vì gradient chỉ hướng TĂNG của loss.
- Thách thức thực tế ở mạng sâu: vanishing hoặc exploding gradient. Giải pháp: ReLU, Batch Normalization, Residual Connection.
Kiểm tra hiểu biết
Backpropagation trả lời cho câu hỏi gì bằng tiếng Việt đời thường?