หน้าต่างบานเลื่อนนำไปสู่การ overfitting ใน LSTM?


15

ฉันจะใช้ LSTM ของฉันให้มากเกินไปได้หรือไม่ถ้าฉันฝึกฝนผ่านทางหน้าต่างบานเลื่อน? เหตุใดผู้คนจึงไม่ใช้ LSTM

สำหรับตัวอย่างที่ง่ายสมมติว่าเราต้องทำนายลำดับของอักขระ:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

มันไม่ดี (หรือดีกว่า) ถ้าฉันฝึก LSTM ด้วยมินิบัสต่อไปนี้:

A B C D E F G H I J K L M N, backprop, erase the cell

B C D E F G H I J K L M N O, backprop, erase the cell

 .... and so on, shifting by 1 every time?

ก่อนหน้านี้ฉันมักจะฝึกฝนเป็น:

A B C D E F G H I J K L M N,  backprop, erase the cell

O P Q R S T U V W X Y Z,  backprop, erase the cell

แทนที่จะขยับทีละอันมันจะดีกว่าไหมถ้าเลื่อนสไลด์หน้าต่างด้วย 2 รายการแทน ฯลฯ นั่นหมายถึงอะไร (ในแง่ของความแม่นยำ / การบรรจุเกิน)?


นอกจากนี้หากฉันต้องทำตามวิธีการเลื่อนหน้าต่างในเครือข่าย Feed-forward มันจะส่งผลให้เกิดการ overfitting? ฉันจะสมมติว่าใช่เพราะเครือข่ายสัมผัสกับภูมิภาคข้อมูลเดียวกันเป็นเวลานานมาก ตัวอย่างเช่นมีการเปิดเผยE F G H I J Kเป็นเวลานาน


แก้ไข:

โปรดจำไว้ว่าสถานะเซลล์จะถูกลบระหว่างชุดการฝึกอบรมดังนั้น LSTM จะมี "ค้อนเพื่อหัว" ในเวลาเหล่านี้ ไม่สามารถจำสิ่งที่อยู่ก่อนหน้า OPQRSTUVWXYZ ซึ่งหมายความว่า LSTM ไม่สามารถเรียนรู้ได้ตลอดว่า "O" ตามด้วย "M"

ดังนั้นฉันคิดว่า (เช่นคำถามทั้งหมดของฉัน) ทำไมไม่ให้มันเป็นชุด (ซ้อนทับกัน) ระหว่าง ... และในกรณีนั้นทำไมไม่ใช้มินิบัสหลายชุดที่ทับซ้อนกัน - สำหรับฉันนี่จะให้การฝึกอบรมที่ราบรื่นขึ้น? ท้ายที่สุดนั่นหมายถึงหน้าต่างบานเลื่อนสำหรับ LSTM


ข้อมูลที่มีประโยชน์บางอย่างที่ฉันพบหลังจากคำตอบได้รับการยอมรับ:

จากที่นี่

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

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

แก้ไขหลังจากยอมรับคำตอบ:

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

นอกจากนี้ยังสามารถปรับปรุงปัญหา "hammer to head" ได้โดยใช้ Synthetic Gradients ดูประโยชน์ได้ที่นี่: (คำตอบที่เชื่อมโยงกล่าวถึงประโยชน์ของการเรียงลำดับแบบยาว) /datascience//a/32425/43077

คำตอบ:


9

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

4(ม.n+n2+n)ม.n

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

หากข้อมูลของคุณไม่เพียงพอสำหรับ LSTM ฉันขอแนะนำให้ลองทำสิ่งที่ง่ายกว่านี้มากเช่นตัวแบบอัตโนมัติและพยายามหาทางแก้ไข

แก้ไข (ตอบกลับความคิดเห็น):

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


