Backpropagation với Softmax / Cross Entropy


40

Tôi đang cố gắng hiểu làm thế nào backpropagation hoạt động cho lớp đầu ra softmax / cross-entropy.

Hàm lỗi entropy chéo là

E(t,o)=jtjlogoj

với và là mục tiêu và đầu ra tại nơron , tương ứng. Tổng là trên mỗi nơ ron trong lớp đầu ra. chính là kết quả của hàm softmax:o j o jtojoj

oj=softmax(zj)=ezjjezj

Một lần nữa, tổng là trên mỗi nơ ron trong lớp đầu ra và là đầu vào của nơ ron : jzjj

zj=iwijoi+b

Đó là tổng trên tất cả các nơ-ron ở lớp trước với đầu ra tương ứng và trọng lượng đối với nơ-ron cộng với một sai lệch .oiwijjb

Bây giờ, để cập nhật trọng số kết nối một nơron ở lớp đầu ra với một nơron ở lớp trước, tôi cần tính đạo hàm riêng của hàm lỗi bằng quy tắc chuỗi:wijji

Ewij=Eojojzjzjwij

với là đầu vào của nơ ron .zjj

Thuật ngữ cuối cùng khá đơn giản. Vì chỉ có một trọng số giữa và , nên đạo hàm là:ij

zjwij=oi

Thuật ngữ đầu tiên là đạo hàm của hàm lỗi đối với đầu ra :oj

Eoj=tjoj

Thuật ngữ giữa là đạo hàm của hàm softmax đối với đầu vào của nó khó hơn:zj

ojzj=zjezjjezj

Giả sử chúng ta có ba nơ ron đầu ra tương ứng với các lớp thì là:o b = s o f t m a x ( b )a,b,cob=softmax(b)

ob=ezbez=ezbeza+ezb+ezc

và đạo hàm của nó bằng cách sử dụng quy tắc thương:

=softmmộtx(b)-softmmộtx2(b)=ob-o 2 b =ob(1-ob)oj

obzb=ezbez(ezb)2(jez)2=ezbez(ezb)2(ez)2
=softmax(b)softmax2(b)=obob2=ob(1ob)
Quay lại thuật ngữ giữa cho backpropagation, điều này có nghĩa là:
ojzj=oj(1oj)

Đặt tất cả lại với nhau tôi nhận được

Ewij=tjojoj(1oj)oi=tj(1oj)oi

điều đó có nghĩa là, nếu mục tiêu cho lớp này là , thì tôi sẽ không cập nhật các trọng số cho việc này. Điều đó không có vẻ đúng.tj=0

Điều tra về điều này tôi thấy những người có hai biến thể cho dẫn xuất softmax, một biến thể trong đó và biến thể khác cho , như ở đây hoặc ở đây .tôi ji=jij

Nhưng tôi không thể hiểu điều này. Ngoài ra, tôi thậm chí không chắc đây có phải là nguyên nhân gây ra lỗi của mình không, đó là lý do tại sao tôi đăng tất cả các tính toán của mình. Tôi hy vọng ai đó có thể làm rõ tôi đang thiếu thứ gì hoặc sai.


Các liên kết bạn đã cung cấp đang tính toán đạo hàm liên quan đến đầu vào, trong khi bạn tính đạo hàm liên quan đến các trọng số.
Jenkar

Câu trả lời:


35

Lưu ý: Tôi không phải là một chuyên gia về backprop, nhưng bây giờ đã đọc một chút, tôi nghĩ rằng cảnh báo sau là phù hợp. Khi đọc bài báo hay cuốn sách trên lưới thần kinh, nó không phải là không phổ biến cho các dẫn xuất phải được viết bằng cách kết hợp các tiêu chuẩn ký hiệu tổng / index , ký hiệu ma trận , và ký hiệu đa-index (bao gồm kết hợp cả hai cuối cùng cho các dẫn xuất tensor-tensor ). Thông thường ý định là điều này nên được "hiểu từ ngữ cảnh", vì vậy bạn phải cẩn thận!

