Xuất phát các phương trình truyền ngược lại


7

Hình ảnh hiển thị một lớp điển hình ở đâu đó trong mạng chuyển tiếp nguồn cấp dữ liệu:

nhập mô tả hình ảnh ở đây

ai(k) là giá trị kích hoạt của nơ ron trong lớp .ithkth

Wij(k) là trọng lượng kết nối neuron trong lớp đến neuron trong lớp.ithkthjth(k+1)th

zj(k+1) là giá trị hàm kích hoạt trước cho nơ ron trong lớp . Đôi khi điều này được gọi là "logit", khi được sử dụng với các hàm logistic.jth(k+1)th

Các phương trình chuyển tiếp thức ăn như sau:

zj(k+1)=iWij(k)ai(k)

mộtj(k+1)= =f(zj(k+1))

Để đơn giản, bias được bao gồm dưới dạng kích hoạt giả 1 và được sử dụng trong các lần lặp trên .Tôi

Tôi có thể rút ra các phương trình lan truyền ngược trên mạng thần kinh chuyển tiếp nguồn cấp dữ liệu, sử dụng quy tắc chuỗi và xác định các giá trị vô hướng riêng lẻ trong mạng (thực tế tôi thường làm điều này như một bài tập trên giấy chỉ để thực hành):

Cho dưới dạng độ dốc của hàm lỗi đối với đầu ra nơ ron.mộtj(k+1)= =Emộtj(k+1)

1.zj(k+1)= =Ezj(k+1)= =Emộtj(k+1)mộtj(k+1)zj(k+1)= =mộtj(k+1)f'(zj(k+1))

2.mộtTôi(k)= =EmộtTôi(k)= =ΣjEzj(k+1)zj(k+1)mộtTôi(k)= =Σjzj(k+1)WTôij(k)

3.WTôij(k)= =EWTôij(k)= =Ezj(k+1)zj(k+1)WTôij(k)= =zj(k+1)mộtTôi(k)

Càng xa càng tốt. Tuy nhiên, tốt hơn là nhớ lại các phương trình này bằng cách sử dụng ma trận và vectơ để biểu diễn các phần tử. Tôi có thể làm điều đó, nhưng tôi không thể tìm ra biểu diễn "nguyên gốc" của logic tương đương ở giữa các đạo hàm. Tôi có thể tìm ra các hình thức kết thúc nên bằng cách tham khảo lại phiên bản vô hướng và kiểm tra xem các phép nhân có kích thước chính xác hay không, nhưng tôi không biết tại sao tôi nên đặt các phương trình trong các hình thức đó.

Có thực sự là một cách để thể hiện đạo hàm dựa trên độ căng của lan truyền ngược, chỉ sử dụng các phép toán vectơ và ma trận, hay đó là vấn đề "khớp" nó với đạo hàm trên?

Sử dụng các vectơ cột , , và ma trận trọng số cộng với vectơ thiên vị , sau đó các hoạt động chuyển tiếp nguồn cấp dữ liệu là:một(k)z(k+1)một(k+1)W(k)b(k)

z(k+1)= =W(k)một(k)+b(k)

một(k+1)= =f(z(k+1))

Sau đó, nỗ lực của tôi tại phái sinh trông như thế này:

1.z(k+1)= =Ez(k+1)= =???= =một(k+1)f'(z(k+1))

2.một(k)= =Emột(k)= =???= =W(k)Tz(k+1)

3.W(k)= =EW(k)= =???= =z(k+1)một(k)T

Trong đó đại diện cho phép nhân phần tử. Tôi không bận tâm đến việc hiển thị phương trình cho sự thiên vị.

Tôi đã đặt ở đâu ??? Tôi không chắc chắn về cách chính xác để đi từ các hoạt động chuyển tiếp thức ăn và kiến ​​thức về phương trình vi phân tuyến tính để thiết lập các hình thức chính xác của phương trình? Tôi chỉ có thể viết ra một số thuật ngữ phái sinh một phần, nhưng không biết lý do tại sao một số nên sử dụng phép nhân phần tử, phép nhân ma trận khác và tại sao thứ tự nhân phải được hiển thị, ngoài việc rõ ràng cho kết quả chính xác cuối cùng .

