Human-gated DAgger ครบทั้งกระบวนการ

เข้าควบคุมทันทีที่ policy ทำพลาด แล้วนำการแก้ไขนั้นไปเทรนต่อ

policy ที่เทรนด้วย behavior cloning รู้จักเฉพาะสถานะที่ปรากฏในข้อมูลสาธิตของคุณเท่านั้น DAgger ปิดช่องว่างนี้ด้วยข้อมูลจากสถานะที่ policy เองไปถึง AY-Robots รันลูปทั้งหมดบนแขนกล SO-100 คือขับ checkpoint เข้าควบคุมกลางรัน เก็บ episode ที่แก้ไขไว้ ประกอบชุดข้อมูลผสม แล้วเทรนต่อจาก checkpoint ที่เพิ่งขับไป

  • HG-DAgger แบบ human-gated
  • SO-100 / SO-101
  • ACT, SmolVLA, Pi0, GR00T N1.5 / N1.7
  • Intervention rate ต่อรอบ

ทำไม policy ที่เทรนแล้วจึงทำสิ่งที่ไม่เคยถูกสาธิตไว้

Behavior cloning มองการควบคุมเป็นการเรียนรู้แบบมีผู้สอน (supervised learning) ธรรมดา คือรับ observation เข้ามาแล้วให้ joint target ออกไป ปรับให้เข้ากับเฟรมที่มนุษย์บันทึกไว้ วิธีนี้ใช้ได้จริงก็ต่อเมื่อหุ่นยนต์อยู่ในสถานะที่มนุษย์เคยไปถึงเท่านั้น ซึ่งในความเป็นจริงไม่เป็นเช่นนั้น ตัวจับ (gripper) ที่ปิดเร็วไปสี่สิบมิลลิวินาทีจะดันลูกบาศก์ให้เบี่ยงจากท่าที่สาธิตไว้ไปสองมิลลิเมตร observation ถัดไปจึงเป็นสิ่งที่ไม่มีอยู่ในชุดข้อมูลฝึก การกระทำ ณ จุดนั้นจึงเป็นการประมาณค่านอกช่วง (extrapolation) และสถานะถัดจากนั้นก็ยิ่งเบี่ยงออกไปไกลกว่าเดิม การกระจายตัวของข้อมูลฝึกกับการกระจายตัวที่ policy ที่เรียนรู้แล้วสร้างขึ้นจริงเป็นคนละเรื่องกัน และการกระจายตัวแบบหลังจะยิ่งห่างจากแบบแรกมากขึ้นเรื่อยๆ ตลอด episode