Tôi nhận thấy một vài sự không nhất quán trong dẫn xuất của bạn. Tôi thực sự không làm mạng lưới thần kinh, vì vậy những điều sau đây có thể không chính xác. Tuy nhiên, đây là cách tôi sẽ đi về vấn đề.

Trước tiên, bạn cần tính đến tổng của và bạn không thể giả sử mỗi thuật ngữ chỉ phụ thuộc vào một trọng số. Vì vậy, lấy độ dốc của đối với thành phần của , chúng ta có E k z E = - j t j log o jEEkz

E=jtjlogojEzk=jtjlogojzk

Sau đó, biểu thị là chúng ta có trong đó là Đồng bằng Kronecker . Sau đó, độ dốc của mẫu số softmax là cung cấp cho hoặc, mở rộng nhật ký Lưu ý rằng đạo hàm tương ứng với , một tùy ýoj

oj=1Ωezj,Ω=iezilogoj=zjlogΩ
logojzk=δjk1ΩΩzk
δjk
Ωzk=ieziδik=ezk
logojzk=δjkok
ojzk=oj(δjkok)
zkthành phần của , cung cấp thuật ngữ ( chỉ khi ).zδjk=1k=j

Vì vậy, độ dốc của với là trong đó là hằng số (đối với một vectơ cho ).Ez

Ezk=jtj(okδjk)=ok(jtj)tkEzk=okτtk
τ=jtjt

Điều này cho thấy sự khác biệt đầu tiên so với kết quả của bạn: không còn nhân . Lưu ý rằng đối với trường hợp điển hình trong đó là "một nóng", chúng tôi có (như đã lưu ý trong liên kết đầu tiên của bạn).tkoktτ=1

Một sự không nhất quán thứ hai, nếu tôi hiểu chính xác, đó là " " được nhập vào dường như không phải là " " được xuất ra từ softmax. Tôi sẽ nghĩ rằng nó có ý nghĩa hơn rằng điều này thực sự "trở lại" trong kiến ​​trúc mạng?ozo

Gọi vectơ này là , sau đó chúng ta có y

zk=iwikyi+bkzkwpq=iyiwikwpq=iyiδipδkq=δkqyp

Cuối cùng, để có được độ dốc của đối với ma trận , chúng tôi sử dụng quy tắc chuỗi đưa ra biểu thức cuối cùng -hot , tức là ) trong đó là đầu vào ở mức thấp nhất (ví dụ của bạn).Ew

Ewpq=kEzkzkwpq=k(okτtk)δkqyp=yp(oqτtq)
tτ=1
Ewij=yi(ojtj)
y

Vì vậy, điều này cho thấy sự khác biệt thứ hai so với kết quả của bạn: " " có lẽ nên từ cấp dưới , mà tôi gọi là , thay vì cấp trên (là ).oizyzo

Hy vọng điều này sẽ giúp. Liệu kết quả này có vẻ phù hợp hơn?

Cập nhật: Đáp lại truy vấn từ OP trong các bình luận, đây là phần mở rộng của bước đầu tiên. Đầu tiên, lưu ý rằng quy tắc chuỗi vectơ yêu cầu tổng kết (xem tại đây ). Thứ hai, để chắc chắn nhận được tất cả các thành phần gradient, bạn nên luôn luôn giới thiệu một chữ cái đăng ký mới cho thành phần trong mẫu số của đạo hàm riêng. Vì vậy, để viết đầy đủ gradient với quy tắc chuỗi đầy đủ, chúng ta có và vì vậy

Ewpq=iEoioiwpq
oiwpq=koizkzkwpq
Ewpq=i[Eoi(koizkzkwpq)]
Trong thực tế, tổng cộng giảm, vì bạn nhận được rất nhiều điều khoản . Mặc dù nó liên quan đến rất nhiều tổng kết và đăng ký có thể "thêm", sử dụng quy tắc chuỗi đầy đủ sẽ đảm bảo bạn luôn nhận được kết quả chính xác.δab

