Tiếp quản khi policy làm sai, rồi huấn luyện đúng trên phần bạn đã sửa.
Một policy được huấn luyện bằng behavior cloning chỉ biết các trạng thái xuất hiện trong bản trình diễn của bạn. DAgger lấp khoảng trống đó bằng dữ liệu từ các trạng thái mà chính policy đi tới. AY-Robots chạy toàn bộ vòng lặp này trên một SO-100: điều khiển một checkpoint, tiếp quản giữa lượt chạy, giữ lại các episode đã sửa, soạn tập hợp, và huấn luyện tiếp từ đúng checkpoint bạn vừa điều khiển.
- HG-DAgger, human-gated
- SO-100 / SO-101
- ACT, SmolVLA, Pi0, GR00T N1.5 / N1.7
- Tỷ lệ can thiệp mỗi vòng
Vì sao một policy đã huấn luyện lại làm điều chưa từng được trình diễn
Behavior cloning coi việc điều khiển như một bài toán học có giám sát thông thường: đưa vào quan sát, đưa ra mục tiêu khớp, khớp theo các khung hình do con người ghi lại. Điều đó chỉ đúng khi robot còn ở trong các trạng thái mà con người đã đi qua, và thực tế nó không như vậy. Một bộ kẹp đóng sớm bốn mươi mili giây sẽ đẩy khối lập phương lệch hai milimét khỏi vị trí đã trình diễn. Quan sát kế tiếp là một quan sát mà tập huấn luyện không chứa, nên hành động tại đó là một sự ngoại suy, và trạng thái sau đó lại càng nằm xa hơn nữa. Phân phối huấn luyện và phân phối mà policy đã học thực sự tạo ra là hai thứ khác nhau, và cái thứ hai trôi dần xa khỏi cái thứ nhất trong suốt episode.
Ross, Gordon và Bagnell đã mô tả chính xác kiểu thất bại rút gọn này vào năm 2011 và định lượng mức thiệt hại: một bộ phân loại mắc lỗi với xác suất e dưới phân phối của chuyên gia có thể mắc tới khoảng T bình phương lần e lỗi trong một khoảng thời gian T bước dưới phân phối mà chính nó tạo ra, vì một lỗi sẽ sinh ra các quan sát mà chuyên gia chưa bao giờ tạo ra, và các lỗi cứ thế chồng lên nhau. Cách khắc phục của họ chính là thuật toán mà trang này nói tới. Chạy policy hiện tại, thu thập nhãn chuyên gia cho các trạng thái nó đi qua, gộp chúng với tất cả những gì đã thu thập từ trước, huấn luyện lại, rồi lặp lại. Có thêm bản trình diễn cùng loại không giúp được gì, vì chúng chỉ lấy mẫu lại từ cùng một phân phối. Nhãn trên các trạng thái mà policy thực sự đi tới thì có ích. Biến thể được triển khai ở đây là human-gated (HG-DAgger, Kelly và cộng sự): policy giữ quyền điều khiển cho đến khi một người quyết định rằng nó đang đi sai và tiếp quản, nên các bản sửa lỗi chỉ được tạo ra ở nơi thực sự cần, và cánh tay không bao giờ bị buộc đi vào một trạng thái mà người điều khiển sẽ không cho phép.
- Behavior cloning chỉ đúng trên phân phối trạng thái mà nó được huấn luyện.
- Lỗi tự khuếch đại: một sai lệch nhỏ tạo ra một trạng thái lạ, trạng thái lạ đó lại tạo ra một sai lệch lớn hơn.
- Cách khắc phục không phải là thêm bản trình diễn, mà là nhãn trên các trạng thái mà chính policy đi tới.
- Human-gated có nghĩa là người điều khiển quyết định thời điểm can thiệp, không phải một điểm số tự động.
Vì sao lỗi cứ chồng lên nhau
Kéo thanh trượt để thay đổi horizon. Với behavior cloning, chi phí phụ trội kỳ vọng tăng gần như theo bình phương số bước, vì mỗi lỗi lại tạo ra các trạng thái mà bản trình diễn chưa bao giờ đi qua; một vòng lặp tổng hợp dữ liệu giữ cho mức tăng gần như tuyến tính (Ross và cộng sự, 2011).
Đường minh họa dựa trên các giới hạn trong Ross và cộng sự (2011), không phải số đo từ robot của bạn. Điều quan trọng là hình dạng của đường cong, không phải các con số.
Một vòng DAgger, sáu bước
Đây là vòng lặp đúng như nền tảng thực sự chạy nó, không phải một sơ đồ. Mỗi bước dưới đây tương ứng với một điều khiển trong cockpit.
Đi qua từng bước của vòng lặp
Cùng sáu bước đó, lần lượt từng bước, cùng với những gì xảy ra trên cánh tay và trong tập dữ liệu ở mỗi bước.
Chạy policy và ghi lại
Bắt đầu một lượt chạy suy luận với một checkpoint bạn đã huấn luyện. Lượt chạy được ghi lại ngay trong lúc diễn ra, cùng với văn bản nhiệm vụ của chính lượt chạy đó, để sau này các khung hình có thể dùng làm dữ liệu huấn luyện thay vì chỉ là một video để xem lại.
Tiếp quản và sửa lỗi
Ngay khi cánh tay làm sai, nhấn Tiếp quản. Runner tạm dừng và cánh tay thuộc về bạn. Với leader arm, nó sẽ tự di chuyển tới đúng pose của follower trước rồi mới trao quyền điều khiển; với đầu vào bàn phím hoặc slider, được chọn từ lúc bắt đầu lượt chạy, việc tiếp quản là thủ công ngay lập tức. Sửa chuyển động, rồi trả quyền điều khiển lại cho policy. Các khung hình được ghi trong lúc tiếp quản sẽ tự động được đánh dấu là can thiệp.
Phân loại lượt chạy
Quyết định cho từng lượt chạy: lưu nó như một bản sửa lỗi, giữ nó như một lượt chạy đánh giá, hoặc bỏ đi. Các khung hình đứng hình quanh thời điểm chuyển giao vẫn nằm trong thư mục raw và không bao giờ vào tập dữ liệu.
Đồng bộ tập dữ liệu sửa lỗi
Các bản sửa lỗi được tập hợp trong một tập dữ liệu sửa lỗi riêng cho từng policy và được đưa vào bucket của bạn qua đồng bộ cloud tự động. Ở giai đoạn này chưa có gì được gộp vào đâu cả; các bản sửa lỗi đơn giản là một tập dữ liệu riêng của chính nó.
Tự soạn tập hợp
Dùng Compose dataset để xây tập huấn luyện cho vòng tiếp theo: tập dữ liệu gốc cộng với các bản sửa lỗi, với episode được chọn rõ ràng theo từng nguồn. Kết quả là một tập dữ liệu bình thường, đồng bộ và huấn luyện như bất kỳ tập dữ liệu nào khác. Không có gì bị trộn vào sau lưng bạn, và không có dữ liệu mô phỏng nào được thêm vào tự động.
Huấn luyện tiếp từ checkpoint
Huấn luyện tập dữ liệu đã soạn bằng Continue from checkpoint thay vì bắt đầu từ mô hình gốc, để vòng mới bắt đầu ngay từ policy bạn vừa điều khiển. Nói chính xác: việc này khởi tạo trọng số từ checkpoint đó, không phải là tiếp tục lại optimizer.
Những gì nền tảng làm thay bạn
Mỗi mục ở đây là một bước của vòng lặp mà nếu không thì bạn phải tự xây và tự duy trì.
Tiếp quản không cần leader arm
Chọn đầu vào bàn phím hoặc slider khi bắt đầu lượt chạy, thế là chỉ cần một laptop cũng đủ để sửa lỗi. Các bước nhích bằng bàn phím bị chặn cứng ở phía server tối đa hai độ mỗi khớp và bốn độ ở gripper; các mục tiêu của slider là giá trị tuyệt đối, và server di chuyển tối đa sáu độ về hướng đó mỗi lần gọi. Giới hạn này được áp ở phía server, không phải ở giao diện, nên một phím bị kẹt không thể làm cánh tay giật mạnh.
Docs về teleoperationCan thiệp được đánh dấu theo từng khung hình
Mọi khung hình được ghi trong lúc bạn giữ quyền điều khiển cánh tay đều mang một cờ can thiệp, và cột action chứa đầy đủ pose đã ra lệnh. Bạn không phải tự duy trì một cột cờ bằng tay hay căn nó theo chỉ số khung hình về sau.
Định dạng tập dữ liệu LeRobot (tiếng Anh)Phân loại: sửa lỗi, đánh giá, hoặc bỏ
Mỗi lượt chạy nhận đúng một quyết định trên thẻ lưu. Các lượt chạy sửa lỗi cấp dữ liệu cho vòng huấn luyện tiếp theo, các lượt chạy đánh giá đứng ngoài việc huấn luyện để vẫn là một phép đo sạch, còn các lượt chạy tệ thì biến mất thay vì lặng lẽ làm hỏng tập hợp.
Sessions và episodesSoạn tập hợp một cách rõ ràng
Tập huấn luyện cho vòng n do chính bạn dựng lên: tập dữ liệu gốc cộng với các bản sửa lỗi, episode được chọn theo từng nguồn. Không có trộn tự động, không có dữ liệu mô phỏng ẩn, và kết quả sau khi soạn hoạt động như bất kỳ tập dữ liệu nào khác.
DatasetsTiếp tục từ một checkpoint
Hướng một lượt huấn luyện vào checkpoint bạn vừa điều khiển thay vì mô hình gốc, để mỗi vòng bắt đầu đúng nơi vòng trước kết thúc. Việc này chỉ khởi tạo trọng số; trạng thái optimizer không được phục hồi, đó là lý do vòng đầu tiên nên được coi là một bài kiểm tra tính khả thi.
TrainingThuê GPU theo từng vòng
ACT và SmolVLA chạy trên 4090, Pi0 và GR00T N1.5 hoặc N1.7 chạy trên A100 80 GB. Bạn bắt đầu một vòng, pod khởi động lên, checkpoint đổ vào bucket của bạn, và bạn chỉ trả tiền cho số giờ vòng đó đã dùng.
Giá GPULập kế hoạch cho các vòng
Tỷ lệ can thiệp là chỉ số tiến độ của vòng lặp: số khung hình đã sửa chia cho tổng số khung hình của lượt chạy. Đặt điểm khởi đầu và mức cải thiện mỗi vòng mang lại, rồi xem cần bao nhiêu vòng để đạt tới mục tiêu bạn muốn.
| Vòng | Tỷ lệ can thiệp | Khung hình đã sửa |
|---|---|---|
| 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 | |
Đây là một mô hình, không phải một dự báo. Các vòng thực tế diễn ra thất thường, và một vòng không làm thay đổi tỷ lệ thì chẳng mang lại gì cả; đó chính là tín hiệu đáng theo dõi.
Tự xây vòng lặp so với chạy nó ở đây
Không có gì trong số này là không thể tự làm bằng tay. Vấn đề là bao nhiêu buổi tối bị đổ vào hạ tầng thay vì vào các vòng chạy thật, và có một dòng mà tự làm rõ ràng là lựa chọn tốt hơn.
| Bước của vòng lặp | Tự thiết lập | Trên AY-Robots |
|---|---|---|
| Tiếp quản giữa lượt chạy | Một leader arm, hoặc code riêng của bạn trên servo bus. Tiếp quản bằng bàn phím và slider, kể cả các giới hạn an toàn, là thứ bạn phải viết rồi debug trên phần cứng thật. | Leader arm, bàn phím, hoặc slider, chọn ngay khi lượt chạy bắt đầu. Giới hạn góc nằm trong server. |
| Đánh dấu can thiệp | Bạn thêm cột cờ, giữ nó khớp với chỉ số khung hình, và kiểm tra lại mỗi khi định dạng ghi thay đổi. | Mọi khung hình được ghi trong lúc tiếp quản đều tự động được đánh dấu, kèm pose đã ra lệnh trong cột action. |
| Sắp xếp các lượt chạy | Quy ước thư mục và shell script. Các khung hình đứng hình quanh lúc chuyển giao là việc của bạn phải tìm và loại ra. | Một quyết định cho mỗi lượt chạy trên thẻ lưu. Khung hình chuyển giao vẫn nằm trong thư mục raw. |
| Xây tập dữ liệu hỗn hợp | Script merge riêng cho từng phiên bản định dạng. Phần vất vả là giữ cho chỉ số episode, metadata và tham chiếu video nhất quán với nhau. | Compose từ dữ liệu gốc cộng với các bản sửa lỗi, chọn episode theo từng nguồn; kết quả là một tập dữ liệu bình thường. |
| Bắt đầu vòng tiếp theo từ policy cuối cùng | Bạn tự nối checkpoint vào trainer, và cũng có thể tự phục hồi trạng thái optimizer nếu muốn một sự tiếp tục thực sự. | Một trường cho base checkpoint. Chỉ trọng số: khởi tạo từ checkpoint đó, không phải một optimizer resume. |
| Kiểm soát vòng lặp huấn luyện | Toàn quyền. Loss của bạn, schedule của bạn, ablation của bạn, công cụ đo của bạn, không có nền tảng nào chắn giữa. Nếu câu hỏi nghiên cứu chính là vòng lặp huấn luyện, hãy tự làm bằng tay. | Một lối đi cố định với một danh sách policy nhất định và các hyperparameter mà form cho phép, không phải code tự do. |
Các bài báo mà nền tảng này dựa trên
Đọc những bài này trước khi tranh luận về vòng lặp. Mỗi liên kết dẫn tới trang abstract, không dẫn tới paywall.
- 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)
Bài báo gốc về DAgger: nêu ra vấn đề lỗi tích lũy, đưa ra giới hạn T bình phương cho cách tiếp cận học có giám sát thông thường, và đề xuất tổng hợp dữ liệu từ các trạng thái mà chính người học đi qua.
- HG-DAgger: Interactive Imitation Learning with Human Experts
Michael Kelly, Chelsea Sidrane, Katherine Driggs-Campbell, Mykel J. Kochenderfer · 2019 · arXiv:1810.02890, ICRA 2019
Biến thể human-gated: chuyên gia quyết định khi nào tiếp quản, thay vì bị hỏi ý kiến về các trạng thái mà policy tự chọn; đây chính là chế độ mà nền tảng này triển khai.
- EnsembleDAgger: A Bayesian Approach to Safe Imitation Learning
Kunal Menda, Katherine Driggs-Campbell, Mykel J. Kochenderfer · 2019 · arXiv:1807.08364, IROS 2019
Một cách khác để kiểm soát can thiệp: sự bất đồng giữa các model trong ensemble làm tín hiệu tin cậy cho việc khi nào người học được tự hành động một mình. Một đối chứng hữu ích so với việc để con người tự đánh giá.
- 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
Coi sự chú ý của con người là nguồn lực khan hiếm và chỉ xin trợ giúp ở các trạng thái mới lạ hoặc rủi ro; đây là góc nhìn đúng khi một người phải giám sát cánh tay suốt cả buổi chiều.
- DART: Noise Injection for Robust Imitation Learning
Michael Laskey, Jonathan Lee, Roy Fox, Anca Dragan, Ken Goldberg · 2017 · CoRL 2017
Một lựa chọn thẳng thắn khác: thay vì sửa policy trực tiếp trong lúc chạy, làm nhiễu các bản trình diễn để chuyên gia trình diễn cách phục hồi. Nên biết trước khi bạn quyết định đi theo hướng can thiệp.
- 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
Bản đồ của lĩnh vực này: những dạng phản hồi của con người nào tồn tại, những giao diện nào truyền tải chúng, và can thiệp kiểu DAgger nằm ở đâu trong số đó.
- Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware
Tony Z. Zhao, Vikash Kumar, Sergey Levine, Chelsea Finn · 2023 · arXiv:2304.13705
Bài báo về ACT. Action chunking là lý do vì sao một cánh tay giá rẻ có thể được điều khiển bởi một policy học bắt chước, và ACT là policy nhanh nhất để lặp một vòng DAgger.
- π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
Một VLA dựa trên flow matching, xây trên một vision-language model đã pretrain, và là một trong các checkpoint bạn có thể fine-tune ở đây; bài báo nói rõ rằng các kỹ năng mới đến từ fine-tuning, không phải từ bản thân mô hình gốc.
Những câu hỏi người dùng thực sự hay hỏi
Tôi có cần leader arm để dùng DAgger không?
Không. Chọn đầu vào bàn phím hoặc slider khi bắt đầu lượt chạy, và việc tiếp quản là thủ công ngay từ khung hình đầu tiên, điều khiển từ trình duyệt. Leader arm dễ chịu hơn cho các chuyển động tinh tế, và đó là chế độ duy nhất mà cánh tay tự căn chỉnh trước khi trao quyền, nhưng vòng lặp vẫn chạy được mà không cần nó.
Tôi cần bao nhiêu vòng DAgger?
Không có một con số cố định thực sự nào cả. Theo dõi tỷ lệ can thiệp: nếu nó không giảm từ vòng này sang vòng kế tiếp, vòng đó không mang lại gì, và nguyên nhân thường nằm ở cách thiết lập nhiệm vụ, ở camera, hoặc ở tập dữ liệu gốc, hơn là ở số vòng đã chạy.
Đây có phải là DAgger thật hay chỉ là một phiên bản lỏng hơn?
Đây là HG-DAgger, biến thể human-gated. DAgger cổ điển hỏi ý kiến chuyên gia về các trạng thái mà policy tự chọn, kể cả những trạng thái mà không người điều khiển tỉnh táo nào sẽ để một cánh tay thật đi tới. Ở đây, một con người quyết định thời điểm can thiệp, và chỉ những đoạn đó mới trở thành nhãn.
Tôi có huấn luyện chỉ trên các bản sửa lỗi không?
Không, và bạn cũng không nên làm vậy. Huấn luyện chỉ trên các bản sửa lỗi sẽ cho ra một policy chỉ biết cách phục hồi. Tập dữ liệu đã soạn là dữ liệu gốc cộng với các bản sửa lỗi, với episode từ mỗi nguồn được chọn rõ ràng.
Tiếp tục từ một checkpoint có phải là resume lại lượt huấn luyện không?
Nó khởi tạo trọng số từ checkpoint đó. Trạng thái optimizer không được phục hồi, nên theo nghĩa chặt chẽ đây không phải là một resume. Trong thực tế, trọng số là phần mang hành vi đã học qua vòng huấn luyện, nhưng nên biết rõ bạn đang nhận được cái nào trong hai điều đó.
Tỷ lệ can thiệp được tính như thế nào?
Số khung hình được đánh dấu can thiệp chia cho tổng số khung hình của lượt chạy. Nó được hiển thị trong trạng thái tiếp quản, và là con số duy nhất đáng ghi lại cho mỗi vòng, cùng với checkpoint bạn đã chạy và tập hợp bạn đã huấn luyện.
Tôi có thể chạy vòng lặp này với những policy nào?
ACT, SmolVLA, Pi0, và GR00T N1.5 hoặc N1.7. Vòng lặp tự nó không phụ thuộc vào loại policy vì nó chỉ tạo ra dataset và checkpoint; khác biệt thực tế nằm ở thời gian mỗi vòng cần và loại GPU nó yêu cầu.
Tôi có thể làm điều này mà không sở hữu robot không?
Bạn có thể ghi và huấn luyện mà không cần robot, bằng cách mua dataset trên marketplace hoặc thuê operator, và bạn có thể điều khiển một SO-100 thật ngay trên trình duyệt ở trang live. Một vòng DAgger thì khác: nó cần một cánh tay mà bạn có thể tiếp quản giữa lượt chạy, nên với vòng lặp này bạn cần có phần cứng ngay trên bàn của mình.
A real SO-100, live in the browser. No signup, no hardware needed.
Chạy vòng đầu tiên của bạn ngay trong tuần này
Cài client, điều khiển một checkpoint bạn đã có sẵn, và tiếp quản ngay lần đầu cánh tay vươn quá khối lập phương. Chỉ một lượt chạy đó đã là một vòng DAgger thu nhỏ: mọi thứ sau đó chỉ là soạn tập hợp và trả tiền giờ GPU.