ใช้ LSTM ที่ดีที่สุดสำหรับการทำนายเหตุการณ์ตามลำดับ


9

สมมติลำดับ 1 มิติต่อไปนี้:

A, B, C, Z, B, B, #, C, C, C, V, $, W, A, % ...

ตัวอักษรA, B, C, ..ที่นี่เป็นตัวแทนของเหตุการณ์ 'ธรรมดา'

สัญลักษณ์#, $, %, ...ที่นี่แสดงถึงกิจกรรม 'พิเศษ'

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

มีคำสั่งของประเภทเหตุการณ์ปกติ 10,000 ประเภทและลำดับเหตุการณ์พิเศษ 100 ชนิด จำนวนของกิจกรรมทั่วไปก่อนหน้ากิจกรรมพิเศษจะแตกต่างกันไป แต่ไม่น่าจะมากกว่า 100-300

โดยพื้นฐานฉันสนใจที่จะมองหารูปแบบในลำดับเหตุการณ์ปกติที่จบลงด้วยการทำนายเหตุการณ์พิเศษ

ตอนนี้คุณสามารถเข้าถึงสิ่งนี้ได้หลายวิธี: การสร้างคุณสมบัติเวกเตอร์ + การจำแนกมาตรฐานการเรียนรู้กฎการเชื่อมโยง HMM ฯลฯ

ในกรณีนี้ฉันอยากรู้ว่าเครือข่ายที่ใช้ LSTM จะเหมาะสมที่สุดอย่างไร ตรงไปตรงมาคือการทำอะไรบางอย่างเช่นCharparty ของ Karparthyและทำนายเหตุการณ์ต่อไปที่ได้รับประวัติศาสตร์ จากนั้นสำหรับลำดับใหม่

C, Z, Q, V, V, ... , V, W

คุณสามารถเรียกใช้ผ่านโมเดลและดูว่าเหตุการณ์พิเศษใดที่มีโอกาสมากที่สุดที่จะเกิดขึ้นต่อไป แต่มันก็ไม่ได้รู้สึกว่าเหมาะสม

ตั้งแต่นี้เป็นปัญหาที่จำแนกชั่วดูเหมือนว่าสิ่งที่เหมาะสมที่จะทำก็คือการใช้ Connectionist Temporal การจำแนกประเภทตามที่อธิบายไว้โดยอเล็กซ์เกรฟส์

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

ดังนั้นคำถาม (ย่อย) ของฉันคือ:

  1. จากปัญหาข้างต้นและฉันต้องการทดสอบกับ LSTMs มันคุ้มค่าที่จะลองวิธีพิมพ์ char-rnn ฉันควรกัดกระสุนและไปจับกับ CTC หรือมีจุดเริ่มต้นที่ดีกว่า
  2. คุณจะรวมข้อมูลเวลาระหว่างเหตุการณ์อย่างไร การใช้นาฬิกาตายตัวกับเหตุการณ์ที่ไม่มี op ทำงานชัดเจน แต่ดูเหมือนว่าน่าเกลียด
  3. สมมติว่าฉันจัดการฝึก LSTM มีวิธีตรวจสอบโมเดลเพื่อดูว่า 'motifs' ที่หยิบขึ้นมาเป็นอย่างไร (เช่นคล้ายกับตัวกรองใน Convnets)

โค้ดตัวอย่างใด ๆ (แนะนำให้ใช้กับงูหลาม) มีประโยชน์เสมอ

แก้ไข:เพียงเพิ่มที่มีเสียงรบกวนในลำดับ เหตุการณ์บางอย่างสามารถเพิกเฉยได้อย่างปลอดภัย แต่สิ่งที่ไม่สามารถพูดได้ล่วงหน้า ดังนั้นรูปแบบที่ดีเลิศ (และลวดลายที่ได้จากมัน) นั้นแข็งแกร่งต่อสิ่งนี้


