ความหมายของการดำเนินการ KL Divergence ใน Keras คืออะไร?

ฉันสับสนเล็กน้อยเกี่ยวกับวิธีใช้ KL Divergence โดยเฉพาะใน Keras แต่ฉันคิดว่าคำถามนี้เป็นคำถามทั่วไปสำหรับแอปพลิเคชันการเรียนรู้เชิงลึก ใน keras ฟังก์ชันการสูญเสีย KL ถูกกำหนดไว้ดังนี้:

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

ในแบบจำลองของฉัน y_true และ y_pred เป็นเมทริกซ์ แต่ละแถวของ y_true การเข้ารหัสแบบร้อนแรงสำหรับตัวอย่างการฝึกอบรมหนึ่งตัวอย่าง และแต่ละแถวของ y_pred เอาต์พุตของแบบจำลอง (การแจกแจงความน่าจะเป็น) สำหรับตัวอย่างนั้น

ฉันสามารถรันการคำนวณความแตกต่างของ KL นี้กับคู่ของแถวที่กำหนดตั้งแต่ y_true และ y_pred และรับผลลัพธ์ที่คาดหวัง ค่าเฉลี่ยของผลลัพธ์ความแตกต่างของ KL เหล่านี้ในแถวตรงกับการสูญเสียที่รายงานโดย Keras ในประวัติการฝึกอบรม แต่การรวมนั้น - การเรียกใช้ KL Divergence ในแต่ละแถวและรับค่าเฉลี่ย - จะไม่เกิดขึ้นในฟังก์ชันการสูญเสีย ในทางตรงกันข้าม ฉันเข้าใจว่า MAE หรือ MSE จะรวมตัวอย่างต่างๆ:

def mean_squared_error(y_true, y_pred):
    return K.mean(K.square(y_pred - y_true), axis=-1)

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

ดังนั้นคำถามของฉันคือ:

  1. การตีความสิ่งที่ Keras กำลังทำอยู่นี้เกิดขึ้นกับการสูญเสียความแตกต่างของ KL (เช่น ค่าเฉลี่ยเหนือความแตกต่างของ KL ของแถว) ถูกต้องหรือไม่

  2. เหตุใดจึงเป็นสิ่งที่ถูกต้องที่จะทำ?

  3. จากมุมมองของการนำไปปฏิบัติ เหตุใดคำจำกัดความของฟังก์ชันการสูญเสียใน Keras จึงไม่ทำการรวมกลุ่มเหนือแถวแบบที่ MAE หรือ MSE ทำ


person mechner    schedule 05.06.2017    source แหล่งที่มา


คำตอบ (1)


ความแตกต่างระหว่าง Kullback-Leibler คือการวัดความคล้ายคลึงกันระหว่างการแจกแจงความน่าจะเป็นสองครั้ง ความแตกต่างของ KL ที่นำมาใช้ใน Keras ถือว่าการแจกแจงความน่าจะเป็นแบบแยกกันสองครั้ง (ด้วยเหตุนี้ผลรวม)

รูปแบบที่แน่นอนของฟังก์ชันการสูญเสีย KL ของคุณขึ้นอยู่กับการแจกแจงความน่าจะเป็นพื้นฐาน กรณีการใช้งานทั่วไปคือโครงข่ายประสาทเทียมจำลองพารามิเตอร์ของการแจกแจงความน่าจะเป็น P (เช่น Gaussian) จากนั้น KL Divergence จะถูกใช้ในฟังก์ชันการสูญเสียเพื่อกำหนดความคล้ายคลึงกันระหว่างการแจกแจงตามแบบจำลองและการแจกแจงแบบอื่นที่รู้จัก (อาจเป็นแบบเกาส์เซียน) เช่นกัน). เช่น. เครือข่ายส่งออกเวกเตอร์สองตัว mu และ sigma^2 Mu สร้างค่าเฉลี่ยของการแจกแจงแบบเกาส์เซียน P ในขณะที่ sigma^2 เป็นเส้นทแยงมุมของเมทริกซ์ความแปรปรวนร่วม Sigma ฟังก์ชันการสูญเสียที่เป็นไปได้คือความแตกต่างของ KL ระหว่าง Gaussian P ที่อธิบายโดย mu และ Sigma และหน่วย Gaussian N(0, I) รูปแบบที่แน่นอนของ KL Divergence ในกรณีนั้นสามารถหามาได้ในเชิงวิเคราะห์ โดยให้ฟังก์ชันการสูญเสีย keras กำหนดเอง ซึ่งไม่เท่ากับ KL Divergence ที่นำไปใช้ใน Keras เลย

ในรายงานต้นฉบับที่แนะนำตัวเข้ารหัสอัตโนมัติแบบแปรผัน ฟังก์ชันการสูญเสียจะถูกรวมเข้ากับตัวอย่างในมินิแบทช์ แล้วคูณด้วยปัจจัย (N/M) โดยที่ N คือขนาดของชุดข้อมูลทั้งหมด และ M คือขนาดของ มินิแบทช์ ดูสมการ 8 และ 10 ใน https://arxiv.org/abs/1312.6114

person datwelk    schedule 06.06.2017
comment
และหน่วยเกาส์เซียน ฉันคิดว่าคุณควรอธิบายว่าทำไมหน่วยเกาส์เซียน - person nbro; 29.10.2019
comment
ขึ้นอยู่กับข้อมูลและแบบจำลองกราฟิกของคุณ มีสาเหตุหลายประการว่าทำไมคุณจึงต้องการให้การแจกแจงความน่าจะเป็นตามแบบจำลองมีลักษณะคล้ายกับหน่วยเกาส์เซียน - person datwelk; 01.04.2020
comment
หากมีสาเหตุหลายประการ คุณสามารถระบุเหตุผล/ตัวอย่างหนึ่งข้อได้อย่างง่ายดาย! - person nbro; 01.04.2020