45 Gösterimle Bir Robot Kola XOX Öğretmek
Bir SO-101 kol, Colab'da ince ayar yapılmış bir SmolVLA politikası ve hücreyi seçen Claude: sıfırdan yol, kolda iki sürpriz ve eldeki kanıtın ne kadar küçük olduğu.
Bir SO-101 robot koluna XOX oynamayı öğrettim. Kol X ile oynuyor, ben O ile. Claude bir kameradan tahtaya bakıp hücreyi seçiyor. Kolu oynatan ise SmolVLA: kola elimle gösterdiğim 45 hamleyle ince ayar yaptığım küçük bir sinir ağı.
İlk aklıma gelen basitti: her taşın her hücreye gidişini kola birer kez göster, en sonda eğit. Yanlıştı. Böyle bir model "al" ve "koy" diye kavramlar öğrenmiyor. Gördüğünü taklit ediyor ve her durumu defalarca görmesi gerekiyor. Ben de bir pilotla başladım. Amacı başarı değil, kayıttan eğitime, oradan kola uzanan zincirin bir kez baştan sona çalıştığını görmekti.
Bu yazı kısa hâli. Adım adım olanı, her adımı yapan dosyayla birlikte bahçede; kod da GitHub'da. Kaydı ben yaptım, oyunu ben oynadım. Kodu ve koşu kayıtlarının analizini Claude Code ile birlikte yazdık.
Yol
Sahneyi sabitle. Izgara, taş yuvaları, kol tabanı ve masanın üstündeki kamera bant işaretlerinin üstünde duruyor, ışık da hep aynı. Model görmediği bir sahnede ne yapacağını bilmiyor.
Kaydet. İkinci bir kolu elimle oynattım, robot onu taklit etti. Her bölüm tek bir hamle: dinlenme pozundan çık, X'i sabit tek bir yuvadan al, hücreye koy, geri dön. Dokuz hücrenin her biri için beş bölüm; tahtalar gerçek bir oyundaki gibi, boş tahtadan neredeyse dolu tahtaya kadar. Sonra her bölümü tek tek kontrol ettim, birini yeniden çektim. Sonuç 45 bölüm, yaklaşık 16 dakika; Hugging Face'te herkese açık.
Eğit. Colab'da bir A100 üzerinde lerobot/smolvla_base modeline 20 000
adımlık ince ayar yaptım; yaklaşık 3 saat 45 dakika sürdü.
Model
kola dokunmadan önce onu Mac'te denedim. Aynı kamera karesinde cümleyi başka
bir hücreyle değiştirdiğimde tahmini değişiyor. Yani cümleyi dinliyor.
Kolda iki sürpriz
İlk koşuda kol dinlenme pozunda kaldı. İkincisinde 6,8 saniye bekledi, X'i aldı ve hücrenin üstündeyken süresi doldu. Üçüncüsünde işi yaptı, ama sarsılarak.
İkinci koşudan itibaren her komutu kaydettim; sebebi bu kayıtlar gösterdi.
Model hareketi 50 adımlık parçalar hâlinde üretiyor, bir parça yaklaşık 1,7
saniye. Bir reçeteden, burada ölçmeden aldığım çıkarım ayarı, her yeni parçayı
eski bir gözlemden hesaplayıp bir öncekinin sonuna ekliyordu. Kola her 50
adımda geriye sıçraması söyleniyordu: ikinci ve üçüncü koşuda 6°'den büyük 18
sıçramanın 17'si tam parça sınırında. Çözüm tek bir bayraktı:
--inference.type=sync. Sonraki koşuda kol 1,3. saniyede başladı ve 6°'nin
üstünde hiç sıçrama olmadı.
Bir sebep daha vardı, o da bendim. Kayıtlarda harekete geçmeden önce ortalama 2,4 saniye beklemişim, model de beklemeyi öğrendi. Bunu hiçbir bayrak düzeltmiyor. Sorun veride.
Kola bir beyin vermek
Model dokuz cümle biliyor; put the red X in the top left cell gibi. "Köşeye
koy" ona bir şey ifade etmiyor. Bu yüzden Claude'un elinde tek parametreli tek
bir araç var, parametre de hücre; birebir eğitim cümlesini kod yazıyor. Claude
kolu hiçbir zaman kendisi sürmüyor.
Claude tahtayı da masanın üstündeki kameradan okuyor. Gerçek koşulardan sekiz kare ikişer kez okutuldu, 16 okumanın 16'sı doğruydu. Otomatik modda klavyeye hiçbir şey yazılmıyor: kamera kolun koyduğu X'i ve benim koyduğum O'yu görüyor.
Ne çalışıyor, ne kadar az şey biliyorum
Gerçek kolda on hamle sonuna kadar koştu, onunda da X doğru hücreye kondu. Dokuz hücrenin altısı denendi. Hepsi tek bir akşamda, verinin kaydedildiği masada oldu ve iki oyun da sonuna kadar oynanmadı. Bu bir pilot çalışma. Başarı oranı değil.
Bu kadarını bile beklemiyordum. LeRobot belgeleri tek bir görev için yaklaşık 50 bölüm öneriyor; burada 45 bölüm dokuz göreve bölünüyor.
Sırada ne var
Bunu iyileştirmek için ilk yapacağım şey veriyi artırmak: hücre başına 30 ile 40 bölüm, dolu tahtalarla; bu kez de kayıt başlar başlamaz harekete geçeceğim. Ardından modelin görmediği tahtalarla hücre başına on deneme, Claude'un seçimi için bir minimax kontrolü ve O taşları.
Kendin denemek istersen bahçeden başla. İşleri yaptığım sırayla gidiyor.