Gradients, Partial Derivatives and the Chain Rule
Ví dụ trừu tượng¶
Chúng ta sẽ kết hợp câu chuyện trực quan về "trách nhiệm" với các sơ đồ và giải thích cụ thể cho từng nút trong mạng neural. Điều này sẽ tạo ra một cầu nối vững chắc giữa lý thuyết trừu tượng và thực tế tính toán.
Tóm Tắt Câu Chuyện¶
- Mạng Neural: Một cung thủ với hàng trăm "nút vặn" kỹ thuật (trọng số, bias).
- Mục Tiêu: Bắn trúng hồng tâm (giảm Lỗi/Loss về 0).
- Backpropagation: Quá trình "Phân Chia Trách Nhiệm", tìm ra mỗi nút vặn phải chịu bao nhiêu trách nhiệm cho lỗi cuối cùng.
- Gradient: Tờ hướng dẫn tổng hợp tất cả "trách nhiệm". Chúng ta sẽ điều chỉnh các nút vặn theo hướng ngược lại với tờ hướng dẫn này.
Bây giờ, hãy vào vai một kỹ sư, mở nắp "cỗ máy cung thủ" ra và xem xét từng bộ phận. Chúng ta sẽ xem cách "trách nhiệm" (gradient) chảy ngược qua từng loại linh kiện.
Quy ước:
Forward
: Dữ liệu đi từ trái sang phải.Backward
: "Trách nhiệm" (Gradient) chảy ngược từ phải sang trái.Trách nhiệm đầu vào
: Gradient mà một nút nhận được từ phía sau.Trách nhiệm đầu ra
: Gradient mà một nút tính toán và gửi về phía trước (ngược chiều dữ liệu).
Phân Tích Từng Linh Kiện (Từng Nút Tính Toán)¶
1. Linh Kiện CỘNG (Bộ Phận Hợp Lực)¶
Đây là linh kiện đơn giản nhất. Nó lấy hai hoặc nhiều giá trị đầu vào và cộng chúng lại.
- Ví dụ trong Neural Network:
Tổng = (Đầu vào * Trọng số) + Bias
. Phép cộng với Bias chính là một nút cộng.
Sơ Đồ Phân Chia Trách Nhiệm¶
Trách nhiệm cho 'Tổng' = 10
|
v
+-----------------------------------------+
--[Đầu vào * Trọng số]-->| |
| NÚT CỘNG (+) |-->[Tổng]--
--[Bias]------------>| |
+-----------------------------------------+
^ ^
| |
Trách nhiệm cho 'Đầu vào*Trọng số'= 10 Trách nhiệm cho 'Bias'= 10
-
Forward: Lấy giá trị của
(Đầu vào * Trọng số)
cộng với giá trị củaBias
để raTổng
. -
Backward (Phân chia trách nhiệm):
- Nguyên tắc: Trong phép cộng, mọi đầu vào đều đóng góp ngang hàng và trực tiếp vào kết quả. Ảnh hưởng của mỗi đầu vào lên đầu ra là 1-1 (tăng đầu vào 1 đơn vị, đầu ra tăng 1 đơn vị).
- Hành động: Nút cộng nhận được "trách nhiệm" từ phía sau và sao chép y nguyên trách nhiệm đó cho tất cả các nhánh đầu vào của nó.
- Đạo hàm tại nút này: Đạo hàm của
Tổng
theoBias
là 1. Đạo hàm củaTổng
theo(Đầu vào * Trọng số)
cũng là 1. Vì vậy, trách nhiệm được nhân với 1, tức là giữ nguyên.
2. Linh Kiện NHÂN (Bộ Phận Đòn Bẩy)¶
Linh kiện này lấy hai giá trị và nhân chúng với nhau.
- Ví dụ trong Neural Network:
Kết quả = Đầu vào * Trọng số
. Đây là phép tính cốt lõi trong một lớp.
Sơ Đồ Phân Chia Trách Nhiệm¶
Trách nhiệm cho 'Kết quả' = 10
|
v
+-----------------------------------------+
--[Đầu vào = 3]------>| |
| NÚT NHÂN (*) |-->[Kết quả = 15]--
--[Trọng số = 5]------->| |
+-----------------------------------------+
^ ^
| |
Trách nhiệm cho 'Đầu vào' Trách nhiệm cho 'Trọng số'
= 10 * 5 = 50 = 10 * 3 = 30
-
Forward: Lấy
Đầu vào
(giả sử giá trị là 3) nhân vớiTrọng số
(giả sử giá trị là 5) để raKết quả
(15). -
Backward (Phân chia trách nhiệm):
- Nguyên tắc: Trong phép nhân, ảnh hưởng của một đầu vào lên kết quả phụ thuộc vào giá trị của đầu vào còn lại. Đây chính là hiệu ứng đòn bẩy.
- Hành động: Để tính trách nhiệm cho một nhánh, nút nhân lấy "trách nhiệm" từ phía sau và nhân nó với giá trị của nhánh kia (giá trị đã được ghi nhớ từ bước Forward).
- Đạo hàm tại nút này: Đạo hàm của
Kết quả
theoĐầu vào
chính là giá trị củaTrọng số
. Đạo hàm củaKết quả
theoTrọng số
chính là giá trị củaĐầu vào
.
3. Linh Kiện ReLU (Người Gác Cổng)¶
Linh kiện này rất đặc biệt. Nó chỉ có một đầu vào. Nếu đầu vào là số dương, nó cho đi qua. Nếu đầu vào là số âm, nó chặn lại và trả về số 0. Tên chính thức là ReLU(x) = max(0, x)
.
- Ví dụ trong Neural Network: Đây là một hàm kích hoạt phổ biến, giúp mạng học được các mối quan hệ phức tạp.
Sơ Đồ Phân Chia Trách Nhiệm¶
Trường hợp 1: Đầu vào dương (Cổng mở)
Trách nhiệm cho 'Đầu ra' = 10
|
v
+-----------------------------------------+
--[Đầu vào = 3]--------->| |
| NÚT ReLU (Mở) |-->[Đầu ra = 3]--
+-----------------------------------------+
^
|
Trách nhiệm cho 'Đầu vào' = 10
Trách nhiệm cho 'Đầu ra' = 10
|
v
+-----------------------------------------+
--[Đầu vào = -2]-------->| |
| NÚT ReLU (Đóng) |-->[Đầu ra = 0]--
+-----------------------------------------+
^
|
Trách nhiệm cho 'Đầu vào' = 0
-
Forward: Kiểm tra đầu vào. Nếu dương, giữ nguyên. Nếu âm, biến thành 0.
-
Backward (Phân chia trách nhiệm):
- Nguyên tắc: ReLU hoạt động như một người gác cổng cho dòng chảy "trách nhiệm".
- Hành động:
- Nếu trong lúc đi xuôi (forward pass), đầu vào là số dương (cổng được mở), thì khi đi ngược, "trách nhiệm" sẽ được cho qua nguyên vẹn.
- Nếu trong lúc đi xuôi, đầu vào là số âm (cổng đã bị đóng), thì khi đi ngược, "trách nhiệm" sẽ bị chặn lại hoàn toàn (bằng 0). Anh chàng này không đóng góp gì vào kết quả dương cuối cùng, nên anh ta không phải chịu trách nhiệm.
- Đạo hàm tại nút này: Đạo hàm của
ReLU(x)
là 1 nếux > 0
, và là 0 nếux < 0
. Vì vậy, "trách nhiệm" được nhân với 1 (giữ nguyên) hoặc 0 (triệt tiêu).
Kết Hợp Tất Cả Lại: Một Chuỗi Phân Chia Trách Nhiệm¶
Bây giờ, hãy xem cách các linh kiện này làm việc cùng nhau trong một neuron đơn giản:
Đầu vào * Trọng số --> [Nút Nhân] --> Tổng trung gian + Bias --> [Nút Cộng] --> Kết quả cuối
Trách nhiệm cuối (từ lớp sau)
|
v
[Nút Cộng] <--- Trách nhiệm được sao chép cho Bias và "Tổng trung gian"
|
v
[Nút Nhân] <--- Trách nhiệm được nhân với giá trị của nhánh còn lại
|
v
Trách nhiệm của Trọng số và Đầu vào
Quá trình "Phân Chia Trách Nhiệm" này chảy ngược qua toàn bộ mạng lưới, qua hàng trăm, hàng nghìn linh kiện như thế này. Nó giống như một cuộc điều tra ngược dòng, bắt đầu từ "hiện trường vụ án" (Hàm Lỗi) và lần theo dấu vết để tìm ra "trách nhiệm" của từng "nghi phạm" (từng trọng số và bias).
Khi cuộc điều tra kết thúc, mỗi trọng số và bias sẽ nhận được một con số "trách nhiệm" của riêng mình. Đó chính là Gradient. Dựa vào đó, Huấn luyện viên (bạn) sẽ biết phải tinh chỉnh từng nút vặn như thế nào để lần bắn tiếp theo chính xác hơn.