Chuyển tới nội dung chính

Lan truyền ngược và quy tắc chuỗi

Kéo trượtTính lại thậtXuôi rồi ngược

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

Lan truyền ngược · quy tắc chuỗi trên đồ thị tính toán
Mất mát L = 0.25 · ∂L/∂w = -1.00 · ∂L/∂b = -1.00
xuôi: giá trị →← gradient: ngược∂z/∂w = xx1.00∂L/∂x = -1.00w1.00∂L/∂w = -1.00z = w·x1.00∂L/∂z = -1.00b0.50∂L/∂b = -1.00a = z + b1.50∂L/∂a = -1.00y2.00∂L/∂y = 1.00e = a − y-0.50∂L/∂e = -1.00L = e²0.25∂L/∂L = 1.00
∂L/∂w = ∂L/∂z · ∂z/∂w = -1.00 · 1.00 (∂z/∂w = x) = -1.00

Thử điều này:

  • Trượt nhãn đúng y cho tới khi sai số e = a − y bằng 0; xem L và mọi gradient cùng về 0 một lúc.
  • Rê chuột lên nút w rồi lên nút b: cả hai gradient đều đi qua ∂L/∂z hoặc ∂L/∂a, chỉ khác chặng cục bộ cuối.
  • Tăng đầu vào x lên gấp đôi và để ý ∂L/∂w cũng đổi theo, vì ∂L/∂w = 2e·x có 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.

Điều rút ra

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.

Câu hỏi tự kiểm0/3 đúngchưa trả lời
  1. 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?
  2. 2Trong sim, gradient ∂L/∂w được ghép từ những thừa số nào?
  3. 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?