ชุดข้อมูลประเภทใด
pir

@ felbo: ​​ฉันไม่สามารถพูดได้อย่างชัดเจน แต่น่าเสียดายที่ข้อมูลจากฮาร์ดแวร์ไม่ใช่ทางการเงิน / การขาย / โฆษณา / ..
dgorissen

ตกลง. ที่จริงแล้วการเข้ารหัสแบบร้อนแรง (ในคำตอบของฉัน) อาจเป็นปัญหาหากคุณมีประเภทเหตุการณ์ ~ 10k คุณอาจจะทำอะไรสักอย่างตามบรรทัดของ word2vec เพื่อให้คุณมีขนาดอินพุตเพียง 300 เท่านั้น ในทำนองเดียวกันอาจเป็นปัญหาในการทำนายประเภทเหตุการณ์ถัดไปจากตัวเลือก 10k แต่จะเหมาะสมกว่าที่จะคาดเดาปัญหาใหม่เพียงทำนาย 100 ชนิดพิเศษจากนั้นเป็นคลาส 'เหตุการณ์ปกติ' สำหรับเหตุการณ์ปกติ 10k ทั้งหมด
pir

เพื่อให้ชัดเจน: ฉันถือว่าคุณมีข้อมูลเป็นตันสำหรับปัญหาประเภทนี้
pir

@felbo: ​​แน่นอน เคยคิดเพียงแค่ใช้ดัชนีเรียนรู้การฝังเวกเตอร์เช่น word2vec หรือจัดกลุ่มกิจกรรมในชั้นเรียนเพื่อลดมิติข้อมูล คล้ายกันกับด้านการทำนายเห็นด้วย
dgorissen

คำตอบ:


4

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

การรับรองเหล่านี้จะเป็นแม่ลายของคุณ

Ref:

Bahdanau, D. , Cho, K. , & Bengio, Y. (2014) การแปลภาษาด้วยระบบประสาทโดยการเรียนรู้ร่วมกันเพื่อจัดและแปล พิมพ์ล่วงหน้า arXiv arXiv: 1409.0473

Srivastava, N. , Mansimov, E. , & Salakhutdinov, R. (2015) การเรียนรู้การแสดงวิดีโอโดยใช้ LSTM แบบไม่สนับสนุน พิมพ์ล่วงหน้า arXiv arXiv: 1502.04681


1

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

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

ฉันไม่ทราบวิธีใด ๆ ในการมองเห็นภาพสำคัญโดย "การคลี่คลาย" ธรรมชาติของเครือข่าย คุณอาจจะสามารถสร้างแรงจูงใจบางอย่างโดยใช้เครือข่ายกำเนิด แต่มันอาจเป็นเรื่องยากที่จะตีความ วิธีหนึ่งในการสำรวจลวดลายอาจเป็นการหาลำดับที่พบบ่อยที่สุดของเหตุการณ์ที่ไม่เป็นพิเศษเช่นความยาว 20-100 ลำดับสูงสุด 100000 ใส่เข้าไปในแบบจำลองที่ผ่านการฝึกอบรม ด้วยวิธีนี้คุณสามารถค้นหาลำดับที่เชื่อมต่อกับกิจกรรมพิเศษบางอย่าง อย่างไรก็ตามเป็นเรื่องยากที่จะบอกว่าวิธีการบรรทัดฐานนี้เป็นไปได้ / มีประโยชน์โดยไม่ต้องดูข้อมูลของคุณ


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

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

1
โปรดดูคำตอบที่อัปเดตของฉัน ใช่ฉันหมายถึงการได้เห็นว่า "การคาดการณ์เหตุการณ์พิเศษสูงสุด" ขึ้นอยู่กับข้อมูลดิบ ฉันไม่เข้าใจสิ่งที่คุณหมายเกี่ยวกับการแสวงหามันเป็นปัญหาการจำแนกมาตรฐาน :)
pir
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.