หลีกเลี่ยงการสวมทับด้วย LSTM net ขนาดใหญ่กับข้อมูลจำนวนน้อย

Aug 19 2020

ฉันกำลังโพสต์คำถามนี้ใหม่จาก AI.SEที่นี่เพราะฉันคิดว่ามันอาจจะไม่ตรงประเด็นสำหรับ AI.SE ...

1. บริบท

ฉันกำลังศึกษาเทคนิคสุขภาพการตรวจสอบและฉันฝึกฝนในC-MAPSS ชุด เป้าหมายคือการทำนายอายุการใช้งานที่เหลืออยู่ (RUL) ของชุดการวัดเซ็นเซอร์ที่เครื่องยนต์กำหนด มีวรรณกรรมมากมายเกี่ยวกับชุดข้อมูล C-MAPSS ซึ่งรวมถึงเทคนิค ML แบบคลาสสิก (ไม่ใช่ DL) และวิธีการที่ใช้ DL ไม่กี่ปีที่ผ่านมาเครือข่ายที่ใช้ LSTM แสดงผลลัพธ์ที่น่าสนใจ (ดูLong Short-Term Memory Network for Remaining Useful Life, Zheng et al , 2017 ) และฉันกำลังพยายามทำซ้ำผลลัพธ์เหล่านี้

ชุดข้อมูล C-MAPSS มีข้อมูลจำนวนน้อย ชุดย่อย FD001 มีเพียง 100 ชุดที่รันต่อความล้มเหลว เมื่อฉันประมวลผลล่วงหน้าเพื่อให้ได้อนุกรมเวลาที่มีความยาวคงที่ฉันจะได้รับซีรีส์แบบเฟรมได้มากถึง ~ 20,000 ชุด ในบทความที่กล่าวถึงข้างต้นโดยใช้ LSTM พวกเขาใช้เลเยอร์ LSTM ที่ซ่อนอยู่สองชั้นโดยมี 64 หน่วยแต่ละชั้นและสองชั้นที่เชื่อมต่อกันอย่างเต็มที่โดยมีเซลล์ประสาท 8 เซลล์ (พารามิเตอร์ ~ 55,000 ตัว)

2. ปัญหา

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

อย่างไรก็ตามสิ่งหนึ่งที่ได้ผลคือการลดจำนวนหน่วยของเลเยอร์ LSTM คาดว่าจะมีเพียง 24 ยูนิตแทนที่จะเป็น 64 ต่อเลเยอร์เน็ตจะมีพารามิเตอร์น้อยกว่ามาก (~ 9000) และไม่แสดงค่าไฟเกิน คะแนนและ RMSE นั้นแย่กว่าคะแนนในกระดาษเล็กน้อย แต่ก็ดีที่สุดที่ฉันทำได้ แม้ว่าผลลัพธ์เหล่านี้จะดีสำหรับฉัน แต่ฉันก็อยากรู้ว่าเป็นไปได้อย่างไรที่ผู้เขียนบทความนี้จะหลีกเลี่ยงการติดตั้งสุทธิ LSTM (64,64) มากเกินไป

3. คำถาม

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

4. ข้อมูล

ฉันให้ข้อมูลเพิ่มเติมเกี่ยวกับเน็ตและผลลัพธ์ของฉันที่ด้านล่าง:

สถาปัตยกรรมเครือข่าย

model = keras.models.Sequential([
    keras.layers.LSTM(24, return_sequences=True, kernel_regularizer=keras.regularizers.l1(0.01),
                      input_shape=input_shape),
    keras.layers.Dropout(0.2),
    keras.layers.LSTM(24, return_sequences=False, kernel_regularizer=keras.regularizers.l1(0.01)),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(8, activation='relu', kernel_regularizer=keras.regularizers.l2()),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(8, activation='relu', kernel_regularizer=keras.regularizers.l2(), bias_regularizer=keras.regularizers.l2()),
    keras.layers.Dense(1, activation='relu')
])

คะแนน (ชุดตรวจสอบความถูกต้อง)

  • กระดาษ: คะแนน = 16.14; RMSE = 338
  • LSTM ของฉัน (64, 64): คะแนน = 26.47; RMSE = 3585 (ชุดเกิน)
  • LSTM ของฉัน (24, 24): คะแนน = 16.82; RMSE = 515

แก้ไข: ผลลัพธ์สำหรับโซลูชันที่เสนอโดย @ hH1sG0n3

  • LSTM (64, 64) ด้วยrecurrent_dropout=0.3: คะแนน = 16.36; RMSE = 545

คำตอบ

2 hH1sG0n3 Aug 19 2020 at 19:39

คุณอาจต้องการตรวจสอบพารามิเตอร์หลายตัวที่ปรากฏว่าคุณไม่ได้ทดสอบในโค้ดของคุณด้านบน:

  • การตัดแบบไล่ระดับสี: การอัปเดตน้ำหนักจำนวนมากระหว่างการฝึกอาจทำให้ตัวเลขล้นหรือน้อยเกินไปซึ่งมักเรียกกันว่า "การไล่ระดับสีแบบระเบิด"
# configure your optimizer with gradient norm clipping
opt = SGD(lr=0.01, momentum=0.9, clipnorm=1.0)
  • Reccurent dropout: การออกกลางคันที่ใช้กับสัญญาณอินพุตที่เกิดซ้ำของหน่วยของเลเยอร์ LSTM
keras.layers.LSTM(24, kernel_regularizer=keras.regularizers.l1(0.01), ..., recurrent_dropout=0.3)
  • Stateful: จะเห็นได้ชัดเจนจากกระดาษหรือไม่หากโมเดลยังคงมีสถานะในการฝึกซ้ำแต่ละครั้ง คุณสามารถทดลองกับสิ่งนี้ได้เช่นกัน
keras.layers.LSTM(24, kernel_regularizer=keras.regularizers.l1(0.01), ..., stateful=True)
shepan6 Aug 19 2020 at 17:51

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

เห็นได้ชัดว่าสัญชาตญาณแรกของฉันบอกว่าให้ลดจำนวนเลเยอร์ (เช่นลบเลเยอร์ LSTM ที่สองเป็นต้น) แต่สิ่งนี้จะเปลี่ยนสถาปัตยกรรมโดยรวมของโมเดลอย่างเห็นได้ชัดเช่นมีเลเยอร์น้อยกว่าแบบจำลองที่อธิบายไว้ในกระดาษ

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

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