ฟังก์ชั่นการสูญเสียสำหรับงานการจำแนกประเภทหลายคลาสและหลายฉลากในเครือข่ายประสาทเทียมคืออะไร?


64

ฉันกำลังฝึกโครงข่ายประสาทเทียมเพื่อจัดกลุ่มวัตถุเป็นคลาส n แต่ละวัตถุสามารถเป็นของหลายคลาสในเวลาเดียวกัน (หลายคลาสหลายป้าย)

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

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

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

เอนโทรปีของ Binary cross ดูเหมือนว่าจะเหมาะกว่า แต่ฉันเห็นเพียงว่ามันเคยถูกกล่าวถึงสำหรับปัญหาการจำแนกเลขฐานสองด้วยเซลล์ประสาทเอาท์พุทเดี่ยว

ฉันใช้ python และ keras เพื่อฝึกฝนในกรณีที่มันสำคัญ


1
ฉันเชื่อว่า softmax คือ "หน่วย sigmoid ที่สควอชใส่ลงในช่วงความน่าจะเป็น 0..1 สำหรับทุกชั้น"
Hong Ooi

คุณสามารถใช้ softmax เป็นฟังก์ชั่นการสูญเสียของคุณจากนั้นใช้ความน่าจะเป็นในการมัลติข้อมูลฉลากของคุณ
balboa

คำตอบ:


30

หากคุณใช้ keras เพียงแค่ใส่ sigmoids ในเลเยอร์เอาท์พุทของคุณและ binary_crossentropy ในฟังก์ชันต้นทุนของคุณ

หากคุณกำลังใช้ tensorflow แล้วสามารถใช้sigmoid_cross_entropy_with_logits แต่สำหรับกรณีของฉันฟังก์ชันการสูญเสียโดยตรงนี้ไม่ได้มาบรรจบกัน ดังนั้นฉันจึงสิ้นสุดการใช้ sigmoid cross entropy losslogits))) คุณสามารถสร้างของคุณเองในตัวอย่างนี้(yln(sigmoid(logits))+(1y)ln(1sigmoid(logits)))

Sigmoid ซึ่งแตกต่างจาก softmax ไม่ให้การกระจายความน่าจะเป็นรอบ ๆเป็นเอาต์พุต แต่เป็นความน่าจะเป็นอิสระnclasses

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


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

คำอธิบายสั้น ๆ ที่ดีสามารถดูได้ใน keras github: github.com/fchollet/keras/issues/741
Dror Hilman

1
มันไม่ได้แนะนำให้เขียนฟังก์ชั่นค่าใช้จ่ายของคุณเองเมื่อใช้เอนโทรปีข้าม - มันสามารถจะเป็นเรื่องปัญหาความมั่นคงที่เป็นตัวเลข ดูgithub.com/tensorflow/tensorflow/issues/2462สำหรับการสนทนา
kbrose

สิ่งหนึ่งคือ Multilabel อีกสิ่งหนึ่งคือ Multilabel Multiclass Sigmoid ลบล้างเอาต์พุตของคุณระหว่าง 0 ถึง 1 แต่ OP มีหลายคลาสดังนั้นผลลัพธ์ควรเป็นเช่น 0 - 10 ดังนั้นผลลัพธ์ควรดู: [0,5,2,3,1] <--- นี่ไม่ใช่ sigmoid อะไร ทำ.
mimoralea

ฉันควรจะ tf.round (บันทึก) ก่อนที่จะใช้ในฟังก์ชั่นค่าใช้จ่ายหรือฉันโดยตรงสามารถใช้บันทึกจากชั้นที่ซ่อนอยู่เพื่อ tf.nn.sigmoid .... ?
พระสงฆ์

9

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

พิจารณาสังเกตเวกเตอร์ของคุณจะมีป้าย (1 ถ้าตัวอย่างฉันมีป้ายกำกับ m มิฉะนั้นเป็น 0) ดังนั้นวัตถุประสงค์ก็คือเพื่อสร้างแบบจำลองเมทริกซ์ในลักษณะต่อตัวอย่าง ดังนั้นรูปแบบการประเมินx_i) พิจารณาการขยายเพื่อให้ได้สองคุณสมบัติ:ymyim=δimF(yi,xi)=logP(yi|xi)yim=ZP(ym)

  1. ฟังก์ชั่นการกระจาย:mP(ym)=1
  2. ฟังก์ชันการแบ่งพาร์ติชัน:ประมาณจำนวนฉลากZ

