Softmax layer ในเครือข่ายประสาท


43

ฉันพยายามที่จะเพิ่มเลเยอร์ softmax ให้กับเครือข่ายประสาทที่ได้รับการฝึกอบรมเกี่ยวกับ backpropagation ดังนั้นฉันจึงพยายามคำนวณการไล่ระดับสี

เอาต์พุต softmax คือโดยที่คือหมายเลขเซลล์ประสาทเอาท์พุท jhj=ezjezij

ถ้าฉันได้มันมาฉันก็จะได้

hjzj=hj(1hj)

คล้ายกับการถดถอยโลจิสติก อย่างไรก็ตามนี่เป็นสิ่งที่ผิดเนื่องจากการตรวจสอบการไล่ระดับสีของฉันล้มเหลว

ผมทำอะไรผิดหรือเปล่า? ฉันคิดว่าฉันต้องคำนวณ cross cross เช่นกัน (เช่น ) แต่ฉันไม่แน่ใจว่าจะทำอย่างไรและรักษามิติการไล่ระดับสีไว้ เหมือนกันดังนั้นจึงจะเหมาะสำหรับกระบวนการเผยแพร่กลับhjzk


3
คุณควรปรับปรุงชื่อคำถามของคุณเนื่องจากไม่ได้พูดถึงการเพิ่มเลเยอร์ softmax ทั่วไปให้กับ NN เนื่องจากคำถามของคุณมีความเฉพาะเจาะจงเกี่ยวกับวิธีตรวจสอบการไล่ระดับสีล้มเหลว ฉันขอแนะนำอย่างยิ่งให้เปลี่ยนชื่อเป็น "ทำไม backpropagation หยุดทำงานอย่างถูกต้องเมื่อฉันเพิ่มเลเยอร์ softmax ไปยัง Neural Network ของฉัน"
Charlie Parker

คำตอบ:


43

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

คุณได้รับการไล่ระดับสีในแนวทแยงของเมทริกซ์จาโคเบียนอย่างถูกต้องซึ่งคุณต้องบอกว่า

hizj=hi(1hj):i=j

และตามที่อะมีบากล่าวไว้คุณต้องได้รับการบันทึกในแนวทแยงของยาโคเบียนซึ่งเป็นผล

hizj=hihj:ij

คำจำกัดความของแนวคิดทั้งสองนี้สามารถรวมกันได้อย่างสะดวกโดยใช้โครงสร้างที่เรียกว่าKronecker Deltaดังนั้นคำจำกัดความของการไล่ระดับสีจะกลายเป็น

hizj=hi(δijhj)

ดังนั้น Jacobian จึงเป็นเมทริกซ์[J]ij=hi(δijhj)

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

[x]k=i=1hi,k

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

σl=Jσl+1

หากเลเยอร์ softmax เป็นเลเยอร์เอาท์พุทของคุณให้รวมเข้ากับโมเดล Cross-Entropy Cost ทำให้การคำนวณง่ายขึ้น

σl=ht

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


ด้วย , คือ ? (เพียงพยายามทำให้เข้าใจว่า 'การไล่ระดับสี' คืออะไรในกรณีนี้)σl=(σl,1,σl,2,...,σl,k)σl,j=Czj
Alexandre Holden Daly

ใช่ถูกต้องแล้ว
Mranz

มีใครบ้างที่โปรดอธิบายว่าเดลต้าตัวพิมพ์เล็กใน Delta Kronecker คืออะไรและจะคำนวณได้อย่างไร
danijar

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

14

อนุพันธ์ผิด มันควรจะเป็น,

hjzk=hjδkjhjhk

ตรวจสอบการคำนวณของคุณอีกครั้ง นอกจากนี้การแสดงออกที่ได้รับจากอะมีบาสำหรับการข้ามเอนโทรปีไม่ถูกต้องทั้งหมด สำหรับชุดตัวอย่างข้อมูลที่ดึงมาจากคลาสแตกต่างกันจะอ่านC

nk=1Ctknlnyk(xn)