Ross, Gordon และ Bagnell อธิบายความล้มเหลวของการลดทอนปัญหานี้ไว้ในปี 2011 และวัดความเสียหายออกมาเป็นตัวเลข ตัวจำแนก (classifier) ที่ผิดพลาดด้วยความน่าจะเป็น e ภายใต้การกระจายตัวของผู้เชี่ยวชาญ อาจทำผิดพลาดในระดับ T ยกกำลังสองคูณ e ครั้ง ตลอดขอบเขต (horizon) T ขั้นตอน ภายใต้การกระจายตัวที่มันสร้างขึ้นเอง เพราะความผิดพลาดครั้งหนึ่งทำให้เกิด observation ที่ผู้เชี่ยวชาญไม่เคยสร้างขึ้น และความผิดพลาดก็สะสมพอกพูนต่อกัน ทางแก้ของพวกเขาคืออัลกอริทึมที่หน้านี้พูดถึง คือรัน policy ปัจจุบัน เก็บ label จากผู้เชี่ยวชาญสำหรับสถานะที่มันไปถึง รวมเข้ากับทุกอย่างที่เก็บมาก่อนหน้านี้ เทรนใหม่ แล้วทำซ้ำ การสาธิตเพิ่มเติมแบบเดิมไม่ช่วยอะไร เพราะเป็นการสุ่มตัวอย่างซ้ำจากการกระจายตัวเดิม แต่ label จากสถานะที่ policy ไปถึงช่วยได้ ตัวแปรที่ใช้งานที่นี่เป็นแบบ human-gated (HG-DAgger, Kelly et al.) คือ policy ยังคุมอยู่จนกว่าคนจะตัดสินใจว่ามันกำลังพลาดแล้วเข้าควบคุม การแก้ไขจึงเกิดขึ้นเฉพาะจุดที่จำเป็นเท่านั้น และแขนกลจะไม่ถูกปล่อยให้เข้าไปในสถานะที่ผู้ควบคุมจะไม่ยอมให้เกิดขึ้น

  • Behavior cloning ใช้ได้ผลเฉพาะบนการกระจายตัวของสถานะที่มันถูกเทรนมาเท่านั้น
  • ความผิดพลาดขยายตัวเอง: การเบี่ยงเบนเล็กน้อยสร้างสถานะที่ไม่คุ้นเคย ซึ่งสร้างการเบี่ยงเบนที่ใหญ่ขึ้นไปอีก
  • ทางแก้ไม่ใช่การสาธิตเพิ่ม แต่คือ label บนสถานะที่ policy เองไปถึง
  • Human-gated หมายถึงผู้ควบคุมเป็นผู้ตัดสินใจว่าจะเข้าแทรกแซงเมื่อใด ไม่ใช่คะแนนความเป็นอิสระของระบบ

ทำไมความผิดพลาดถึงสะสมพอกพูน

ลากตัวเลื่อน horizon ภายใต้ behavior cloning ต้นทุนส่วนเกินที่คาดหวังไว้จะเพิ่มขึ้นในอัตราประมาณกำลังสองของจำนวนขั้นตอน เพราะความผิดพลาดแต่ละครั้งสร้างสถานะที่การสาธิตไม่เคยครอบคลุมถึง ส่วนลูปแบบ aggregation จะรักษาการเติบโตให้ใกล้เคียงเชิงเส้น (Ross et al., 2011)

200
1.0 %
Behavior cloning
400
DAgger
2.00
200×
Behavior cloning ÷ DAgger
0.000100200300400050100150200ต้นทุนส่วนเกินที่คาดหวัง (ขอบเขตบน)
Horizon ของงาน (ขั้นตอน)

กราฟตัวอย่างจากขอบเขตในงานของ Ross et al. (2011) ไม่ใช่ค่าที่วัดจากหุ่นยนต์ของคุณ ประเด็นอยู่ที่รูปทรงของกราฟ ไม่ใช่ตัวเลข

หนึ่งรอบของ DAgger ในหกขั้นตอน

นี่คือลูปตามที่แพลตฟอร์มรันจริง ไม่ใช่แผนผังคร่าวๆ แต่ละขั้นตอนด้านล่างตรงกับปุ่มควบคุมหนึ่งจุดใน cockpit

ไล่ดูลูปทีละขั้นตอน

หกขั้นตอนเดิม ทีละขั้น พร้อมสิ่งที่เกิดขึ้นกับแขนกลและกับ dataset ในแต่ละขั้นตอน

01

รัน policy และบันทึกไว้

เริ่มรัน inference กับ checkpoint ที่คุณเทรนไว้ ระบบจะบันทึกระหว่างที่รันอยู่ พร้อมข้อความงาน (task text) ของรันนั้นเอง เพื่อให้เฟรมที่ได้นำไปใช้เป็นข้อมูลฝึกต่อได้จริง แทนที่จะเป็นแค่วิดีโอไว้ดูอย่างเดียว

1 จาก 6

สิ่งที่แพลตฟอร์มทำแทนคุณ

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

เข้าควบคุมโดยไม่ต้องมี leader arm

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

เอกสาร Teleoperation

ทำเครื่องหมาย intervention ทีละเฟรม

