Tìm hiểu về thuật toán Lan truyền ngược Phần 1
This post hasn't been updated for 5 years
Mở đầu
Mục đích: Trong phần này, chúng ta sẽ mở rộng chuyên môn với một cái hiểu chi tiết về thuật toán truyền ngược, là một cách để tính đạo hàm của một biểu thức sử dụng quy tắc chuối (chain rule). Hiểu được thuật toán này và sự tính tế của nó rất quan trọng cho bạn để hiểu, phát triển, thiết kế và debug mạng neurol
Bài toán" Vấn đề cốt lỗi của phần này như sau: Chúng a được cho một hàm trong đó x là một vector của dữ liệu và chúng ta muốn tính đạo hàm của theo (i.e. .
Mục đích: Nhắc lại về mục đích ban đầu chúng ta quan tâm đến vấn đề này là trong những trường hợp đặc biệt của Mạng Neurol, sẽ tương ứng với hàm mất mát (loss function) () và dữ liệu đầu vào chứ dữ liệu huấn luyện và trọng số của mạng neural. Ví dụ, hàm mất mát của hàm SVM và dữ liệu đầu vào là dữ liệu huấn luyện và trọng số, biases . Chú ý rằng ( trong những trường hợp thông thường của Học máy), chúng ta đã có dữ liệu huấn luyện và chúng ta có quyền kiểm soát các trọng số. Từ đó, chúng ta có thể dễ dàn dùng truyền ngược để tính đạo hàm theo . Trong thực tế, chúng ta thường chỉ tính đạo hàm theo tham số () để chúng ta dùng nó để thực hiển cập nhật tham số. Tuy nhiên, về sau chúng ta sẽ thấy rằng đạo hàm theo vẫn có thế có ích, ví dụ cho mục đích quan sát Mạng neural có thể làm gì.
Nếu bạn tính đạo hàm bằng quy tắc chuỗi, chúng tôi khuyến khích bạn lờ đi cách này trong phần này, bởi vì nó bày tỏ một quan điểm hiếm khi được phát triển của truyền ngược như dòng chảy ngược có giá trị thực và bất kỳ hiểu biết nào mà bạn sẽ đạt được có thể giúp bạn trong cả lớp.
Biểu thức đơn giản và sự biểu diễn của đạo hàm riêng (gradient)
Cùng bắt đầu để chúng ta có thể phát triển ký hiệu và sự tiện lợi cho những biểu thức phức tạp hơn. Xét một hàm đã thực đơn giản . Rất đơn giản để tính đạo hàm riêng theo và .
Biểu diễn: Giữ trong đầu rằng đạo hàm cho ta biết điều gì: Chúng chỉ ra tỉ lệ thay đổi của một hàm ứng với biến đó xung quan một khoảng vô cùng bé của điểm đó:
Một chú ý rằng dấu chia ở vế phải khác với dấu chia ở vế trái (kí hiệu vi phân). Ký hiệu vi phân thể hiển rằng toán tử đang được ứng dụng vào trong hàm , và trả về một đạo hàm. Một cách hay để nghĩ về biểu thức trên là khi rất nhỏ, hàm số sẽ xấp xỉ một đường thẳng, và đạo hàm là đường dốc của nó. Nói cách khác, đạo hàm theo mỗi biến cho ta biệt mức độ "nhạy cảm" của toàn bộ biểu thức theo giá trị đó. Ví dụ, nếu , => và đạo hàm theo . Nói cho chúng ta rằng nếu chúng ta tăng giá trị của biến một ít sẽ làm giảm giá trị của biểu thực bằng 3 lần giá trị tăng. Nhìn giống như ta thay đổi phương trình hàm .
Như đã đề cập, gradient là một vector của đạo hàm riêng, nên chúng ta có . Mặc dù gradient là một vector, chúng ta thường sử dụng khái niệm "gradient theo x" thay thế cho "đạo hàm riêng theo x".
Chúng ta có thể đạo hàm cho phép cộng:
đạo hàm the cả là ra bất kể ta tăng giá trị của thì hàm cũng sẽ tăng và tỉ lệ không phụ thuộc vào giá trị của x, y. Cuối cùng là hàm tìm số lớn nhất
Nếu , giá trị của hàm là 4 và giá trị của nó không bị ảnh hưởng bới . Nghĩa là nếu chúng ta tăng giá trị của một lượng nhọ thì hàm số vẫn trả về giá trị 4 và đạo hàm riêng theo là 0. Dĩ nhiên nếu ta tăng một lượng lớn hơn 2 thì giá trị của sẽ thay đổi nhưng đạo hàm k nói cho chúng ta điều gì về ảnh hưởng của hàm khi biến thay đổi lớn.
Hàm hợp với quy tắc chuỗi
Bây giờ xét một biểu thức phức tạp hơn, . Biểu thức này vẫn khá đơn giản để đạo hàm trực tiếp, nhưng chúng tôi sẽ dùng một cách khác để giúp bản hiểu rõ về truyền ngược. Ta có thể tách biểu thức trên thành 2 biểu thức: và . Thêm nữa, chúng ta biết cách tính đạo hàm của cả 2 biểu thức trên. Biểu thức là tích của và nên và là tổng của và nên . Tuy nhiên, chúng ta không cần thiết phải quan tâm về đạo hàm riêng theo - giá trị của không nói nên gì. Thay vào đó, chúng ta quan tâm đến đạo hàm riêng của theo . Quy tắc chuỗi cho chúng ta biết cách chính xác để nối các đạo hàm riêng lại với nhau thông qua phép nhân. Ví dụ, . Trong thực hành, đấy là một phép nhân thông thương của hai số. Xem ví dụ dưới đây
# set some inputs
x = -2; y = 5; z = -4
# perform the forward pass
q = x + y # q becomes 3
f = q * z # f becomes -12
# perform the backward pass (backpropagation) in reverse order:
# first backprop through f = q * z
dfdz = q # df/dz = q, so gradient on z becomes 3
dfdq = z # df/dq = z, so gradient on q becomes -4
# now backprop through q = x + y
dfdx = 1.0 * dfdq # dq/dx = 1. And the multiplication here is the chain rule!
dfdy = 1.0 * dfdq # dq/dy = 1
Kết thức trương trình, chỉ còn lại đạo hàm riêng theo các biến [dfdx,dfdy,dfdz], cho chúng ta biết độ nhạy cảm của hàm theo . Đó là ví dụ đơn giản nhất của lan truyền ngược. Chúng tôi muốn những kí hiệu súc tích cho ngắn gọn. Thay vì viết dfdq chúng ta có thể viết dq và luôn luôn giả định gradient( ma trận của đạo hàm riêng) ứng với kết quả cuối cùng.
Đây là phần đầu của bài dịch thuật toán lan truyền ngược- nói về đạo hàm riêng, gradient và chain rule. Trong phần 2 mình sẽ đi sâu vào thuật toán, cảm ơn các bạn đã đọc bài dịch của mình.Link gốc
All Rights Reserved