การดักจับรูปแบบเริ่มต้นเมื่อใช้การขยายส่วนแบ็คอัปที่ผ่านการตัดทอนผ่านเวลา (RNN / LSTM)


12

บอกว่าฉันใช้ RNN / LSTM เพื่อทำการวิเคราะห์ความเชื่อมั่นซึ่งเป็นวิธีการแบบตัวต่อตัว (ดูบล็อกนี้ ) เครือข่ายได้รับการฝึกฝนผ่านการ backpropagation ที่ถูกตัดทอนผ่านช่วงเวลา (BPTT) ซึ่งเครือข่ายไม่ได้ถูกควบคุมในขั้นตอนสุดท้ายเพียง 30 ขั้นตอนตามปกติ

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

การไล่ระดับสีจะไม่ถูกคำนวณโดยคำนึงถึงคำแรกของแต่ละส่วนข้อความ RNN / LSTM จะยังสามารถปรับน้ำหนักเพื่อจับรูปแบบเฉพาะที่เกิดขึ้นภายในสองสามคำแรกเท่านั้นได้อย่างไร ตัวอย่างเช่นสมมติว่าประโยคทั้งหมดที่ทำเครื่องหมายว่าเริ่มต้นด้วย "ฉันรักสิ่งนี้" และประโยคทั้งหมดที่ทำเครื่องหมายว่าเริ่มต้นด้วย "ฉันเกลียดสิ่งนี้" RNN / LSTM จะจับได้อย่างไรว่าเมื่อมันถูกยกเลิกการลงทะเบียนสำหรับ 30 ขั้นตอนสุดท้ายเมื่อพบกับจุดสิ้นสุดของลำดับความยาว 100 ขั้นตอนpositivenegative


โดยปกติแล้วตัวย่อคือ TBPTT สำหรับการตัดทอนการขยายพันธุ์หลังเวลาผ่านไป
Charlie Parker

คำตอบ:


11

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

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

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

กลับไปวิเคราะห์ความเชื่อมั่นแล้ว สมมติว่าในระหว่างการฝึกแบบจำลองของคุณจะพบประโยคลบที่ยาวเช่น "ฉันเกลียดสิ่งนี้เพราะ ... รอบ ๆ " โดยพูด 50 คำในจุดไข่ปลา ด้วยการ จำกัด การแพร่กระจายของการไล่ระดับสีให้เหลือ 30 ขั้นตอนโมเดลจะไม่เชื่อมต่อ "ฉันเกลียดสิ่งนี้เพราะ" กับฉลากผลลัพธ์ดังนั้นมันจะไม่รับ "I", "เกลียด" หรือ "สิ่งนี้" จากการฝึกอบรมนี้ ตัวอย่าง. แต่จะรับกับคำที่อยู่ภายใน 30 ขั้นตอนจากจุดสิ้นสุดของประโยค หากชุดการฝึกอบรมของคุณมีตัวอย่างอื่น ๆ ที่มีคำเดียวกันเหล่านั้นอาจเป็นไปได้พร้อมกับ "ความเกลียดชัง" ก็มีโอกาสที่จะได้รับการเชื่อมโยงระหว่าง "ความเกลียดชัง" และฉลากความรู้สึกเชิงลบ นอกจากนี้หากคุณมีตัวอย่างการฝึกอบรมที่สั้นลงให้พูดว่า "เราเกลียดสิ่งนี้เพราะมันแย่มาก!" โมเดลของคุณจะสามารถเชื่อมต่อฟีเจอร์ "เกลียดชัง" และ "นี่" กับป้ายกำกับเป้าหมายได้ หากคุณมีตัวอย่างการฝึกอบรมเหล่านี้เพียงพอโมเดลควรจะเรียนรู้การเชื่อมต่อได้อย่างมีประสิทธิภาพ

ในเวลาทดสอบสมมติว่าคุณนำเสนอโมเดลด้วยประโยคยาว ๆ อย่าง "ฉันเกลียดสิ่งนี้เพราะ ... ในตุ๊กแก!" อินพุตของโมเดลจะเริ่มต้นด้วย "ฉันเกลียดสิ่งนี้" ซึ่งจะถูกส่งไปยังสถานะที่ซ่อนของโมเดลในบางรูปแบบ สถานะที่ซ่อนอยู่นี้ใช้เพื่อมีอิทธิพลต่อสถานะที่ซ่อนอยู่ในอนาคตของแบบจำลองดังนั้นแม้ว่าอาจจะมี 50 คำก่อนสิ้นสุดประโยค แต่สถานะที่ซ่อนอยู่จากคำเริ่มต้นเหล่านั้นมีโอกาสทางทฤษฎีของการมีอิทธิพลต่อผลผลิตแม้ว่ามันจะไม่เคย ได้รับการฝึกฝนในกลุ่มตัวอย่างที่มีระยะห่างระหว่าง "ฉันเกลียดสิ่งนี้" และจุดสิ้นสุดของประโยค


0

@ Imjohns3 มีสิทธิ์ถ้าคุณดำเนินการลำดับที่มีความยาว (ขนาด N) และ จำกัด backpropagation เป็นขั้นตอน K สุดท้ายเครือข่ายจะไม่เรียนรู้รูปแบบที่จุดเริ่มต้น

ฉันทำงานกับข้อความยาว ๆ และใช้วิธีการที่ฉันคำนวณการสูญเสียและทำการ backpropagation หลังจากทุกขั้นตอน K สมมติว่าลำดับของฉันมีโทเค็น N = 1,000 กระบวนการ RNN ของฉันแรก K = 100 จากนั้นฉันพยายามทำนาย (คำนวณการสูญเสีย) และ backpropagate ถัดไปขณะที่บำรุงรักษาสถานะ RNN เบรคโซ่ไล่ระดับสี (ใน pytorch-> แยก) และเริ่มอีก k = 100 ขั้นตอน

ตัวอย่างที่ดีของเทคนิคนี้คุณสามารถค้นหาได้ที่นี่: https://github.com/ksopyla/pytorch_neural_networks/blob/master/RNN/lstm_imdb_tbptt.py

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