Backpropagation ด้วย Softmax / Cross Entropy


40

ฉันพยายามที่จะเข้าใจวิธีการทำงานของ backpropagation สำหรับเลเยอร์เอาต์พุต softmax / cross-entropy

ฟังก์ชันข้อผิดพลาดข้ามเอนโทรปีคือ

E(t,o)=jtjlogoj

ด้วยและเป็นเป้าหมายและเอาต์พุตที่เซลล์ประสาทตามลำดับ ผลรวมอยู่เหนือเซลล์ประสาทแต่ละเซลล์ในชั้นเอาต์พุต นั้นเป็นผลมาจากฟังก์ชั่น softmax:tojoj

oj=softmax(zj)=ezjjezj

อีกครั้งผลรวมจะอยู่เหนือแต่ละเซลล์ประสาทในเลเยอร์เอาต์พุตและคืออินพุตไปยังเซลล์ประสาท :zjj

zj=iwijoi+b

นั่นคือผลรวมกว่าเซลล์ทั้งหมดในชั้นก่อนหน้านี้กับการส่งออกของพวกเขาที่สอดคล้องกันและน้ำหนักต่อเซลล์ประสาทบวกอคติขoiwijjb

ตอนนี้เพื่ออัปเดตน้ำหนักที่เชื่อมต่อเซลล์ประสาทในชั้นเลเยอร์เอาท์พุทกับเซลล์ประสาทในชั้นก่อนหน้าฉันต้องคำนวณอนุพันธ์บางส่วนของฟังก์ชันข้อผิดพลาดโดยใช้กฎลูกโซ่:wijji

Ewij=Eojojzjzjwij

กับเป็น input เพื่อเซลล์ประสาทญzjj

เทอมสุดท้ายค่อนข้างเรียบง่าย เนื่องจากมีน้ำหนักเพียงหนึ่งเดียวระหว่างและอนุพันธ์คือ:ij

zjwij=oi

เทอมแรกคือการสืบทอดของฟังก์ชันข้อผิดพลาดเกี่ยวกับเอาต์พุต :oj

Eoj=tjoj

ระยะกลางคือการได้มาของฟังก์ชั่น softmax ที่เกี่ยวกับอินพุตของมันนั้นยากขึ้น:zj

ojzj=zjezjjezj

สมมติว่าเรามีเซลล์ประสาทเอาต์พุตสามเซลล์ที่สอดคล้องกับคลาสจากนั้นคือ:o b = s o f t m a x ( b )a,b,cob=softmax(b)

ob=ezbez=ezbeza+ezb+ezc

และการสืบทอดโดยใช้กฎความฉลาดทาง:

=softmax(b)-softmax2(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)
กลับไปที่เทอมกลางสำหรับการแพร่กระจายย้อนหลังสิ่งนี้หมายถึง:
ojzj=oj(1oj)

นำมารวมกันฉันได้

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

ซึ่งหมายความว่าหากเป้าหมายของคลาสนี้คือดังนั้นฉันจะไม่อัปเดตตุ้มน้ำหนักสำหรับสิ่งนี้ นั่นไม่ได้เสียงที่ถูกต้องtj=0

การตรวจสอบเกี่ยวกับเรื่องนี้ผมพบว่าคนที่มีสองสายพันธุ์สำหรับรากศัพท์ softmax หนึ่งที่และอื่น ๆ สำหรับเช่นที่นี่หรือที่นี่ฉันji=jij

แต่ฉันไม่สามารถเข้าใจได้จากเรื่องนี้ นอกจากนี้ฉันไม่แน่ใจด้วยซ้ำว่านี่เป็นสาเหตุของข้อผิดพลาดของฉันซึ่งเป็นสาเหตุที่ฉันโพสต์การคำนวณทั้งหมดของฉัน ฉันหวังว่าบางคนสามารถชี้แจงให้ฉันทราบว่าฉันกำลังพลาดบางสิ่งบางอย่างหรือผิดไป


ลิงก์ที่คุณให้ไว้กำลังคำนวณอนุพันธ์เทียบกับอินพุตในขณะที่คุณกำลังคำนวณอนุพันธ์เทียบกับน้ำหนัก
Jenkar

คำตอบ:


35

