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


115

ในMNIST สำหรับ ML Beginnersพวกเขานิยาม cross-entropy เป็น

Hy(y):=iyilog(yi)

yiคือค่าความน่าจะเป็นที่คาดการณ์สำหรับ classและคือความน่าจะเป็นที่แท้จริงสำหรับคลาสนั้นy ฉันiyi

คำถามที่ 1

เป็นปัญหาหรือไม่ที่ (ใน ) อาจเป็น 0? นี่แปลว่าเรามีลักษณนามที่แย่จริงๆ แต่คิดว่ามีข้อผิดพลาดในชุดของเราเช่นว่า "เห็นได้ชัด" ระบุว่าเป็น มันจะผิดพลาดหรือไม่ แบบจำลองที่เราเลือก (การเปิดใช้งาน softmax ในตอนท้าย) นั้นไม่เคยให้ความน่าจะเป็น 0 สำหรับคลาสที่ถูกต้องหรือไม่ log ( y i )yilog(yi)13

คำถามที่ 2

ฉันได้เรียนรู้ว่าการกำหนดเอนโทรปี

Hy(y):=i(yilog(yi)+(1yi)log(1yi))

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


ดูเพิ่มเติมที่: stats.stackexchange.com/questions/80967/…
Piotr Migdal

ดูเพิ่มเติม: Kullback-Leibler Divergence อธิบายโพสต์บล็อก
Piotr Migdal

คำตอบ:


101

วิธีการหนึ่งที่จะตีความข้ามเอนโทรปีคือการเห็นว่ามันเป็น (ลบ) เข้าสู่ระบบโอกาสสำหรับข้อมูลที่ภายใต้รูปแบบy_iyiyi

คือสมมติว่าคุณมีรูปแบบบางอย่างคงที่ (aka "สมมติฐาน") ซึ่งคาดการณ์สำหรับเรียนน่าจะเกิดขึ้นของพวกเขาสมมุติy_n สมมติว่าคุณสังเกต (ในความเป็นจริง) อินสแตนซ์ของคลาส , อินสแตนซ์ของคลาส , อินสแตนซ์ของคลาส , ฯลฯ ตามโมเดลของคุณโอกาสที่จะเกิดเหตุการณ์นี้คือ: การลอการิทึมและเปลี่ยนเครื่องหมาย: n{1,2,,n}y1,y2,,ynk11k22knn

P[data|model]:=y1k1y2k2ynkn.
logP[data|model]=k1logy1k2logy2knlogyn=ikilogyi
N = k 1 + k 2 + + k n y ฉัน = k ฉัน หากคุณหารผลรวมทางขวาด้วยจำนวนการสังเกตและแสดงความน่าจะเป็นเชิงประจักษ์เป็นคุณจะได้ค่าเอนโทรปี: N=k1+k2++knyi=ki/N
1NlogP[data|model]=1Nikilogyi=iyilogyi=:H(y,y)

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

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

iyilog2yi,

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

เมื่อนึกถึงสัญชาติญาณเหล่านี้คำตอบของคำถามของคุณจะสามารถมองเห็นได้ดังนี้:

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

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

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

  • คำถามที่ 2 ในสูตรนี้เรามักจะสมมติว่าเป็นหรือในขณะที่เป็นสมมุติฐานความน่าจะเป็นของโมเดลสำหรับอินพุตที่สอดคล้องกัน หากคุณมองอย่างใกล้ชิดคุณจะเห็นว่ามันเป็นเพียงสำหรับข้อมูลไบนารีซึ่งเทียบเท่ากับสมการที่สองในคำตอบนี้yi01yilogP[data|model]

    ดังนั้นการพูดอย่างเคร่งครัดถึงแม้ว่ามันจะยังคงเป็นบันทึกความเป็นไปได้ แต่มันก็ไม่เทียบเท่ากับ syntactically ข้ามเอนโทรปี สิ่งที่บางคนหมายถึงเมื่อกล่าวถึงการแสดงออกเช่นcross-entropyคือในความเป็นจริงแล้วผลรวมของการข้าม entropies ไบนารีสำหรับแต่ละจุดในชุดข้อมูล: ที่และจะต้องมีการตีความว่าเป็นที่สอดคล้องกันกระจายไบนารีและy_i)

    iH(yi,yi),
    yiyi(yi,1yi)(yi,1yi)