Tôi không chắc chắn làm thế nào cộng đồng "Backprop / AutoDiff" thực hiện những vấn đề này, nhưng tôi thấy bất cứ khi nào tôi cố gắng thực hiện các phím tắt, tôi có thể mắc lỗi. Vì vậy, tôi cuối cùng đã làm như ở đây, viết tất cả mọi thứ dưới dạng tổng kết với đăng ký đầy đủ, và luôn giới thiệu các đăng ký mới cho mỗi công cụ phái sinh. (Tương tự như câu trả lời của tôi ở đây ... Tôi hy vọng tôi ít nhất sẽ đưa ra kết quả chính xác vào cuối!)
GeoMatt22

Cá nhân tôi thấy rằng bạn viết tất cả mọi thứ xuống làm cho nó dễ dàng hơn để làm theo. Kết quả nhìn đúng với tôi.
Jenkar

Mặc dù tôi vẫn đang cố gắng để hiểu đầy đủ từng bước của bạn, tôi đã nhận được một số hiểu biết có giá trị giúp tôi với bức tranh tổng thể. Tôi đoán tôi cần đọc thêm về chủ đề phái sinh và tổng. Nhưng nhờ lời khuyên của bạn để tính đến tổng kết trong E, tôi đã nghĩ ra điều này:
micha

