คำอธิบายการสูญเสียข้ามเอนโทรปี


35

สมมติว่าฉันสร้าง NN สำหรับการจัดหมวดหมู่ ชั้นสุดท้ายเป็นชั้นหนาแน่นด้วยการเปิดใช้งาน softmax ฉันมีห้าคลาสที่แตกต่างกันเพื่อจัดประเภท สมมติว่าสำหรับการฝึกอบรมเช่นเดียวtrue labelคือในขณะที่การคาดการณ์จะเป็น[1 0 0 0 0] [0.1 0.5 0.1 0.1 0.2]ฉันจะคำนวณการสูญเสียเอนโทรปีของตัวอย่างนี้ได้อย่างไร

คำตอบ:


50

เอนโทรปีข้ามสูตรจะใช้เวลาในสองแจกแจง , การกระจายความจริงและ , การกระจายประมาณกว่ากำหนดตัวแปรต่อเนื่องและจะได้รับจากp(x)q(x)x

H(p,q)=xp(x)log(q(x))

สำหรับเครือข่ายนิวรัลการคำนวณนั้นขึ้นอยู่กับสิ่งต่อไปนี้:

  • ใช้เลเยอร์แบบไหน

  • การเปิดใช้งานแบบใดถึงแม้ว่าการเปิดใช้งานจำนวนมากจะไม่สามารถใช้งานร่วมกับการคำนวณได้เนื่องจากเอาต์พุตของพวกเขาไม่สามารถตีความได้ว่าเป็นความน่าจะเป็น (เช่นผลลัพธ์ของพวกเขาเป็นค่าลบมากกว่า 1 หรือไม่รวมกับ 1) Softmax มักจะใช้สำหรับการจำแนกประเภทหลายคลาสเพราะมันรับประกันฟังก์ชั่นการกระจายความน่าจะเป็นอย่างดี

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

L=ylog(y^)

โดยที่คือผลคูณดอทเวกเตอร์

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

L=(1×log(0.1)+0×log(0.5)+...)

L=log(0.1)2.303

จุดสำคัญจากความคิดเห็น

นั่นหมายถึงการสูญเสียจะเหมือนกันไม่ว่าถ้าการคาดการณ์ที่มีหรือ ?[0.1,0.5,0.1,0.1,0.2][0.1,0.6,0.1,0.1,0.1]

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

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

J=1N(i=1Nyilog(y^i))

การใช้งานหลายอย่างจะต้องมีค่าความจริงพื้นฐานของคุณจะถูกเข้ารหัสร้อนแรง (มีคลาสจริงเดียว) เพราะนั่นช่วยให้การเพิ่มประสิทธิภาพพิเศษบางอย่าง อย่างไรก็ตามในหลักการแล้วการคำนวณการสูญเสียพลังงานจากเอนโทรปีสามารถคำนวณได้และปรับให้เหมาะสมเมื่อไม่เป็นเช่นนั้น


1
ถูก นั่นหมายความว่าการสูญเสียจะเหมือนกันไม่ว่าจะเป็นการคาดคะเน [0.1 0.5 0.1 0.1 0.2] หรือ [0.1 0.6 0.1 0.1 0.1]?
Nain

@ ไม่มี: ที่ถูกต้องสำหรับตัวอย่างของคุณ การสูญเสียข้ามเอนโทรปีไม่ได้ขึ้นอยู่กับค่าของความน่าจะเป็นของคลาสที่ไม่ถูกต้อง
Neil Slater

8

คำตอบจากนีลนั้นถูกต้อง อย่างไรก็ตามฉันคิดว่ามันเป็นสิ่งสำคัญที่จะต้องชี้ให้เห็นว่าในขณะที่การสูญเสียไม่ได้ขึ้นอยู่กับการกระจายระหว่างคลาสที่ไม่ถูกต้อง (เฉพาะการกระจายระหว่างคลาสที่ถูกต้องและส่วนที่เหลือ) การไล่ระดับของฟังก์ชันการสูญเสียนี้ ผิดพวกเขา ดังนั้นเมื่อคุณใช้การเรียนรู้ด้วยเครื่องข้ามคุณจะเปลี่ยนน้ำหนักต่างกันสำหรับ [0.1 0.5 0.1 0.1 0.2] และ [0.1 0.6 0.1 0.1 0.1] นี่เป็นเพราะคะแนนของคลาสที่ถูกต้องถูกทำให้เป็นมาตรฐานโดยคะแนนของคลาสอื่นทั้งหมดเพื่อเปลี่ยนให้เป็นความน่าจะเป็น


3
คุณสามารถอธิบายรายละเอียดด้วยตัวอย่างที่เหมาะสมได้หรือไม่?
Nain

@Lucas Adams คุณช่วยยกตัวอย่างได้ไหม
koryakinp

อนุพันธ์ของ EACH y_i (เอาต์พุต softmax) wrt EACH logit z (หรือพารามิเตอร์ w เอง) ขึ้นอยู่กับทุก ๆ y_i medium.com/@aerinykim/…
แอรอน

2

เรามาดูกันว่าการไล่ระดับสีของการสูญเสียมีผลอย่างไร ... เรามีเอนโทรปีของการสูญเสียซึ่งทำหน้าที่โดย

