Backpropagation ด้วย Softmax / Cross Entropy


40

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

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

E(t,o)=−∑jtjlog⁡oj

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

oj=softmax(zj)=ezj∑jezj

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

zj=∑iwijoi+b

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

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

∂E∂wij=∂E∂oj∂oj∂zj∂zj∂wij

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

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

∂zj∂wij=oi

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

∂E∂oj=−tjoj

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

∂oj∂zj=∂∂zjezj∑jezj

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

ob=ezb∑ez=ezbeza+ezb+ezc

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

=softmax(b)-softmax2(b)=ob-o 2 b =ob(1-ob)∂oj

∂ob∂zb=ezb∗∑ez−(ezb)2(∑jez)2=ezb∑ez−(ezb)2(∑ez)2
=softmax(b)−softmax2(b)=ob−ob2=ob(1−ob)
กลับไปที่เทอมกลางสำหรับการแพร่กระจายย้อนหลังสิ่งนี้หมายถึง:
∂oj∂zj=oj(1−oj)

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

∂E∂wij=−tjoj∗oj(1−oj)∗oi=−tj(1−oj)∗oi

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

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

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


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

คำตอบ:


35

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

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

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

E=−∑jtjlog⁡oj⟹∂E∂zk=−∑jtj∂log⁡oj∂zk

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

oj=1Ωezj,Ω=∑iezi⟹log⁡oj=zj−log⁡Ω
∂log⁡oj∂zk=δjk−1Ω∂Ω∂zk
δjk
∂Ω∂zk=∑ieziδik=ezk
∂log⁡oj∂zk=δjk−ok
∂oj∂zk=oj(δjk−ok)
zkส่วนประกอบของซึ่งให้คำว่า term (เฉพาะเมื่อ )zδjk=1k=j

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

∂E∂zk=∑jtj(ok−δjk)=ok(∑jtj)−tk⟹∂E∂zk=okτ−tk
τ=∑jtjt

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

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

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

zk=∑iwikyi+bk⟹∂zk∂wpq=∑iyi∂wik∂wpq=∑iyiδipδkq=δkqyp

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

∂E∂wpq=∑k∂E∂zk∂zk∂wpq=∑k(okτ−tk)δkqyp=yp(oqτ−tq)
τ = 1 ∂ Etτ=1y
∂E∂wij=yi(oj−tj)
y

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

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

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

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

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

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

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

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

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

12

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

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

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

L=−t1log⁡o1−t2log⁡o2
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

∂L∂o1=−t1o1
∂L∂o2=−t2o2
∂o1∂y1=exp⁡(y1)exp⁡(y1)+exp⁡(y2)−(exp⁡(y1)exp⁡(y1)+exp⁡(y2))2=o1(1−o1)
∂o2∂y1=−exp⁡(y2)exp⁡(y1)(exp⁡(y1)+exp⁡(y2))2=−o2o1
∂y1∂w21=h2

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

∂L∂w21=∂L∂o1∂o1∂y1∂y1∂w21+∂L∂o2∂o2∂y1∂y1∂w21=−t1o1[o1(1−o1)]h2+−t2o2(−o2o1)h2=h2(t2o1−t1+t1o1)=h2(o1(t1+t2)−t1)=h2(o1−t1)

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


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

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

@VivekSubramanian ควรเป็น แทนไหม
=−t1o1[o1(1−o1)]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=(Y−yyT)dzE=−t:log⁡(y)dE=−t:Y−1dydE=−t:Y−1(Y−yyT)dz=−t:(I−1yT)dz=−t:(I−1yT)dWp=(y1T−I)tpT:dW=((1Tt)ypT−tpT):dW∂E∂W=(1Tt)ypT−tpT

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=ji≠j

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