1
คุณสามารถระบุแหล่งที่มาที่นิยามหรือไม่? ที่นี่พวกเขากำหนดว่าเป็นการกระจายแบบร้อนแรงสำหรับป้ายกำกับคลาสปัจจุบัน อะไรคือความแตกต่าง? yi=kiN
Lenar Hoyt

1
ในแบบฝึกหัด MNIST TensorFlow พวกเขาให้คำจำกัดความในแง่ของเวกเตอร์แบบร้อนแรงเช่นกัน
Lenar Hoyt

@LenarHoyt เมื่อ ,จะเท่ากับ one-hot คุณสามารถคิดว่าหนึ่งร้อนในการเข้ารหัสของรายการหนึ่งขึ้นอยู่กับความน่าจะเป็นหมวดหมู่เชิงประจักษ์ (จริง) k i / NN=1ki/N
THN

'เหตุการณ์อิสระต้องการ ... เพื่อเข้ารหัส' - คุณช่วยอธิบายหน่อยได้ไหม?
อเล็กซ์

@Alex นี่อาจต้องใช้คำอธิบายที่นานกว่านี้เพื่อทำความเข้าใจอย่างถูกต้อง - อ่านข้อมูลเกี่ยวกับรหัส Shannon-Fano และความสัมพันธ์ของการเข้ารหัสที่ดีที่สุดกับสมการเอนโทรปีของแชนนอน หากต้องการทำให้สิ่งต่าง ๆ สะดุดถ้าเหตุการณ์มีโอกาส 1/2 การเลือกที่ดีที่สุดของคุณคือการใช้รหัสโดยใช้บิตเดียว หากมีความน่าจะเป็น 1/4 คุณควรใช้ 2 บิตในการเข้ารหัส ฯลฯ โดยทั่วไปหากชุดเหตุการณ์ของคุณมีความน่าจะเป็นของรูปแบบ 1/2 ^ k คุณควรให้ความยาว k - วิธีนี้จะทำให้โค้ดของคุณ เข้าหาแชนนอนความยาวที่เหมาะสม
KT

22

สูตร logloss แรกที่คุณใช้คือสำหรับการสูญเสียการบันทึกหลายคลาสโดยที่ตัวห้อยระบุคลาสที่แตกต่างในตัวอย่าง สูตรจะถือว่าy iตัวเดียวในแต่ละตัวอย่างคือ 1 และส่วนที่เหลือคือทั้งหมด 0iyi

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

อีกข้อสันนิษฐานคือสำหรับการคาดการณ์ของแต่ละตัวอย่าง ชั้น softmax ทำสิ่งนี้โดยอัตโนมัติ - ถ้าคุณใช้บางอย่างที่แตกต่างคุณจะต้องปรับขนาดเอาต์พุตเพื่อให้เป็นไปตามข้อ จำกัด นั้นiyi=1

คำถามที่ 1

เป็นปัญหาหรือไม่ที่ (ในl o g ( y i ) ) อาจเป็น 0?yilog(yi)

ใช่ว่าอาจเป็นปัญหาได้ แต่โดยทั่วไปแล้วจะไม่ใช่ปัญหาในทางปฏิบัติ ชั้น softmax ที่เริ่มต้นแบบสุ่มนั้นไม่น่าจะเป็นไปได้อย่างยิ่งที่จะส่งออกที่แน่นอน0ในชั้นเรียนใด ๆ แต่มันเป็นไปได้ดังนั้นควรปล่อยให้มันคุ้มค่า ก่อนอื่นอย่าประเมินสำหรับy i = 0ใด ๆเพราะคลาสลบจะมีส่วนร่วมกับข้อผิดพลาด 0 เสมอ ประการที่สองในโค้ดภาคปฏิบัติคุณสามารถ จำกัด ค่าบางอย่างเช่นความเสถียรเชิงตัวเลขในหลาย ๆ กรณีไม่จำเป็นต้องใช้ แต่นี่คือการตั้งโปรแกรมการป้องกันแบบมีเหตุผลlog(yi)yi=0log( max( y_predict, 1e-15 ) )