ทุกเฟรมที่บันทึกระหว่างที่คุณถือครองแขนกลจะมี intervention flag ติดอยู่ และคอลัมน์ action จะมีท่าที่สั่งไว้เต็มรูปแบบ คุณไม่ต้องดูแลคอลัมน์ flag ด้วยมือ หรือมาจัดให้ตรงกับ frame index ทีหลัง

รูปแบบ LeRobot dataset

คัดกรอง: Correction, Evaluation หรือทิ้ง

แต่ละรันได้รับการตัดสินใจหนึ่งอย่างบน save card รันที่เป็น correction จะป้อนเข้ารอบเทรนถัดไป รันที่เป็น evaluation จะอยู่นอกการเทรนเพื่อให้ยังเป็นการวัดผลที่สะอาด ส่วนรันที่แย่จะถูกกำจัดไป แทนที่จะแอบปนเปื้อนชุดข้อมูลผสมอย่างเงียบๆ

Sessions และ episodes

ประกอบชุดผสมอย่างชัดเจน

ชุดฝึกสำหรับรอบที่ n ประกอบขึ้นโดยคุณเอง: dataset ต้นฉบับบวกกับการแก้ไข เลือก episode ตามแหล่งที่มาแต่ละแหล่ง ไม่มีการผสมอัตโนมัติ ไม่มีข้อมูลจำลองที่ซ่อนอยู่ และผลลัพธ์ที่ประกอบขึ้นก็ทำงานเหมือน dataset อื่นๆ ทุกประการ

ชุดข้อมูล

เทรนต่อจาก checkpoint

ชี้รันการเทรนไปที่ checkpoint ที่คุณเพิ่งขับ แทนที่จะเป็น base model เพื่อให้แต่ละรอบเริ่มจากจุดที่รอบก่อนจบไว้ มันกำหนดค่าเริ่มต้นเฉพาะ weight เท่านั้น สถานะของ optimizer จะไม่ถูกกู้คืน ด้วยเหตุนี้รอบแรกจึงควรมองเป็นการทดสอบความเป็นไปได้ (feasibility test)

Training

เช่า GPU เป็นรายรอบ

ACT และ SmolVLA รันบน 4090 ส่วน Pi0 และ GR00T N1.5 หรือ N1.7 รันบน A100 ขนาด 80 GB คุณเริ่มรอบ pod ก็จะขึ้นมา checkpoint จะไปลงที่ bucket ของคุณ และคุณจ่ายตามจำนวนชั่วโมงที่รอบนั้นใช้ไป

ราคา GPU

วางแผนรอบของคุณ

Intervention rate คือตัวชี้วัดความคืบหน้าของลูป: เฟรมที่แก้ไขหารด้วยเฟรมทั้งหมดของรัน ตั้งค่าจุดเริ่มต้นและผลที่แต่ละรอบให้ได้ แล้วดูว่าต้องใช้กี่รอบถึงจะถึงเป้าหมายที่ต้องการ

30 %
25 %
3 000
รอบIntervention rateเฟรมที่แก้ไขแล้ว
1
30.0%
900
2
22.5%
675
3
16.9%
506
4
12.7%
380
5
9.5%
285
6
7.1%
214
Σ2 960

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

สร้างลูปเองเทียบกับรันที่นี่

ไม่มีข้อไหนที่ทำเองไม่ได้ทั้งหมด คำถามอยู่ที่ว่าจะเสียเวลากี่ค่ำคืนไปกับงานโครงสร้างพื้นฐานแทนที่จะเป็นรอบจริง และมีอยู่หนึ่งแถวที่การทำเองชัดเจนว่าดีกว่า