โดยที่ superindex รันบนชุดตัวอย่างคือค่าขององค์ประกอบ k-th ของเป้าหมายสำหรับตัวอย่าง n-th นี่มันจะสันนิษฐานว่าคุณกำลังใช้รูปแบบที่ 1 ของการเข้ารหัส C, ที่อยู่,{n} ในกรณีเช่นนี้ค่า t ทั้งหมดจะเป็นศูนย์ยกเว้นส่วนประกอบที่เป็นตัวแทนของคลาสที่เกี่ยวข้อง t n ktkntkn

โปรดทราบว่าค่าคงที่ ดังนั้นการย่อฟังก์ชันนี้ให้เท่ากับการย่อขนาดให้เล็กที่สุด

nk=1Ctknlnyk(xn)+nk=1Ctknlntkn=nk=1Ctknlnyk(xn)tkn

ซึ่งมีข้อได้เปรียบที่จาโคเบียนใช้ในรูปแบบที่สะดวกมากกล่าวคือ

Ezj=hjtj

ฉันจะแนะนำให้คุณได้รับสำเนาของบิชอปของโครงข่ายประสาทเทียมสำหรับการจดจำรูปแบบ IMHO ยังคงเป็นหนังสือที่ดีที่สุดในเครือข่ายประสาท


14

แต่ละเอาต์พุตของ softmax ขึ้นอยู่กับอินพุตทั้งหมดดังนั้นการไล่ระดับสีจึงเป็นเมทริกซ์จาโคเบียนทั้งหมด คุณได้อย่างถูกต้องคำนวณแต่คุณยังต้องถ้าk ฉันเดาว่าถ้าคุณสามารถรับนิพจน์แรกได้คุณควรจะสามารถหานิพจน์ที่สองได้อย่างง่ายดายเช่นกันkhj=-hjhkjkjhj=hjzj=hj(1hj)khj=hjhkjk

ฉันไม่แน่ใจว่าคุณเห็นปัญหาอะไรกับการส่งสัญญาณย้อนกลับ: ในเลเยอร์ softmax คุณมีเอาต์พุตและอินพุตดังนั้นข้อผิดพลาดจากแต่ละเอาต์พุตควรแพร่กระจายไปยังแต่ละอินพุตและนั่นคือเหตุผลที่คุณต้องการยาโคบเบียนทั้งหมด ในทางกลับกันคุณมักจะมีฟังก์ชั่นต้นทุนที่เกี่ยวข้องกับเอาต์พุต softmax เช่นที่เป็นผลลัพธ์ที่คุณต้องการ (เมื่อคุณจำแนกประเภทแล้วบ่อยครั้งที่หนึ่งในนั้นเท่ากับ 1 , และอื่น ๆ ถึง 0) จากนั้นในความเป็นจริงคุณมีความสนใจในซึ่งสามารถคำนวณได้ด้วยกฎลูกโซ่ทำให้เกิดนิพจน์ที่เรียบร้อยและแน่นอนเวกเตอร์ (ไม่ใช่เมทริกซ์)j C = - j t jบันทึกh j , t j Cjj

C=jtjloghj,
tjCzj

1
ฉันจะพยายามอธิบายปัญหาของฉันให้ดีขึ้นตามตัวอย่างของบทเรียนนี้ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithmฉันต้องใช้องค์ประกอบที่ชาญฉลาดคูณน้ำหนักและเดลต้าด้วยอนุพันธ์ (ขั้นตอนที่ 3) ดังนั้นถ้าฉันมีเมทริกซ์จาโคเบียนเต็มขนาดก็ไม่พอดี ขอบคุณ
Ran

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

1
ฉันนำมันมาใช้กับเลเยอร์เชิงเส้นและแบบซิกม์ได้สำเร็จเพราะอนุพันธ์เป็นเวกเตอร์ดังนั้นฉันจึงไม่มีปัญหากับมิติ
Ran

ขออภัย Ran บางทีฉันแค่โง่ แต่ถ้าคุณมีเลเยอร์ sigmoid เชื่อมต่อกับเลเยอร์ก่อนหน้าอย่างสมบูรณ์แล้วเอาต์พุต (หรืออินพุต) ไปยังแต่ละหน่วยจะมีอนุพันธ์ที่เกี่ยวข้องกับการเชื่อมต่อขาเข้าจากแต่ละหน่วยบน เลเยอร์ก่อนหน้านั่นคืออนุพันธ์ทั้งหมดเป็นเมทริกซ์ 2D, n'est-ce pas? ฉันji
อะมีบาพูดว่า Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.