H(p,q)=i=1np(xi)log(q(xi))=(p(x1)log(q(x1))++p(xn)log(q(xn))

จากที่นี่ .. เราอยากรู้ว่าอนุพันธ์เกี่ยวข้องกับบาง : เนื่องจากข้อกำหนดอื่น ๆ ทั้งหมดถูกยกเลิกเนื่องจากความแตกต่าง เราสามารถใช้สมการนี้ไปอีกหนึ่งขั้นเพื่อ xi

xiH(p,q)=xip(xi)log(q(xi)).
xiH(p,q)=p(xi)1q(xi)q(xi)xi.

จากนี้เราจะเห็นว่าเรายังคงลงโทษคลาสที่แท้จริงเท่านั้น (ซึ่งมีค่าสำหรับ ) มิฉะนั้นเราจะมีการไล่ระดับสีเป็นศูนย์p(xi)

ฉันสงสัยว่าแพคเกจซอฟต์แวร์จะจัดการกับค่าที่ทำนายไว้เป็น 0 ได้อย่างไรในขณะที่มูลค่าจริงมีค่ามากกว่าศูนย์ ... เนื่องจากเราหารด้วยศูนย์ในกรณีนั้น


ฉันคิดว่าสิ่งที่คุณต้องการคือการใช้อนุพันธ์ wrt พารามิเตอร์ไม่ใช่ wrt x_i
แอรอน

1

เริ่มจากการทำความเข้าใจเอนโทรปีในทฤษฎีข้อมูล: สมมติว่าคุณต้องการสื่อสารสตริงของตัวอักษร "aaaaaaaa" คุณสามารถทำได้อย่างง่ายดายเช่น 8 * "a" ตอนนี้ใช้สตริงอื่น "jteikfqa" มีวิธีบีบอัดการสื่อสารสตริงนี้หรือไม่? ไม่มีอยู่ที่นั่น เราสามารถพูดได้ว่าเอนโทรปีของสายที่ 2 นั้นมีจำนวนมากกว่าเพื่อที่จะสื่อสารมันเราต้องการข้อมูล "บิต" มากขึ้น

การเปรียบเทียบนี้ใช้กับความน่าจะเป็นเช่นกัน หากคุณมีชุดรายการผลไม้ตัวอย่างการเข้ารหัสแบบไบนารีของผลไม้เหล่านั้นจะเป็นโดยที่ n คือจำนวนผลไม้ สำหรับผลไม้ 8 ชิ้นคุณต้องมี 3 บิตเป็นต้น อีกวิธีหนึ่งในการดูสิ่งนี้คือเมื่อความน่าจะเป็นของคนที่เลือกผลไม้แบบสุ่มคือ 1/8 การลดความไม่แน่นอนถ้าเลือกผลไม้คือซึ่งเป็น 3 โดยเฉพาะlog2(n)log2(1/8)

i=1818log2(18)=3
เอนโทรปีนี้บอกเราเกี่ยวกับความไม่แน่นอนที่เกี่ยวข้องกับการแจกแจงความน่าจะเป็นบางอย่าง ความไม่แน่นอน / ความผันแปรในการแจกแจงความน่าจะเป็นยิ่งมีขนาดใหญ่ขึ้นคือเอนโทรปี (เช่นผลไม้ 1024 ผลก็คือ 10)

ใน "cross" -entropy ดังที่ชื่อแนะนำเราให้ความสำคัญกับจำนวนบิตที่จำเป็นในการอธิบายความแตกต่างในการแจกแจงความน่าจะเป็นสองแบบ สถานการณ์กรณีที่ดีที่สุดคือการแจกแจงทั้งสองเหมือนกันซึ่งในกรณีนี้จำเป็นต้องใช้จำนวนบิตน้อยที่สุดนั่นคือเอนโทรปีแบบง่าย ในแง่คณิตศาสตร์

H(y,y^)=iyiloge(y^i)

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

Bottom line: ในแง่คนธรรมดาคนหนึ่งอาจคิดว่า cross-entropy เป็นระยะห่างระหว่างการแจกแจงความน่าจะเป็นสองอย่างในแง่ของปริมาณข้อมูล (บิต) ที่จำเป็นในการอธิบายระยะทางนั้น มันเป็นวิธีการที่เป็นระเบียบในการกำหนดความสูญเสียซึ่งจะลดลงเมื่อความน่าจะเป็นเวกเตอร์เข้าใกล้กันมากขึ้น


0

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

ข้อผิดพลาดจะแพร่กระจายกลับในคลาส "ร้อน" และความน่าจะเป็น Q (i) จะไม่เปลี่ยนแปลงหากความน่าจะเป็นที่อยู่ภายในคลาสอื่นเปลี่ยนไปมาระหว่างกัน


2
ลูคัสถูกต้องแล้ว ด้วยสถาปัตยกรรมที่อธิบายไว้โดย OP แล้วไล่ระดับสีที่ทุกlogits (เมื่อเทียบกับเอาท์พุท) ไม่เป็นศูนย์เพราะฟังก์ชั่น softmax เชื่อมต่อพวกเขาทั้งหมด ดังนั้นข้อผิดพลาด [การไล่ระดับสี] ที่ระดับ "ร้อน" จึงแพร่กระจายไปยังเซลล์ประสาทขาออกทั้งหมด
Neil Slater

+1 สำหรับ Neil และ Lucas
แอรอน

-1

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

ฉันได้พบคำอธิบายที่ดีมากที่deepnotes.io/softmax-crossentropyที่แสดงให้เห็นว่าผู้เขียนอนุพันธ์จริงy_ipiyi

คำอธิบายระเบียบอื่น ๆ ที่gombru.github.io/2018/05/23/cross_entropy_loss

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


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