Tôi thậm chí không chắc chắn nếu có một đạo hàm thuần túy, hay liệu tất cả chỉ là một "véc tơ" của bộ phương trình đầu tiên. Nhưng đại số của tôi không tốt lắm, và tôi rất muốn tìm hiểu một trong hai cách. Tôi cảm thấy nó có thể giúp tôi một số công việc thấu hiểu tốt trong ví dụ: TensorFlow nếu tôi hiểu rõ hơn về các hoạt động này bằng cách suy nghĩ nhiều hơn với đại số tenor.


Xin lỗi về ký hiệu ad-hoc / sai. Bây giờ tôi hiểu rằng được viết đúng hơn nhờ câu trả lời của Ehsan. Những gì tôi thực sự muốn có một biến tham chiếu ngắn để thay thế vào các phương trình, trái ngược với các đạo hàm riêng dài dòng.mộtj(k+1)mộtj(k+1)E


Thành thật mà nói, sử dụng các thành phần dễ dàng hơn nhiều so với sử dụng dạng ma trận / vectơ của các phương trình. Nhưng nếu bạn muốn lấy mẫu ma trận, bạn có thể muốn xem en.wikipedia.org/wiki/Matrix_calculus
J. O'Brien Antognini

@ J.O'BrienAntognini: Tôi nghĩ đó là những gì tôi muốn xem xét, vâng. Nếu điều này hóa ra là lý thuyết khám phá và không quá hữu ích để hiểu công việc thường ngày với TensorFlow, v.v., thì tôi nghĩ rằng tôi vẫn sẽ thấy nó thú vị.
Neil Slater

Câu trả lời:


3

Các vấn đề ký hiệu! Vấn đề bắt đầu từ:

Choaj(k+1)=Eaj(k+1)

Tôi không thích ký hiệu của bạn! Thực tế nó sai, trong ký hiệu toán học tiêu chuẩn. Ký hiệu đúng là

aj(k+1)E=Eaj(k+1)

Sau đó, độ dốc của lỗi một vectơ được định nghĩa làEa(k)

a(k)E=(Ea1(k),,Ean(k))T()

( lưu ý bên : Chúng tôi hoán vị vì quy ước chúng tôi biểu diễn các vectơ dưới dạng vectơ cột, nếu bạn muốn biểu diễn dưới dạng vectơ hàng thì các phương trình bạn muốn chứng minh sẽ thay đổi chuyển vị!)

do đó với quy tắc chuỗi,

Eai(k)=jEzj(k+1)zj(k+1)ai(k)=jEzj(k+1)Wij(k)

vìBây giờ, bạn có thể biểu thị ở trên dưới dạng sản phẩm vector (bên trong)zj(k+1)=iWij(k)ai(k).

Eai(k)=(W:,i(k))Tz(k+1)E
và xếp chúng vào chúng ta có thể biểu thị dưới dạng sản phẩm vector ma trận(),a(k)E

a(k)E=(W(k))Tz(k+1)E.

Tôi sẽ để phần còn lại cho bạn :)

Tính toán véc tơ nhiều hơn!

Chúng ta hãy sử dụng quy ước của vectơ như vectơ cột. Sau đó vàz(k+1)=(W(k))Ta(k)+b(k)

a(k)E=Ea(k)=z(k+1)a(k)Ez(k+1)=W(k)Ez(k+1)

bởi vì

z(k+1)a(k)=((W(k))Ta(k)+b(k))a(k)=((W(k))Ta(k))a(k)+b(k)a(k)

và vì không phụ thuộc vàob(k)a(k)=0b(k)a(k).

Như vậy

((W(k))Ta(k))a(k)=a(k)a(k)W(k)=W(k).

theo vector-by-vector (hàng thứ tám và thứ bảy, danh tính cột cuối cùng, tương ứng)


@NeilSlater Tôi đã thêm nhiều hơn. Tôi hy vọng nó sẽ giúp bây giờ.
Ehsan M. Kermani

Cảm ơn. Liên kết đến en.wikipedia.org/wiki/ đá là một yếu tố quan trọng đối với tôi.
Neil Slater
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.