Đồ thị tính toán
Backpropagation được thực hiện trong các khuôn khổ học tập sâu như Tensorflow, Torch, Theano, v.v., bằng cách sử dụng đồ thị tính toán. Quan trọng hơn, hiểu được sự lan truyền ngược trên đồ thị tính toán kết hợp một số thuật toán khác nhau và các biến thể của nó như backprop theo thời gian và backprop với trọng số được chia sẻ. Một khi mọi thứ được chuyển đổi thành một đồ thị tính toán, chúng vẫn là một thuật toán giống nhau - chỉ là sự lan truyền ngược lại trên đồ thị tính toán.
Đồ thị tính toán là gì
Đồ thị tính toán được định nghĩa là đồ thị có hướng trong đó các nút tương ứng với các phép toán. Đồ thị tính toán là một cách thể hiện và đánh giá một biểu thức toán học.
Ví dụ, đây là một phương trình toán học đơn giản -
$$ p = x + y $$
Ta có thể vẽ đồ thị tính toán của phương trình trên như sau.
Đồ thị tính toán trên có một nút cộng (nút có dấu "+") với hai biến đầu vào x và y và một đầu ra q.
Hãy để chúng tôi lấy một ví dụ khác, phức tạp hơn một chút. Chúng ta có phương trình sau.
$$ g = \ left (x + y \ right) \ ast z $$
Phương trình trên được biểu diễn bằng đồ thị tính toán sau.
Đồ thị tính toán và sự lan truyền ngược
Đồ thị tính toán và lan truyền ngược, cả hai đều là những khái niệm cốt lõi quan trọng trong học sâu để đào tạo mạng nơ-ron.
Chuyển tiếp qua
Chuyển tiếp là thủ tục đánh giá giá trị của biểu thức toán học được biểu diễn bằng đồ thị tính toán. Thực hiện chuyển tiếp nghĩa là chúng ta đang chuyển giá trị từ các biến theo hướng thuận từ bên trái (đầu vào) sang bên phải nơi có đầu ra.
Chúng ta hãy xem xét một ví dụ bằng cách đưa ra một số giá trị cho tất cả các đầu vào. Giả sử, các giá trị sau đây được cung cấp cho tất cả các đầu vào.
$$ x = 1, y = 3, z = −3 $$
Bằng cách cung cấp các giá trị này cho các đầu vào, chúng ta có thể thực hiện chuyển tiếp và nhận các giá trị sau cho các đầu ra trên mỗi nút.
Đầu tiên, chúng ta sử dụng giá trị của x = 1 và y = 3, để có p = 4.
Sau đó, chúng ta sử dụng p = 4 và z = -3 để có g = -12. Chúng tôi đi từ trái sang phải, chuyển tiếp.
Mục tiêu của Backward Pass
Trong chuyển tiếp ngược lại, mục đích của chúng tôi là tính toán độ dốc cho mỗi đầu vào đối với đầu ra cuối cùng. Những gradient này rất cần thiết để đào tạo mạng nơ-ron bằng cách sử dụng gradient descent.
Ví dụ, chúng tôi mong muốn các gradient sau đây.
Gradient mong muốn
$$ \ frac {\ một phần x} {\ một phần f}, \ frac {\ một phần y} {\ một phần f}, \ frac {\ một phần z} {\ một phần f} $$
Chuyển ngược (backpropagation)
Chúng tôi bắt đầu chuyển ngược lại bằng cách tìm đạo hàm của đầu ra cuối cùng đối với đầu ra cuối cùng (chính nó!). Vì vậy, nó sẽ dẫn đến việc lấy ra danh tính và giá trị bằng một.
$$ \ frac {\ một phần g} {\ một phần g} = 1 $$
Biểu đồ tính toán của chúng tôi bây giờ trông như hình dưới đây -
Tiếp theo, chúng ta sẽ thực hiện thao tác lùi qua "*". Chúng tôi sẽ tính toán các gradient tại p và z. Vì g = p * z, chúng ta biết rằng -
$$ \ frac {\ một phần g} {\ một phần z} = p $$
$$ \ frac {\ một phần g} {\ một phần p} = z $$
Chúng ta đã biết các giá trị của z và p từ chuyển tiếp. Do đó, chúng tôi nhận được -
$$ \ frac {\ part g} {\ part z} = p = 4 $$
và
$$ \ frac {\ part g} {\ một phần p} = z = -3 $$
Chúng tôi muốn tính toán các gradient tại x và y -
$$ \ frac {\ part g} {\ một phần x}, \ frac {\ một phần g} {\ một phần y} $$
Tuy nhiên, chúng tôi muốn làm điều này một cách hiệu quả (mặc dù x và g chỉ cách nhau hai bước trong biểu đồ này, hãy tưởng tượng chúng thực sự cách xa nhau). Để tính toán các giá trị này một cách hiệu quả, chúng tôi sẽ sử dụng quy tắc chuỗi khác biệt. Từ quy tắc chuỗi, chúng tôi có -
$$ \ frac {\ một phần g} {\ một phần x} = \ frac {\ một phần g} {\ một phần p} \ ast \ frac {\ một phần p} {\ một phần x} $$
$$ \ frac {\ một phần g} {\ một phần y} = \ frac {\ một phần g} {\ một phần p} \ ast \ frac {\ một phần p} {\ một phần y} $$
Nhưng chúng ta đã biết dg / dp = -3, dp / dx và dp / dy rất dễ dàng vì p phụ thuộc trực tiếp vào x và y. Chúng tôi có -
$$ p = x + y \ Rightarrow \ frac {\ một phần x} {\ một phần p} = 1, \ frac {\ một phần y} {\ một phần p} = 1 $$
Do đó, chúng tôi nhận được -
$$ \ frac {\ 1 phần g} {\ 1 phần f} = \ frac {\ 1 phần g} {\ 1 phần p} \ ast \ frac {\ 1 phần p} {\ 1 phần x} = \ trái (-3 \ phải) .1 = -3 $$
Ngoài ra, đối với đầu vào y -
$$ \ frac {\ một phần g} {\ một phần y} = \ frac {\ một phần g} {\ một phần p} \ ast \ frac {\ một phần p} {\ một phần y} = \ left (-3 \ right) .1 = -3 $$
Lý do chính để làm điều này ngược lại là khi chúng ta phải tính toán gradient tại x, chúng ta chỉ sử dụng các giá trị đã được tính toán và dq / dx (đạo hàm của đầu ra nút đối với đầu vào của cùng một nút). Chúng tôi đã sử dụng thông tin địa phương để tính giá trị toàn cầu.
Các bước đào tạo mạng nơ-ron
Làm theo các bước sau để đào tạo mạng nơ-ron -
Đối với điểm dữ liệu x trong tập dữ liệu, chúng tôi chuyển tiếp với x là đầu vào và tính chi phí c là đầu ra.
Chúng tôi thực hiện chuyển lùi bắt đầu từ c và tính toán độ dốc cho tất cả các nút trong biểu đồ. Điều này bao gồm các nút đại diện cho trọng số mạng nơ-ron.
Sau đó, chúng tôi cập nhật trọng số bằng cách thực hiện W = W - tỷ lệ học tập * gradient.
Chúng tôi lặp lại quy trình này cho đến khi đáp ứng các tiêu chí dừng.