ขอบคุณ II ยังไม่เห็นว่า LSTM ควร / ไม่ควรได้รับการฝึกอบรมสำหรับกระบวนการที่ไม่ได้ซ้อนทับกันหรือไม่ โพสต์ที่คุณชอบนั้นเป็นสิ่งที่มีค่า แต่จะพูดถึงเพียงแค่อวน Feed-Forward และไม่ได้กล่าวถึงผลประโยชน์ / อันตรายในรถมินิบัสที่ซ้อนทับกันของ LSTM ในระหว่างการฝึก @Imran ยังไม่ได้พูดถึง "ต่อต้านใบสั่งยา" กับมินิบัสที่ทับซ้อนกัน - ความคิดเห็นแรกของฉันที่โพสต์ของเขา
Kari

ฉันได้แก้ไขคำถามของฉันเพื่อรวมความคิดเห็น
Kari

ข้อมูลที่ดีมากมาย!
Imran

@Kari ฉันได้แก้ไขคำตอบของฉัน มันช่วยได้ไหม
สถิติแม่มด

5

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

LSTM นั้นมีแนวโน้มที่จะ overfitting อยู่แล้วและหากคุณป้อนข้อมูลซ้ำซ้อนจำนวนมากด้วยหน้าต่างเลื่อนแล้วใช่พวกเขามีแนวโน้มที่จะล้น

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

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


ขอบคุณ! ฉันจะยืนยันว่าสถานะเซลล์ถูกลบระหว่างชุดการฝึกอบรมดังนั้น LSTM จะมี "ค้อนเพื่อหัว" ในเวลานี้ ไม่สามารถจำสิ่งที่อยู่ก่อนหน้า OPQRSTUVWXYZ ซึ่งหมายความว่า LSTM ไม่สามารถเรียนรู้ได้ตลอดว่า "O" ตามด้วย "M" ดังนั้นฉันจึงคิดว่าทำไมไม่ให้แบทช์ตรงกลาง (ซ้อนทับกัน) ระหว่าง ... และในกรณีนั้นทำไมไม่ใช้มินิบัสหลายตัวที่ทับซ้อนกัน - สำหรับฉันนี่จะให้การฝึกที่นุ่มนวลขึ้น?
Kari

ท้ายที่สุดนั่นหมายถึงหน้าต่างบานเลื่อนสำหรับ LSTM
Kari

ไม่จำเป็นต้องลบสถานะของเซลล์ในระหว่างกระบวนการการฝึกอบรมถึงแม้ว่า backpropagation เพิ่มเติมกลับเป็นไปไม่ได้แน่นอน
Jan van der Vegt

ฉันลองแล้วและ - ถึงแม้จะมีอัตราการเรียนรู้ 0 ข้อผิดพลาดก็กระโดดขึ้น ๆ ลง ๆ เพราะจำนวนเซลล์ที่ไม่ถูกต้องถูกนำมาใช้ใหม่เป็น "มรดก" ระหว่างการฝึก ฉันไม่สามารถซ้อนมากกว่า 6 เลเยอร์ด้วยวิธีนี้ - มันวุ่นวายเกินไปและจะไม่มาบรรจบกัน อย่างไรก็ตามการรีเซ็ตสถานะเซลล์ให้เป็นศูนย์หลังจากแต่ละ Backprop อนุญาตให้ฉันสแต็ค 150 เลเยอร์ 64 นิวรอนในแต่ละเลเยอร์และฝึกอบรมด้วย 0.001 อัตราการเรียนรู้ & โมเมนตัมของ 0.9 (ฉันใช้ LayerNormalization นั่นเป็นเหตุผลว่าทำไมอัตราการเรียนรู้ขนาดใหญ่)
Kari

1
ซึ่งหมายความว่ามีการ "cellstates ดั้งเดิม" LSTM จะไม่เสถียรและไม่น่าเชื่อถือ - ก็จะเริ่มทำงานใน minibatch ใหม่ basing ตัดสินใจบนมือถือของรัฐที่ผ่านมา (จาก minibatch ก่อนหน้า)ที่ไม่ได้รับการแก้ไขให้เต็มที่ ดังนั้นการลบสถานะเซลล์จะลบข้อผิดพลาดที่เกิดขึ้น แต่ทำให้ประสบการณ์ความจำเสื่อม LSTM
Kari
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.