จากนั้นมันเป็นเรื่องของการสร้างแบบจำลองทั้งสองแยกจากกัน ฟังก์ชั่นการกระจายเป็นแบบจำลองที่ดีที่สุดกับเลเยอร์softmaxและฟังก์ชันพาร์ติชันสามารถสร้างแบบจำลองด้วยหน่วยเชิงเส้น (ในทางปฏิบัติฉันตัดมันเป็นการสร้างแบบจำลองที่ซับซ้อนมากขึ้นเช่นหน่วยปัวซงอาจทำงานได้ดีขึ้น) จากนั้นคุณสามารถเลือกที่จะใช้การสูญเสียแบบกระจาย (KL ในการกระจายและ MSE บนพาร์ติชัน) หรือคุณสามารถลองการสูญเสียต่อไปนี้บนผลิตภัณฑ์ของพวกเขาmax(0.01,output)

ในทางปฏิบัติตัวเลือกของเครื่องมือเพิ่มประสิทธิภาพยังสร้างความแตกต่างอย่างมาก ประสบการณ์ของฉันกับวิธีการแยกตัวประกอบเป็นวิธีที่ดีที่สุดภายใต้Adadelta (Adagrad ไม่ได้ผลสำหรับฉันไม่ได้ลอง RMSprop เลยการแสดงของ SGD ขึ้นอยู่กับพารามิเตอร์)

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

UPDATE : (ความคิดแบบสุ่ม) ดูเหมือนว่าการใช้กระบวนการ Dirichlet จะอนุญาตให้มีการรวมกลุ่มของก่อนหน้านี้กับจำนวนของป้ายกำกับหรือไม่

อัปเดต : โดยการทดสอบ KL-divergence ที่แก้ไขแล้วยังคงมีแนวโน้มที่จะให้เอาต์พุตหลายระดับมากกว่าเอาท์พุทฉลากหลายรายการ


(คำตอบเก่า)

ประสบการณ์ของฉันกับ sigmoid cross-entropy นั้นไม่น่าพอใจมาก ในขณะนี้ฉันใช้ KL-divergence ที่แก้ไขแล้ว ใช้รูปแบบ

Loss(P,Q)=x|P(x)Q(x)||logP(x)Q(x)|=x|(P(x)Q(x))logP(x)Q(x)|
โดยที่คือการกระจายหลอกเป้าหมายและคือการกระจายหลอกที่ทำนายไว้ (แต่ฟังก์ชั่นนั้นสมมาตรจริงดังนั้นจึงไม่สำคัญ)P(x)Q(x)

พวกเขาถูกเรียกว่าการกระจายหลอกที่ไม่ได้เป็นปกติ ดังนั้นคุณสามารถมีหากคุณมี 2 ป้ายกำกับสำหรับตัวอย่างเฉพาะxP(x)=2

Keras impelmentation

def abs_KL_div(y_true, y_pred):
    y_true = K.clip(y_true, K.epsilon(), None)
    y_pred = K.clip(y_pred, K.epsilon(), None)
    return K.sum( K.abs( (y_true- y_pred) * (K.log(y_true / y_pred))), axis=-1)

ในชุดข้อมูลโดยเฉพาะอย่างยิ่งของฉันadamเป็นดีกว่าrmsprop
Shadi

หากคุณใช้การสูญเสียดังกล่าวสำหรับการฝึกอบรมจะทำอย่างไรในขั้นตอนการทดสอบ ใช้ softmax สำหรับการทำนายด้วยเช่นกัน แต่จะเลือกขีด จำกัด เพื่อกำหนดคลาสที่มีหลายฉลากได้อย่างไร
karl_TUM

1

ฉันยังไม่ได้ใช้ keras ยกตัวอย่างคาเฟอีนคุณสามารถใช้SigmoidCrossEntropyLossLayerสำหรับปัญหาหลาย ๆ ฉลากได้


1
สนใจที่จะอธิบายว่าทำไมจึงเป็นวิธีที่ดี?
Firebug

0

ที่จริงแล้วใน tensorsflow คุณยังคงสามารถใช้sigmoid_cross_entropy_meanเป็นฟังก์ชั่นการคำนวณการสูญเสียในหลายฉลากได้ฉันยืนยันอย่างมาก


ให้ลิงค์ไปยังเอกสาร
Ivelin

0

ฉันเป็นมือใหม่ที่นี่ แต่ฉันจะพยายามให้มันกับคำถามนี้ ฉันถูกค้นหาสิ่งเดียวกับคุณและในที่สุดผมพบว่าดีมาก keras หลายระดับการจำแนกประเภทกวดวิชา @ http://machinelearningmastery.com/multi-class-classification-tutorial-keras-deep-learning-library/

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


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