cho hai kết quả và với lỗi entropy chéo là Sau đó đạo hàm là phù hợp với kết quả của bạn ... tính đến việc bạn không có dấu trừ trước tổng lỗioj1=ezj1Ωoj1=ezj1Ω
Ω=ezj1+ezj2
E=(t1logoj1+t2logoj2)=(t1(zj1log(Ω))+t2(zj2log(Ω)))
E(zj1=(t1t1ezj1Ωt2ezj2Ω)=t1+oj1(t1+t2)
micha

Nhưng một câu hỏi nữa tôi có là: Thay vì , nói chung là những gì bạn đã giới thiệu với backpropagation, bạn đã tính: như muốn hủy bỏ . Tại sao cách này dẫn đến kết quả đúng?
Ewij=Eojojzjzjwij
Ewij=Ezjzjwij
oj
micha

12

Mặc dù câu trả lời của @ GeoMatt22 là chính xác, cá nhân tôi thấy rất hữu ích khi giảm vấn đề thành ví dụ về đồ chơi và vẽ một bức tranh:

Mô hình đồ họa.

Sau đó tôi đã xác định các hoạt động mỗi nút được tính toán, xử lý các 's và ' s như đầu vào cho một 'mạng' ( là một vector một nóng đại diện cho nhãn lớp của các điểm dữ liệu):hwt

L=t1logo1t2logo2
o1=exp(y1)exp(y1)+exp(y2)
o2=exp(y2)exp(y1)+exp(y2)
y1=w11h1+w21h2+w31h3
y2=w12h1+w22h2+w32h3

Nói rằng tôi muốn tính đạo hàm của tổn thất đối với . Tôi chỉ có thể sử dụng hình ảnh của mình để tìm lại đường đi từ mất đến trọng lượng mà tôi quan tâm (đã xóa cột thứ hai của 'cho rõ ràng):w21w

Mô hình đồ họa với đường dẫn ngược được tô sáng.

Sau đó, tôi chỉ có thể tính toán các dẫn xuất mong muốn. Lưu ý rằng có hai đường dẫn qua dẫn đến , vì vậy tôi cần tính tổng các đạo hàm đi qua từng đường dẫn đó.y1w21

Lo1=t1o1
Lo2=t2o2
o1y1=exp(y1)exp(y1)+exp(y2)(exp(y1)exp(y1)+exp(y2))2=o1(1o1)
o2y1=exp(y2)exp(y1)(exp(y1)+exp(y2))2=o2o1
y1w21=h2

Cuối cùng, đặt quy tắc chuỗi cùng nhau:

Lw21=Lo1o1y1y1w21+Lo2o2y1y1w21=t1o1[o1(1o1)]h2+t2o2(o2o1)h2=h2(t2o1t1+t1o1)=h2(o1(t1+t2)t1)=h2(o1t1)

Lưu ý rằng trong bước cuối cùng, vì vectơ là một vectơ nóng.t1+t2=1t


Đây là những gì cuối cùng đã xóa điều này cho tôi! Giải thích tuyệt vời và thanh lịch !!!!
SantoshGupta7

2
Tôi rất vui vì cả hai bạn đều thích và được hưởng lợi từ việc đọc bài viết của tôi! Nó cũng hữu ích cho tôi để viết nó ra và giải thích nó.
Vivek Subramanian

@VivekSubramanian có nên thay vào đó?
=t1o1[o1(1o1)]h2+t2o2(o2o1)h2
koryakinp

Bạn nói đúng - đó là một lỗi đánh máy! Tôi sẽ thay đổi.
Vivek Subramanian

Điều tôi không hiểu ở đây là bạn cũng gán các bản ghi (điểm không được tính) cho một số tế bào thần kinh. (o là các bản ghi mềm (dự đoán) và y là các bản ghi trong trường hợp của bạn). Tuy nhiên, đây không phải là trường hợp bình thường, phải không? Nhìn vào hình ảnh này (oOC1 là dự đoán và o_in1 là nhật ký) vậy làm thế nào có thể trong trường hợp này làm thế nào bạn có thể tìm đạo hàm riêng của o2 đối với y1?
ARAT

6

Thay cho tôi muốn một chữ cái có chữ hoa khác biệt với chữ thường của nó. Vì vậy, hãy để tôi thay thế . Ngoài ra, hãy sử dụng biến để chỉ định từ lớp trước.{oi},{yi}{pi}{oi}

Hãy là ma trận đường chéo có đường chéo bằng vector , tức là Sử dụng này biến ma trận mới và Frobenius Nội Sản phẩm chúng tôi có thể tính toán gradient của wrt . Yy

Y=Diag(y)
EW
z=Wp+bdz=dWpy=softmax(z)dy=(YyyT)dzE=t:log(y)dE=t:Y1dydE=t:Y1(YyyT)dz=t:(I1yT)dz=t:(I1yT)dWp=(y1TI)tpT:dW=((1Tt)ypTtpT):dWEW=(1Tt)ypTtpT

6

Đây là một trong những ghi chú rõ ràng và được viết tốt nhất mà tôi đã xem trên web giải thích về "tính toán các công cụ phái sinh trong thuật toán backpropagation với hàm mất entropy chéo" .


Trong pdf đã cho, làm thế nào mà phương trình 22 trở thành phương trình 23? Như cách thức Tổng kết (k! = I) có dấu âm. Nó không nên có một dấu hiệu tích cực? Giống như Summation(Fn)(For All K) = Fn(k=i) + Summation(Fn)(k!=i)nên được xảy ra theo sự hiểu biết của tôi.
faizan

1

Đây là một liên kết giải thích softmax và dẫn xuất của nó.

Nó giải thích lý do sử dụng i = j và i! = J.


Bạn nên cung cấp một câu trả lời độc lập, tối thiểu, trong trường hợp liên kết bị hỏng trong tương lai. Mặt khác, điều này có thể không còn giúp người dùng khác trong tương lai.
luchonacho

0

Các câu trả lời khác đã cung cấp cách tính chính xác cho đạo hàm, nhưng chúng không chỉ ra bạn đã sai ở đâu. Trong thực tế, luôn là 1 trong phương trình cuối cùng của bạn, vì bạn đã giả sử rằng lấy nút đó của mục tiêu 1 trong đầu ra của bạn; của các nút khác có các dạng hàm xác suất khác nhau, do đó dẫn đến các dạng đạo hàm khác nhau, vì vậy bây giờ bạn nên hiểu tại sao người khác lại đối xử với và khác nhau.tjojoji=jij

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.