Lan truyền ngược và quy tắc chuỗi
Lan truyền ngược và quy tắc chuỗi
Giá trị chảy xuôi, gradient chảy ngược. Mỗi gradient chỉ là tích các đạo hàm cục bộ dọc một đường.
Huấn luyện một mạng là chỉnh từng trọng số sao cho mất mát nhỏ đi. Muốn chỉnh đúng hướng, ta cần biết mất mát L thay đổi ra sao khi nhích riêng một trọng số w, tức là đạo hàm riêng ∂L/∂w. Có con số đó thì mỗi bước học chỉ việc dịch w ngược dấu gradient. Vấn đề là w không chạm thẳng vào L; nó đi qua cả một chuỗi phép tính trung gian, nên không thể lấy đạo hàm trong một bước.
Ý tưởng của lan truyền ngược là chia đường dài đó thành từng chặng ngắn. Trên mỗi cạnh của đồ thị tính toán, đạo hàm cục bộ rất dễ tính: cộng thì đạo hàm bằng 1, phép trừ nhãn cho -1, còn z = w·x thì ∂z/∂w = x. Quy tắc chuỗi nói rằng gradient của cả đường chính là tích các đạo hàm cục bộ nối tiếp nhau. Vì thế ta cho giá trị chảy xuôi một lượt để biết mọi con số, rồi cho gradient chảy ngược một lượt, nhân dồn dọc đường về tới từng trọng số.
Thử ngay
Thử điều này:
- Trượt nhãn đúng
ycho tới khi sai sốe = a − ybằng0; xemLvà mọi gradient cùng về0một lúc. - Rê chuột lên nút
wrồi lên nútb: cả hai gradient đều đi qua∂L/∂zhoặc∂L/∂a, chỉ khác chặng cục bộ cuối. - Tăng đầu vào
xlên gấp đôi và để ý∂L/∂wcũng đổi theo, vì∂L/∂w = 2e·xcó thừa sốx. - Trượt
wđể đổi dấu sai sốe; theo dõi mọi gradient đổi dấu theo cùng lúc.
Quy tắc chuỗi
Với một nút bất kỳ, gradient của nó bằng gradient của nút cha nhân với đạo hàm cục bộ trên cạnh nối tới cha, viết gọn là ∂L/∂w = ∂L/∂z · ∂z/∂w. Cha đã có sẵn gradient nhờ lượt chảy ngược đi trước, nên mỗi nút chỉ cần một phép nhân. Nhân dồn như vậy từ L về tới w chính là toàn bộ phép lấy đạo hàm mà mạng cần để học.
Gradient của một trọng số chỉ là tích các đạo hàm cục bộ dọc đường từ mất mát về tới trọng số đó, ghép lại bằng đúng một phép nhân ở mỗi chặng.
- 1Vì sao ta cần lan truyền ngược thay vì lấy đạo hàm trực tiếp ∂L/∂w trong một bước?
- 2Trong sim, gradient ∂L/∂w được ghép từ những thừa số nào?
- 3Khi bạn trượt nhãn đúng y để sai số e = a − y bằng 0, điều gì xảy ra với các gradient?