ขั้นตอนของลูปตั้งค่าเองบน AY-Robots
เข้าควบคุมกลางรันต้องมี leader arm หรือเขียนโค้ดของตัวเองบน servo bus การเข้าควบคุมด้วยคีย์บอร์ดและ slider รวมถึงขีดจำกัดความปลอดภัย เป็นสิ่งที่คุณต้องเขียนแล้วดีบักบนฮาร์ดแวร์จริงเองLeader arm, คีย์บอร์ด หรือ slider เลือกได้ตอนเริ่มรัน การจำกัดมุมอยู่ที่เซิร์ฟเวอร์
ทำเครื่องหมาย interventionคุณต้องเพิ่มคอลัมน์ flag เอง จัดให้ตรงกับ frame index และตรวจสอบใหม่ทุกครั้งที่รูปแบบการบันทึกเปลี่ยนทุกเฟรมที่บันทึกระหว่างการเข้าควบคุมจะถูกทำเครื่องหมายอัตโนมัติ พร้อมท่าที่สั่งไว้ในคอลัมน์ action
จัดเรียงรันใช้กฎการตั้งชื่อไดเรกทอรีและ shell script เฟรมนิ่งรอบๆ จุดส่งมอบต้องหาและกรองออกเองตัดสินใจหนึ่งครั้งต่อรันบน save card เฟรมช่วงส่งมอบจะอยู่ใน raw directory
สร้าง dataset ผสมเขียน merge script ตามแต่ละเวอร์ชันของฟอร์แมต ส่วนที่น่าเบื่อคือทำให้ episode index, metadata และการอ้างอิงวิดีโอสอดคล้องกันประกอบจากต้นฉบับบวกการแก้ไข พร้อมเลือก episode ตามแหล่งที่มา ผลลัพธ์คือ dataset ปกติ
เริ่มรอบถัดไปจาก policy ล่าสุดคุณต่อ checkpoint เข้ากับ trainer เอง และยังกู้คืนสถานะ optimizer ได้ด้วยถ้าต้องการ resume แบบแท้จริงมีช่องเดียวสำหรับ base checkpoint เฉพาะ weight เท่านั้น: กำหนดค่าเริ่มต้นจาก checkpoint ไม่ใช่ optimizer resume
ควบคุมลูปการเทรนควบคุมได้เต็มที่ ทั้ง loss ตารางเวลา ablation และเครื่องมือวัดผลของคุณเอง ไม่มีแพลตฟอร์มมาขวางกลาง ถ้าคำถามวิจัยคือตัวลูปการเทรนเอง ให้ทำมันด้วยมือเส้นทางที่ตายตัว มีรายชื่อ policy ที่กำหนดไว้และ hyperparameter ที่ฟอร์มเปิดให้ปรับ ไม่ใช่โค้ดที่เขียนเองได้ตามใจ

งานวิจัยที่เป็นพื้นฐานของหน้านี้