คำถามที่ 2

ฉันได้เรียนรู้ว่า cross-entropy ถูกกำหนดเป็นHy(y):=i(yilog(yi)+(1yi)log(1yi))

สูตรนี้มักจะใช้สำหรับเครือข่ายที่มีหนึ่งเอาท์พุททำนายสองคลาส (ปกติสมาชิกระดับบวกสำหรับ 1 และลบสำหรับ 0 เอาท์พุท) ในกรณีที่ว่าอาจมีเพียงหนึ่งค่า - คุณจะสูญเสียผลรวมมากกว่าฉันii

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

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


โปรดทราบว่ามีความคลุมเครือบางอย่างในการนำเสนอสูตรที่สอง - ในทางทฤษฎีแล้วสมมติเพียงหนึ่งคลาสและจะแจกแจงตัวอย่าง i
Neil Slater

ฉันขอโทษฉันถามอะไรที่แตกต่างจากที่ฉันอยากรู้ ฉันไม่เห็นปัญหาในแต่ในปีฉัน = 0เพราะเข้าสู่ระบบ( Y ฉัน ) คุณช่วยปรับคำตอบของคุณให้เป็นแบบนั้นได้ไหม? log(yi)=0yi=0log(yi)
Martin Thoma

@NeilSlater หากคลาสไม่ได้เป็นเอกสิทธิ์เฉพาะบุคคลเวกเตอร์เอาต์พุตสำหรับแต่ละอินพุตอาจมีมากกว่าหนึ่ง 1 เราควรใช้สูตรที่สองหรือไม่
สื่อ

1
@ สื่อ: ไม่จริง คุณต้องการที่จะดูสิ่งต่าง ๆ เช่นการจำแนกแบบลำดับชั้นแม้ว่า . .
Neil Slater

1
@Javi: ตามคำถามของ OP คือความจริงพื้นฐานดังนั้นโดยปกติแล้ว 0 หรือ 1 มันคือy ฉันนั่นคือ softmax เอาต์พุต อย่างไรก็ตามปีผมสามารถจบลงเป็นศูนย์ในการปฏิบัติเนื่องจากการปัดเศษลอยจุด สิ่งนี้จะเกิดขึ้นจริง yiyiyi
Neil Slater

11

ได้รับ , คุณต้องการที่จะเพิ่มประสิทธิภาพของวิธีการเรียนรู้เครื่องของคุณจะได้รับปีพีอาร์อีd ฉันc tใกล้เคียงเป็นไปได้ที่จะปีทีอาร์ยูอีytrueypredictytrue

คำถามแรก:

คำตอบข้างต้นอธิบายพื้นหลังของสูตรแรกของคุณแล้วเอนโทรปีของการกำหนดข้ามในทฤษฎีข้อมูล

จากความเห็นอื่นที่ไม่ใช่ทฤษฎีสารสนเทศ:

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

ในคำพูดของคนธรรมดา:

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

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

ในขณะที่ฉันเดาว่าพวกเราส่วนใหญ่มีความสำคัญและต้องการที่จะเลือกอันที่สอง (ดังนั้นแพ็คเกจ ML จำนวนมากจะถือว่าสิ่งที่ข้ามเอนโทรปี)

คำถามที่สอง:

ข้ามเอนโทรปีต่อตัวอย่างต่อชั้นเรียน:

ytruelog(ypredict)

Cross entropy สำหรับชุดข้อมูลทั้งหมดทั้งคลาส:

inkKytrue(k)log(ypredict(k))

ดังนั้นเมื่อมีเพียงสองคลาส (K = 2) คุณจะมีสูตรที่สอง


5

ปัญหาเหล่านั้นได้รับการจัดการโดยการใช้ softmax ของบทช่วยสอน

สำหรับ 1) คุณถูกต้องที่ softmax รับประกันการส่งออกที่ไม่เป็นศูนย์เพราะมัน exponentiates มันเป็นอินพุต สำหรับการเปิดใช้งานที่ไม่ให้การรับประกันนี้ (เช่น relu) มันง่ายที่จะเพิ่มคำบวกเล็ก ๆ ลงในเอาต์พุตทุกตัวเพื่อหลีกเลี่ยงปัญหานั้น

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


"คุณถูกต้องที่ softmax รับประกันผลลัพธ์ที่ไม่เป็นศูนย์" - ฉันรู้ว่านี่เป็นเหตุผลทางทฤษฎี ในความเป็นจริงมันเกิดขึ้นได้ไหมว่า (เนื่องจากปัญหาตัวเลข) กลายเป็น 0
Martin Thoma

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

0

yilog(yi)

log(0)log(yi+ϵ)


Hy(y):=iyilog(yi)
Hy(y):=i(yilog(yi)+(1yi)log(1yi))

(a) ถูกต้องสำหรับการทำนายหลายระดับ (จริง ๆ แล้วเป็นการรวมสองครั้ง) (b) เหมือนกับ (a) สำหรับการทำนายสองระดับ ทั้งสองกำลังข้ามเอนโทรปี

ตัวอย่าง:

xici{0,1}ci[0,1]

cici

(ci,ci)={(0,0.1),(0,0.4),(0,0.8),(1,0.8),(1,0.2)}

yiyi

  • yik:=1ci=k:=0

  • yik:=p(k|xi)xik

(yi,yi)

(yi,yi)={([1,0],[0.9,0.1]), ([1,0],[0.6,0.4]), ([1,0],[0.2,0.8]), ([0,1],[0.2,0.8]), ([0,1],[0.8,0.2])}

ทั้ง (a) และ (b) ถูกคำนวณดังนี้:

Hy(y)=1/5([log(0.9)+log(0.6)+log(0.2)]ci=0+[log(0.8)+log(0.2)]ci=1)=0.352

ที่มา:

1K
(xi,ci)ci=kyi=[0,..,1,0,..]kthyik=1yik=p(k|xi)(xi,k)log(yik)yik1log(yik)0

L(yi,yi)=k=1Kyiklog(yik)

yik=1kk0log(yik)=0yim=1

L(yi,yi)=log(yim)

สูตรสุดท้ายของคะแนนการฝึกอบรมทั้งหมดคือ:

Hy(y)=(xi,yi)k=1Kyiklog(yik)

yi0=1yi1yi0=1yi1

Hy(y)=(xi,yi)yi1log(yi1)+yi0log(yi0)=(xi,yi)yi1log(yi1)+(1yi1)log(1yi1)

ซึ่งเหมือนกับ (b)

Cross-entropy (a) เหนือคลาส (หนึ่ง summation)

Cross-entropy (a) เหนือคลาสคือ:

Hy(y)=k=1Kyklog(yk)

รุ่นนี้ไม่สามารถใช้สำหรับงานการจัดหมวดหมู่ ให้นำข้อมูลกลับมาใช้ใหม่จากตัวอย่างก่อนหน้านี้:

(ci,ci)={(0,0.1),(0,0.4),(0,0.8),(1,0.8),(1,0.2)}

y0=3/5=0.6y1=0.4

y0=3/5=0.6y1=0.4

y0logy0y1logy1=0.6log(0.6)0.4log(0.4)=0.292

(0,0.8)(1,0.2)y0y1


(ci,ci)={(0,0.1),(0,0.4),(0,0.2),(1,0.8),(1,0.8)}

y0y0=3/5

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