หมายเหตุ:ฉันไม่ใช่ผู้เชี่ยวชาญด้าน backprop แต่ตอนนี้ฉันได้อ่านนิดหน่อยฉันคิดว่าข้อควรระวังต่อไปนี้เหมาะสม เมื่ออ่านเอกสารหรือหนังสือเกี่ยวกับประสาทมันไม่ได้เป็นเรื่องแปลกสำหรับสัญญาซื้อขายล่วงหน้าที่จะเขียนโดยใช้การผสมผสานของมาตรฐานสัญกรณ์บวก / ดัชนี , สัญกรณ์เมทริกซ์และสัญกรณ์หลายดัชนี (รวมถึงไฮบริดของสุดท้ายสองอนุพันธ์เมตริกซ์-เมตริกซ์ ) โดยทั่วไปแล้วความตั้งใจคือสิ่งนี้ควร "เข้าใจจากบริบท" ดังนั้นคุณต้องระวัง!

ฉันสังเกตเห็นความไม่สอดคล้องกันสองอย่างในที่มาของคุณ ฉันไม่ได้ทำโครงข่ายประสาทเทียมจริงๆดังนั้นสิ่งต่อไปนี้อาจไม่ถูกต้อง อย่างไรก็ตามนี่คือวิธีที่ฉันจะไปเกี่ยวกับปัญหา

ขั้นแรกคุณต้องคำนึงถึงผลรวมในและคุณไม่สามารถสรุปได้ว่าแต่ละคำขึ้นอยู่กับน้ำหนักเพียงหนึ่งเดียว ดังนั้นการไล่ระดับสีของเทียบกับองค์ประกอบของเรามี EEkz

E=jtjlogojEzk=jtjlogojzk

จากนั้นแสดงเป็น เรามี โดยที่คือKronecker เดลต้า จากนั้นการไล่ระดับสีของ softmax-denominator คือ ซึ่งให้ หรือขยาย log โปรดทราบว่าอนุพันธ์เกี่ยวข้องกับการโดยพลการoj

oj=1Ωezj,Ω=iezilogoj=zjlogΩ
logojzk=δjk1ΩΩzk
δjk
Ωzk=ieziδik=ezk
logojzk=δjkok
ojzk=oj(δjkok)
zkส่วนประกอบของซึ่งให้คำว่า term (เฉพาะเมื่อ )zδjk=1k=j

ดังนั้นการไล่ระดับสีของเทียบกับจึงเป็น โดยที่ เป็นค่าคงที่ (สำหรับเวกเตอร์กำหนด)Ez

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

นี้แสดงให้เห็นความแตกต่างครั้งแรกจากผลคุณ:ไม่มีอีกต่อไปคูณo_kโปรดทราบว่าสำหรับกรณีทั่วไปที่คือ "one-hot" เรามี (ดังที่ระบุไว้ในลิงก์แรกของคุณ)tkoktτ=1

ความไม่ลงรอยกันครั้งที่สองถ้าฉันเข้าใจอย่างถูกต้องคือ " " ที่ป้อนไปยังดูเหมือนว่าไม่น่าจะเป็น " " ที่ส่งออกจาก softmax ฉันคิดว่ามันสมเหตุสมผลดีกว่าที่จริงแล้วนี่คือ "ถอยห่าง" ในสถาปัตยกรรมเครือข่ายใช่หรือไม่ozo

การเรียกเวกเตอร์นี้เรามี y

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

ในที่สุดเพื่อให้การไล่ระดับสีของเทียบกับน้ำหนักเมทริกซ์เราใช้กฎลูกโซ่ ให้การแสดงออกสุดท้าย (สมมติหนึ่ง -hot , คือ ) โดยที่คืออินพุตในระดับต่ำสุด (ตัวอย่างของคุณ)Ew

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

ดังนั้นสิ่งนี้แสดงให้เห็นถึงความแตกต่างที่สองจากผลลัพธ์ของคุณ: " " น่าจะมาจากระดับที่ต่ำกว่าซึ่งฉันเรียกว่ามากกว่าระดับที่สูงกว่า (ซึ่งก็คือ )oizyzo

หวังว่านี่จะช่วยได้ ผลลัพธ์นี้ดูเหมือนสอดคล้องกันมากขึ้นหรือไม่

อัปเดต:ในการตอบกลับข้อความค้นหาจาก OP ในความคิดเห็นนี่คือการขยายตัวของขั้นตอนแรก ก่อนอื่นโปรดทราบว่ากฎลูกโซ่เวกเตอร์ต้องมีการสรุป (ดูที่นี่ ) ประการที่สองเพื่อให้แน่ใจว่าได้รับส่วนประกอบการไล่ระดับสีทั้งหมดคุณควรแนะนำตัวอักษรห้อยใหม่สำหรับองค์ประกอบในตัวหารของอนุพันธ์บางส่วน ดังนั้นเพื่อเขียนการไล่ระดับสีแบบเต็มด้วยกฎลูกโซ่ทั้งหมดเรามี และ ดังนั้น