อ่านงานเหล่านี้ก่อนจะโต้แย้งกับลูป แต่ละลิงก์เชื่อมไปยังหน้า abstract ไม่ใช่หน้าที่ต้องจ่ายเงิน

  1. A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning

    Stephane Ross, Geoffrey J. Gordon, J. Andrew Bagnell · 2011 · AISTATS 2011 (PMLR 15)

    งานต้นฉบับของ DAgger: ระบุปัญหาความผิดพลาดสะสม ให้ขอบเขต T-squared สำหรับแนวทาง supervised ธรรมดา และเสนอให้รวบรวมข้อมูลจากสถานะที่ผู้เรียนรู้เองไปถึง

  2. HG-DAgger: Interactive Imitation Learning with Human Experts

    Michael Kelly, Chelsea Sidrane, Katherine Driggs-Campbell, Mykel J. Kochenderfer · 2019 · arXiv:1810.02890, ICRA 2019

    ตัวแปรแบบ human-gated: ผู้เชี่ยวชาญเป็นผู้ตัดสินใจว่าจะเข้าควบคุมเมื่อใด แทนที่จะถูกถามเกี่ยวกับสถานะที่ policy เลือกไว้ ซึ่งเป็นโหมดที่แพลตฟอร์มนี้นำมาใช้จริง

  3. EnsembleDAgger: A Bayesian Approach to Safe Imitation Learning

    Kunal Menda, Katherine Driggs-Campbell, Mykel J. Kochenderfer · 2019 · arXiv:1807.08364, IROS 2019

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

  4. ThriftyDAgger: Budget-Aware Novelty and Risk Gating for Interactive Imitation Learning

    Ryan Hoque, Ashwin Balakrishna, Ellen Novoseller, Albert Wilcox, Daniel S. Brown, Ken Goldberg · 2021 · CoRL 2021

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

  5. DART: Noise Injection for Robust Imitation Learning

    Michael Laskey, Jonathan Lee, Roy Fox, Anca Dragan, Ken Goldberg · 2017 · CoRL 2017

    ทางเลือกที่ตรงไปตรงมา: แทนที่จะแก้ไข policy แบบออนไลน์ ให้รบกวน (perturb) การสาธิตเพื่อให้ผู้เชี่ยวชาญแสดงวิธีกู้คืนสถานะ ควรรู้ไว้ก่อนตัดสินใจใช้การเข้าแทรกแซง

  6. Interactive Imitation Learning in Robotics: A Survey

    Carlos Celemin, Rodrigo Perez-Dattari, Eugenio Chisari, Giovanni Franzese, Leandro de Souza Rosa, Ravi Prakash, Zlatan Ajanovic, Marta Ferraz, Abhinav Valada, Jens Kober · 2022 · arXiv:2211.00600

    แผนที่ของสาขานี้: feedback จากมนุษย์มีรูปแบบใดบ้าง อินเทอร์เฟซใดที่รองรับ และการเข้าแทรกแซงแบบ DAgger อยู่ตรงไหนในภาพรวมนั้น

  7. Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware

    Tony Z. Zhao, Vikash Kumar, Sergey Levine, Chelsea Finn · 2023 · arXiv:2304.13705

    งานวิจัยของ ACT action chunking คือเหตุผลที่แขนกลราคาถูกสามารถถูกขับด้วย imitation policy ได้เลย และ ACT ก็เป็น policy ที่ทำรอบ DAgger ได้เร็วที่สุด

  8. π0: A Vision-Language-Action Flow Model for General Robot Control

    Kevin Black, Noah Brown, Danny Driess, Adnan Esmail, Michael Equi, Chelsea Finn et al. · 2024 · arXiv:2410.24164

    VLA แบบ flow-matching ที่สร้างบนโมเดล vision-language ที่เทรนไว้ล่วงหน้า และเป็นหนึ่งใน checkpoint ที่คุณสามารถ fine-tune ได้ที่นี่ งานวิจัยระบุชัดเจนว่าทักษะใหม่มาจากการ fine-tuning ไม่ใช่จาก base model เพียงอย่างเดียว

คำถามที่คนถามจริงๆ

ต้องมี leader arm สำหรับ DAgger ไหม

ไม่จำเป็น เลือกป้อนข้อมูลด้วยคีย์บอร์ดหรือ slider ตอนเริ่มรัน แล้วการเข้าควบคุมจะเป็น manual ตั้งแต่เฟรมแรก ขับผ่านเบราว์เซอร์ leader arm จะสบายกว่าสำหรับการเคลื่อนไหวละเอียด และเป็นโหมดเดียวที่แขนกลจัดท่าตัวเองก่อนส่งมอบการควบคุม แต่ลูปก็รันได้โดยไม่ต้องมีมัน

ต้องใช้ DAgger กี่รอบ

ไม่มีตัวเลขตายตัวที่บอกได้ตรงๆ ให้จับตาดู intervention rate: ถ้ามันไม่ลดลงจากรอบหนึ่งไปอีกรอบ แสดงว่ารอบนั้นไม่ได้อะไรเลย และปัญหามักอยู่ที่การตั้งค่างาน กล้อง หรือ dataset ต้นฉบับ มากกว่าจำนวนรอบ

