Tôi cảm thấy hơi tệ khi cung cấp câu trả lời của riêng mình cho điều này bởi vì nó được nắm bắt khá tốt bởi amip và juampa, ngoại trừ có thể là trực giác cuối cùng về cách Jacobian có thể được giảm trở lại thành một vectơ.
Bạn đã dẫn xuất chính xác độ dốc của đường chéo của ma trận Jacobian, nghĩa là
∂hi∂zj=hi(1−hj):i=j
và như amip đã nói, bạn cũng phải rút ra các mục chéo của Jacobian, mang lại
∂hi∂zj=−hihj:i≠j
Hai định nghĩa khái niệm này có thể được kết hợp thuận tiện bằng cách sử dụng một cấu trúc được gọi là Delta Kronecker , do đó định nghĩa của gradient trở thành
∂hi∂zj=hi(δij−hj)
Vì vậy, Jacobian là một ma trận vuông[J]ij=hi(δij−hj)
Tất cả các thông tin cho đến thời điểm này đã được bao phủ bởi amip và juampa. Tất nhiên, vấn đề là chúng ta cần phải nhận được các lỗi đầu vào từ các lỗi đầu ra đã được tính toán. Vì độ dốc của lỗi đầu ra phụ thuộc vào tất cả các đầu vào, nên độ dốc của đầu vào là∇hixi
[∇x]k=∑i=1∇hi,k
Với ma trận Jacobian được định nghĩa ở trên, điều này được triển khai một cách tầm thường như là sản phẩm của ma trận và vectơ lỗi đầu ra:
σl→=Jσl+1→
Nếu lớp softmax là lớp đầu ra của bạn, thì việc kết hợp nó với mô hình chi phí entropy chéo sẽ đơn giản hóa việc tính toán thành đơn giản
σl→=h⃗ −t⃗
trong đó là vectơ của nhãn và là đầu ra từ hàm softmax. Không chỉ là hình thức đơn giản hóa thuận tiện, nó còn cực kỳ hữu ích từ quan điểm ổn định số.t⃗ h⃗