Ewpq=iEoioiwpq
oiwpq=koizkzkwpq
δab
Ewpq=i[Eoi(koizkzkwpq)]
ในทางปฏิบัติการลดยอดรวมทั้งหมดเนื่องจากคุณได้รับมาก แม้ว่ามันจะเกี่ยวข้องกับการสรุปและตัวเสริม "พิเศษ" จำนวนมากการใช้กฎลูกโซ่แบบเต็มจะช่วยให้คุณได้รับผลลัพธ์ที่ถูกต้องเสมอδab

ฉันไม่แน่ใจว่าชุมชน "Backprop / AutoDiff" ทำปัญหาเหล่านี้อย่างไร แต่ฉันพบว่าเมื่อใดก็ตามที่ฉันพยายามใช้ทางลัดฉันต้องรับผิดชอบต่อข้อผิดพลาด ดังนั้นฉันเลยลงเอยทำที่นี่เขียนทุกอย่างในรูปของการสรุปด้วยการห้อยเต็มและแนะนำการห้อยใหม่สำหรับอนุพันธ์ทุกตัว (คล้ายกับคำตอบของฉันที่นี่ ... ฉันหวังว่าอย่างน้อยฉันก็ให้ผลลัพธ์ที่ถูกต้องในที่สุด!)
GeoMatt22

โดยส่วนตัวแล้วฉันพบว่าการเขียนทุกอย่างลงไปนั้นทำให้ง่ายต่อการติดตามมากขึ้น ผลลัพธ์ดูถูกต้องสำหรับฉัน
Jenkar

แม้ว่าฉันจะยังคงพยายามที่จะเข้าใจแต่ละขั้นตอนของคุณอย่างเต็มที่ แต่ฉันก็ได้รับข้อมูลเชิงลึกที่มีค่าซึ่งช่วยให้ฉันเห็นภาพรวม ฉันเดาว่าฉันต้องอ่านเพิ่มเติมในหัวข้อของการสืบทอดและผลรวม แต่จากคำแนะนำของคุณที่จะคำนึงถึงผลรวมใน E ฉันจึงได้สิ่งนี้:
micha

สำหรับเอาต์พุตสองรายการและมีข้อผิดพลาดข้ามของเอนโทรปีคือ จากนั้นอนุพันธ์คือ ที่สอดคล้องกับผลลัพธ์ของคุณ ... โดยคำนึงถึงว่าคุณไม่มีเครื่องหมายลบก่อนหน้าข้อผิดพลาดoj1=ezj1Ωoj1=ezj1Ω
Ω=ezj1+ezj2
E=(t1logoj1+t2logoj2)=(t1(zj1log(Ω))+t2(zj2log(Ω)))
E(zj1=(t1t1ezj1Ωt2ezj2Ω)=t1+oj1(t1+t2)
มิชา

แต่คำถามเพิ่มเติมที่ฉันมีคือ: แทนที่จะ ซึ่งโดยทั่วไปแล้วสิ่งที่คุณแนะนำด้วย backpropagation คุณคำนวณ:เหมือนจะยกเลิกการออกo_j ทำไมวิธีนี้นำไปสู่ผลลัพธ์ที่ถูกต้อง?
Ewij=Eojojzjzjwij
Ewij=Ezjzjwij
oj
มิชา

12

ในขณะที่คำตอบของ @ GeoMatt22 นั้นถูกต้องฉันพบว่ามันมีประโยชน์มากในการลดปัญหาลงในตัวอย่างของเล่นและวาดภาพ:

ตัวแบบกราฟิก

ฉันกำหนดการดำเนินการของแต่ละโหนดว่ากำลังประมวลผลโดยปฏิบัติ 's และ ' s เป็นอินพุตไปยัง "เครือข่าย" (เป็นเวกเตอร์หนึ่งอันที่เป็นตัวแทนของคลาสป้ายของจุดข้อมูล):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

บอกว่าผมต้องการที่จะคำนวณอนุพันธ์ของการสูญเสียที่เกี่ยวกับ{21} ฉันสามารถใช้รูปภาพของฉันเพื่อติดตามเส้นทางกลับจากการสูญเสียน้ำหนักที่ฉันสนใจ (ลบคอลัมน์ที่สองของเพื่อความชัดเจน):w21w

โมเดลกราฟิกที่มีไฮไลต์พา ธ ย้อนกลับ

จากนั้นฉันก็สามารถคำนวณอนุพันธ์ที่ต้องการ โปรดทราบว่ามีสองเส้นทางผ่านที่นำไปสู่ดังนั้นฉันจึงต้องรวมอนุพันธ์ที่ผ่านแต่ละเส้นทาง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

ในที่สุดให้วางกฎลูกโซ่เข้าด้วยกัน:

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

โปรดทราบว่าในขั้นตอนสุดท้ายเพราะเวกเตอร์เป็นเวกเตอร์ที่ร้อนแรงt1+t2=1t


นี่คือสิ่งที่ในที่สุดก็เคลียร์สำหรับฉัน! คำอธิบายที่ยอดเยี่ยมและสง่างาม !!!!
SantoshGupta7

2
ฉันดีใจที่คุณทั้งสนุกและได้รับประโยชน์จากการอ่านโพสต์ของฉัน! มันก็มีประโยชน์สำหรับฉันที่จะเขียนมันออกมาและอธิบายมัน
Vivek Subramanian

@VivekSubramanian ควรเป็น แทนไหม
=t1o1[o1(1o1)]h2+t2o2(o2o1)h2
koryakinp

คุณพูดถูก - มันพิมพ์ผิด! ฉันจะทำการเปลี่ยนแปลง
Vivek Subramanian

สิ่งที่ฉันไม่เข้าใจที่นี่ก็คือคุณยังกำหนดบันทึก (คะแนนไม่ได้สัดส่วน) ให้กับเซลล์ประสาทบางส่วน (o คือการบันทึก softmaxed (การคาดการณ์) และ y เป็นการบันทึกในกรณีของคุณ) อย่างไรก็ตามนี่ไม่ใช่กรณีปกติใช่ไหม? ดูรูปนี้ (o_out1 เป็นคำทำนายและ o_in1 เป็น logits) ดังนั้นเป็นไปได้อย่างไรในกรณีนี้คุณจะหาอนุพันธ์บางส่วนของ o2 เทียบกับ y1 ได้อย่างไร?
ARAT

6

แทนที่ฉันต้องการจดหมายที่มีตัวพิมพ์ใหญ่แตกต่างจากภาพโดยใช้ตัวพิมพ์เล็ก เพื่อให้ฉันแทน\} นอกจากนี้ลองใช้ตัวแปรเพื่อกำหนดจากเลเยอร์ก่อนหน้า{oi},{yi}{pi}{oi}