นี่คือ DAgger จริงๆ หรือแค่คล้ายๆ

นี่คือ HG-DAgger ตัวแปรแบบ human-gated DAgger แบบดั้งเดิมจะถามผู้เชี่ยวชาญเกี่ยวกับสถานะที่ policy เลือกไว้ รวมถึงสถานะที่ไม่มีผู้ควบคุมคนไหนยอมให้แขนกลจริงไปถึง ที่นี่คนเป็นผู้ตัดสินใจว่าจะเข้าแทรกแซงเมื่อใด และมีเฉพาะช่วงเหล่านั้นเท่านั้นที่กลายเป็น label

เทรนเฉพาะบนการแก้ไขเท่านั้นหรือไม่

ไม่ และไม่ควรทำแบบนั้นด้วย การเทรนบนการแก้ไขเพียงอย่างเดียวจะได้ policy ที่รู้แต่วิธีกู้คืนสถานะเท่านั้น dataset ที่ประกอบขึ้นคือข้อมูลต้นฉบับบวกกับการแก้ไข โดยเลือก episode จากแต่ละแหล่งอย่างชัดเจน

การเทรนต่อจาก checkpoint คือการ resume รันการเทรนหรือไม่

มันกำหนดค่าเริ่มต้นของ weight จาก checkpoint นั้น สถานะของ optimizer จะไม่ถูกกู้คืน ดังนั้นในความหมายที่เคร่งครัดจึงไม่ใช่การ resume ในทางปฏิบัติ weight คือสิ่งที่พาพฤติกรรมที่เรียนรู้ไว้ข้ามรอบไป แต่ก็ควรรู้ไว้ว่ากำลังได้อะไรจากสองอย่างนี้

คำนวณ intervention rate อย่างไร

เฟรมที่ทำเครื่องหมายเป็น intervention หารด้วยจำนวนเฟรมทั้งหมดของรัน ค่านี้แสดงอยู่ใน takeover status และเป็นตัวเลขเดียวที่ควรจดไว้ในแต่ละรอบ คู่กับ checkpoint ที่ขับและชุดผสมที่เทรน

ใช้ policy ไหนกับลูปนี้ได้บ้าง

ACT, SmolVLA, Pi0 และ GR00T N1.5 หรือ N1.7 ตัวลูปเองไม่ขึ้นกับ policy ใดโดยเฉพาะ เพราะมันแค่สร้าง dataset และ checkpoint ออกมาเท่านั้น ความต่างในทางปฏิบัติอยู่ที่แต่ละรอบใช้เวลานานแค่ไหนและต้องใช้ GPU แบบไหน

ทำแบบนี้ได้ไหมถ้าไม่มีหุ่นยนต์เป็นของตัวเอง

บันทึกและเทรนได้โดยไม่ต้องมีหุ่นยนต์เอง ด้วยการซื้อ dataset จากตลาดหรือจ้างผู้ควบคุม และคุณสามารถขับ SO-100 จริงผ่านเบราว์เซอร์ได้ที่หน้า live แต่รอบ DAgger นั้นต่างออกไป มันต้องการแขนกลที่คุณเข้าควบคุมกลางรันได้ ดังนั้นสำหรับตัวลูปเองแล้วคุณต้องการฮาร์ดแวร์อยู่บนโต๊ะของคุณเอง

Drive a real arm

A real SO-100, live in the browser. No signup, no hardware needed.

รันรอบแรกของคุณในสัปดาห์นี้

ติดตั้ง client ขับ checkpoint ที่มีอยู่แล้ว แล้วเข้าควบคุมทันทีที่แขนกลเอื้อมเลยลูกบาศก์ไปครั้งแรก รันเดียวนั้นก็คือ DAgger round แบบย่อส่วนอยู่แล้ว ที่เหลือหลังจากนั้นคือการประกอบชุดผสมและจ่ายค่าชั่วโมง GPU