Nhảy tới nội dung

Đạo hàm của tất cả các lớp

Đạo hàm theo các tham số riêng lẻ

Trong bước lan truyền thuận, với giá trị đầu vào x, đầu ra của mạng neural được tính toán. Trong quá trình này, các giá trị kích hoạt ala^l tại mỗi lớp được lưu lại để sử dụng sau.

Với mỗi đơn vị j trong lớp đầu ra, tính toán sai số:

ejL=JzjLe^{L}_j = \frac{\partial J}{\partial z^{L}_j}

Từ đây, chúng ta có thể suy ra:

JwijL=aiL1ejL\frac{\partial J}{\partial w^{L}_{ij}} = a^{L-1}_i e^{L}_j JbjL=ejL\frac{\partial J}{\partial b^{L}_j} = e^{L}_j

Với các lớp l=L1,L2,,1l = L-1, L-2, \ldots, 1, chúng ta tính toán:

ejl=(wjl+1:el+1)f(zjl)e^{l}_j = \left( w^{l+1}_j : e^{l+1} \right) f'(z^{l}_j)

Cập nhật đạo hàm cho mỗi tham số sẽ là:

Jwijl=ail1ejl\frac{\partial J}{\partial w^{l}_{ij}} = a^{l-1}_i e^{l}_j Jbjl=ejl\frac{\partial J}{\partial b^{l}_j} = e^{l}_j

Đạo hàm theo các ma trận

Việc tính toán đạo hàm cho từng tham số riêng lẻ như đã mô tả ở trên rất dễ để hiểu. Tuy nhiên, trong thực tế, chúng ta cần tối ưu hóa các phép tính bằng cách diễn tả chúng dưới dạng vector và ma trận để tăng tốc độ thuật toán. Ta định nghĩa:

el=[e1le2ledll]Rdl×1e^{l} = \begin{bmatrix} e^{l}_1 \\ e^{l}_2 \\ \vdots \\ e^{l}_{d^{l}} \end{bmatrix} \in \mathbb{R}^{d^{l} \times 1}

Bước lan truyền thuận: Với giá trị đầu vào xx được cho, tính toán đầu ra của mạng đồng thời lưu lại các giá trị kích hoạt ala^{l} tại mỗi lớp.

Với lớp đầu ra, tính toán:

eL=JzLe^{L} = \frac{\partial J}{\partial z^{L}}

Từ đây, ta suy ra:

JWL=aL1(eL)T\frac{\partial J}{\partial W^{L}} = a^{L-1} (e^{L})^T JbL=eL\frac{\partial J}{\partial b^{L}} = e^{L}

Với các lớp l=L1,L2,,1l = L-1, L-2, \ldots, 1:

el=(Wl+1el+1)f(zl)e^{l} = \left( W^{l+1} e^{l+1} \right) \odot f'(z^{l})

Ở đây, \odot là tích Hadamard (tích từng phần tử), nghĩa là mỗi thành phần của hai vector sẽ được nhân với nhau để tạo ra một vector kết quả.

Cập nhật đạo hàm cho các ma trận trọng số và vector bias

JWl=al1(el)T\frac{\partial J}{\partial W^{l}} = a^{l-1} (e^{l})^T Jbl=el\frac{\partial J}{\partial b^{l}} = e^{l}

Lưu ý: Biểu thức đạo hàm ở dòng trước có thể gây ra câu hỏi: tại sao lại là aL1(eL)Ta^{L-1} (e^{L})^T mà không phải là (aL1)TeL(a^{L-1})^T e^{L} hoặc cách khác? Một quy tắc quan trọng cần nhớ là kích thước của hai ma trận ở phía bên phải phải khớp nhau. Kiểm tra điều này cho thấy rằng vế trái biểu diễn đạo hàm với ma trận WLW^{L}, có kích thước RdL1×dL\mathbb{R}^{d^{L-1} \times d^{L}}. Do đó, eLRdL×1e^{L} \in \mathbb{R}^{d^{L} \times 1}aL1RdL1×1a^{L-1} \in \mathbb{R}^{d^{L-1} \times 1} có nghĩa là biểu thức đúng phải là aL1(eL)Ta^{L-1} (e^{L})^T. Hơn nữa, đạo hàm của một hàm số có giá trị vô hướng với một ma trận sẽ có kích thước tương ứng với ma trận đó.

Lan truyền ngược cho Gradient Descent theo Mini-Batch

Điều gì xảy ra khi chúng ta muốn triển khai Gradient Descent theo mini-batch? Trên thực tế, Mini-batch Gradient Descent là phương pháp được sử dụng phổ biến nhất. Khi tập dữ liệu nhỏ, Gradient Descent theo batch có thể được áp dụng trực tiếp.

Trong trường hợp này, cặp (X,Y)(X, Y) sẽ ở dạng ma trận. Giả sử rằng mỗi lần tính toán xử lý NN điểm dữ liệu. Khi đó, ta có:

XRd0×N,YRdL×NX \in \mathbb{R}^{d^{0} \times N}, \quad Y \in \mathbb{R}^{d^{L} \times N}

trong đó d0=dd^{0} = d là kích thước của dữ liệu đầu vào (không bao gồm bias).

Do đó, các giá trị kích hoạt sau mỗi lớp sẽ có dạng:

AlRdl×N,ElRdl×NA^{l} \in \mathbb{R}^{d^{l} \times N}, \quad E^{l} \in \mathbb{R}^{d^{l} \times N}

Ta có thể suy ra các công thức cập nhật như sau.

Bước lan truyền xuôi: Với toàn bộ tập dữ liệu (batch) hoặc một mini-batch của đầu vào XX, tính toán đầu ra của mạng đồng thời lưu lại các giá trị kích hoạt AlA^{l} tại mỗi lớp. Mỗi cột của AlA^{l} tương ứng với một điểm dữ liệu trong XX.

Với lớp đầu ra, tính toán:

EL=JZLE^{L} = \frac{\partial J}{\partial Z^{L}}

Từ đây, ta suy ra:

JWL=AL1(EL)T\frac{\partial J}{\partial W^{L}} = A^{L-1} (E^{L})^T JbL=n=1NenL\frac{\partial J}{\partial b^{L}} = \sum_{n=1}^{N} e^{L}_n

Với các lớp l=L1,L2,,1l = L-1, L-2, \ldots, 1:

El=(Wl+1El+1)f(Zl)E^{l} = \left( W^{l+1} E^{l+1} \right) \odot f'(Z^{l})

Ở đây, \odot chỉ tích từng phần tử, nghĩa là mỗi phần tử của hai ma trận sẽ được nhân để tạo ra ma trận kết quả.

Cập nhật đạo hàm cho các ma trận trọng số và vector bias:

JWl=Al1(El)T\frac{\partial J}{\partial W^{l}} = A^{l-1} (E^{l})^T Jbl=n=1Nenl\frac{\partial J}{\partial b^{l}} = \sum_{n=1}^{N} e^{l}_n

Phương pháp lan truyền ngược có cấu trúc này, dù là cho Gradient Descent ngẫu nhiên hay theo batch, không chỉ nâng cao sự hiểu biết mà còn tối ưu hóa hiệu quả tính toán trong việc huấn luyện mạng neural.

Backpropagation