Letเป็นเมทริกซ์ทแยงมุมซึ่งเท่ากับเวกเตอร์เส้นทแยงมุมคือ นี้โดยใช้ตัวแปรเมทริกซ์ใหม่และFrobenius Inner สินค้าเราสามารถคำนวณการไล่ระดับสีของ WRT W 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

นี่คือหนึ่งในบันทึกที่สะอาดและเขียนได้ดีที่ผมมาในเว็บที่อธิบายเกี่ยวกับ"การคำนวณของสัญญาซื้อขายล่วงหน้าในขั้นตอนวิธีการแพร่กระจายย้อนกลับที่มีฟังก์ชั่นการสูญเสียข้ามเอนโทรปี"


ใน pdf ที่กำหนดสมการ 22 กลายเป็นสมการ 23 ได้อย่างไร เช่นเดียวกับที่การสรุป (k! = i) ได้รับเครื่องหมายลบ มันจะไม่ได้รับสัญญาณบวกหรือไม่? เช่นเดียวกับSummation(Fn)(For All K) = Fn(k=i) + Summation(Fn)(k!=i)ที่ควรจะเกิดขึ้นตามความเข้าใจของผม
faizan

1

นี่คือลิงค์อธิบาย softmax และอนุพันธ์ของมัน

มันอธิบายถึงเหตุผลในการใช้ i = j และ i! = j


ขอแนะนำให้ระบุคำตอบแบบสแตนด์อะโลนเพียงเล็กน้อยในกรณีที่ลิงก์เสียในอนาคต ไม่เช่นนั้นอาจไม่ช่วยผู้ใช้รายอื่นในอนาคต
luchonacho

0

คำตอบอื่น ๆ ได้ให้วิธีที่ถูกต้องในการคำนวณอนุพันธ์ แต่พวกเขาไม่ได้ชี้ให้เห็นว่าคุณผิดไปไหน ในความเป็นจริงเป็น 1 เสมอในสมการสุดท้ายของคุณทำให้คุณสันนิษฐานว่าใช้โหนดของเป้าหมาย 1 ในผลลัพธ์ของคุณ ของโหนดอื่นมีรูปแบบของฟังก์ชันความน่าจะเป็นที่แตกต่างกันดังนั้นจึงนำไปสู่รูปแบบต่าง ๆ ของอนุพันธ์ดังนั้นคุณควรเข้าใจว่าทำไมคนอื่น ๆ จึงปฏิบัติต่อและแตกต่างกันtjojoji=jij

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.