Rubik Küp’ü robot elle çözüyoruz

Fotoğraf: Eric Haines
Rubik Küp’ü insan benzeri bir robot elle çözmek için bir çift sinir ağını eğittik. Sinir ağları OpenAI Five ile aynı takviyeli öğrenme kodu ve Otomatik Alan Rastgeleleştirme (ADR) adı verilen yeni bir teknik kullanılarak, tamamen simülasyon yoluyla eğitildi. Sistem, eğitim sırasında hiç karşılaşmadığı durumlarla, örneğin bir oyuncak zürafa tarafından dürtülme gibi olaylarla bile başa çıkabiliyor. Bu da, takviyeli öğrenmenin yalnızca sanal görevler için bir araç olmadığını, aynı zamanda benzeri görülmemiş bir el becerisi gerektiren fiziksel dünya sorunlarını da çözebileceğini gösteriyor.
İnsan eli, farklı birçok görevi yerine getirmemizi sağlar. Robotik alanındaki son 60 yılda, insanların elleriyle başardığı zor görevler söz konusu olduğunda her bir görev(yeni bir pencerede açılır) için özel bir robot tasarlanması gerekiyordu. Alternatif olarak, insanlar onlarca yıl boyunca genel amaçlı robotik donanımları kullanmaya çalıştılar(yeni bir pencerede açılır), ancak bu donanımların yüksek düzeydeki bağımsızlıkları nedeniyle sınırlı bir başarı elde ettiler. Bu proje özelinde ise kullandığımız donanım yeni değil; bu robot el son 15 yıldır kullanılıyor ancak yazılım yaklaşımı yeni.
Mayıs 2017'den beri Rubik Küp'ü(yeni bir pencerede açılır) çözebilecek insan benzeri robotik bir eli eğitmeye çalışıyoruz. Bunu hedefledik çünkü böyle bir robot elin karmaşık manipülasyon görevlerini başarıyla yerine getirecek şekilde eğitilmesinin, genel amaçlı robotların temelini oluşturacağına inanıyoruz. Aslında 2017 yılının Temmuz ayında Rubik Küp’ü simülasyonla çözdük. Ancak Temmuz 2018 itibarıyla robotta yalnızca bir bloğu manipüle edebiliyorduk. Şimdi ise ilk hedefimize ulaştık.
Rubik Küp’ü çözme işleminin tamamı. Video gerçek zamanlı olarak oynatılmaktadır ve hiçbir şekilde kurgulanmamıştır.
Rubik Küp’ü tek elle çözmek, insanlar için bile zorlu bir iştir ve çocukların bu konuda ustalaşmak için gereken el becerisini kazanmaları birkaç yıl alır. Ancak robotumuz hâlâ tekniğini mükemmelleştirmiş değil, zira Rubik Küp’ü çözme oranı %60 (ve maksimum zorluktaki(yeni bir pencerede açılır) bir karışıklıkta bu oran sadece %20).
Yapay sinir ağlarını simülasyonda(yeni bir pencerede açılır) Rubik Küp’ü çözmek üzere eğitirken, çözüm adımlarını seçmek için takviyeli öğrenme ve Kociemba algoritmasını(yeni bir pencerede açılır) kullandık.A Alan(yeni bir pencerede açılır) rastgeleleştirme(yeni bir pencerede açılır), yalnızca simülasyonda eğitilmiş ağların gerçek bir robota aktarılmasını sağlar.

Karşılaştığımız en büyük zorluk, gerçek dünyanın fizik kurallarını yansıtabilecek kadar çeşitli simülasyon ortamları yaratmaktı. Sürtünme, esneklik ve dinamik gibi faktörlerin Rubik Küpler veya robotik eller gibi karmaşık nesneler için ölçülmesi ve modellenmesi inanılmaz derecede zordur. Ayrıca alan rastgeleleştirmenin tek başına yeterli olmadığını gördük.
Bu sorunun üstesinden gelmek için, simülasyonda giderek daha zorlaşan sonsuz sayıda ortam üreten Otomatik Alan Rastgeleleştirme (ADR) adlı yeni bir yöntem geliştirdik.B Bu, gerçek dünyanın doğru bir modeline sahip olma zorunluluğumuzu ortadan kaldırdığı gibi, simülasyonda öğrenilen sinir ağlarının gerçek dünyaya aktarılarak uygulanmasını da sağladı.
ADR, bir sinir ağının Rubik Küp’ü çözmeyi öğrendiği, rastgele olmayan tek bir ortamla başlar. Sinir ağı görevi daha iyi yerine getirdikçe ve bir performans eşiğine ulaştıkça, alan rastgeleleştirme miktarı da otomatik olarak artar. Bu durum görevi daha da zorlaştırır, çünkü sinir ağının artık daha rastgeleleştirilmiş ortamlara göre genellemeyi öğrenmesi gerekir. Sinir ağı performans eşiğini tekrar aşana kadar öğrenmeye devam eder, ardından daha fazla rastgeleleştirme devreye girer ve süreç tekrarlanır.
Rastgele belirlediğimiz parametrelerden biri de Rubik Küp’ün boyutudur (yukarıda). ADR tekniği Rubik Küp’ün sabit bir boyutuyla başlar ve eğitim ilerledikçe rastgeleleştirme aralığı kademeli olarak artırılır. Aynı tekniği küpün kütlesi, robot parmaklarının sürtünmesi, elin görsel yüzey malzemeleri gibi diğer tüm parametrelere de uyguluyoruz. Dolayısıyla sinir ağının, giderek zorlaşan tüm bu koşullar altında Rubik Küp’ü çözmeyi öğrenmesi gerekiyor.
Alan rastgeleleştirme için, rastgeleleştirme aralıklarını manuel olarak belirlememiz gerekiyordu. Bu oldukça zor bir işlemdir çünkü çok fazla rastgeleleştirme öğrenmeyi zorlaştırır ama çok az rastgeleleştirme de gerçek robota aktarımı engeller. ADR, zaman içinde herhangi bir insan müdahalesi olmadan rastgeleleştirme aralıklarını otomatik olarak genişleterek bu sorunu çözer. ADR tekniği ayrıca alan bilgisi ihtiyacını ortadan kaldırır ve yöntemlerimizi yeni görevlere uygulamayı kolaylaştırır. Manuel alan rastgeleleştirmenin aksine, ADR kullanıldığında görev her zaman zorlayıcılığını korur ve eğitim süreci hiçbir zaman tamamen sonlanmaz.
Zaten güçlü bir referans değere ulaştığımız blok çevirme görevinde, ADR ile manuel alan rastgeleleştirmeyi karşılaştırdık. Başlangıçta ADR tekniği, gerçek robotta başarı sayısı açısından daha kötü bir performans gösteriyor. Ancak ADR ortamın karmaşıklığının bir ölçüsü olan entropiyi artırdıkça, aktarım performansı sonunda referans değerin iki katına çıkıyor. Üstelik bunu bir insan tarafından ayarlanmadan başarıyor.
ADR tekniğini kullanarak, Rubik Küp’ü gerçek robot elle çözebilen sinir ağlarını simülasyonda eğitebiliyoruz. Bunun nedeni, ADR'nin ağı sonsuz çeşitlilikte rastgeleleştirilmiş simülasyona maruz bırakmasıdır. Sinir ağını simülasyondan gerçek dünyaya aktarım yapmaya hazırlayan unsur, eğitim sırasında bu karmaşıklığa maruz kalmasıdır. Çünkü ağın karşılaştığı her türlü fiziksel ortamı hızla tanımlamayı ve ona uyum sağlamayı öğrenmesi gerekir.
Yöntemimizin sınırlarını test etmek için, robot el Rubik Küp’ü çözerken çeşitli bozulmalarla deneyler yapıyoruz. Bu yalnızca kontrol ağımızın sağlamlığını test etmekle kalmıyor, aynı zamanda burada küpün konumunu ve yönünü tahmin etmek için kullandığımız görü ağını da test ediyor.
ADR ile eğittiğimiz sistemimizin, daha önce eğitimde hiç karşılaşmamış olmasına rağmen, bozulmalara karşı şaşırtıcı derecede dayanıklı olduğunu görüyoruz: Robot, test edilen tüm bozulmalar kapsamında çoğu çevirmeyi ve yüzey dönüşünü başarıyla gerçekleştirebiliyor, ancak performansı en yüksek düzeyde olmuyor.
Meta öğrenmenin(yeni bir pencerede açılır) veya öğrenmeyi öğrenmenin, genel amaçlı sistemler kurmak için önemli bir ön koşul olduğuna inanıyoruz çünkü bu sayede sistemler, ortamlarındaki değişen koşullara hızla uyum sağlayabiliyor. ADR'nin ardındaki varsayıma göre, belleği artırılmış ağların yeterince rastgeleleştirilmiş bir ortamla birleştirilmesi, meta öğrenme gelişimine yol açar. Bu öğrenme yönteminde ağ, kullanıma sunulduğu ortama göre davranışlarını uyumlandırmasını sağlayan bir öğrenme algoritması uygular.C
Bunu sistematik olarak test etmek için, ağın belleğini sıfırlama, dinamikleri sıfırlama veya robot eldeki bir eklemi kırma gibi farklı bozulma koşulları altında sinir ağımız için küp çevirme başına (küpü farklı bir renk yukarı bakacak şekilde döndürme) başarıya ulaşma süresini ölçüyoruz. Bu deneyleri simülasyonda gerçekleştiriyoruz; bu da kontrollü bir ortamda 10.000 deneme üzerinden performans ortalamasını elde etmemizi sağlıyor.
Başlangıçta, sinir ağı daha fazla blok çevirmeyi başardıkça, daha sonraki her seferde başarıya ulaşma süresi kısalıyor çünkü ağ uyum sağlamayı öğreniyor. Bozulmalar uygulandığında ise (yukarıdaki grafikteki dikey gri çizgiler), başarıya ulaşma süresinde bir artış görüyoruz. Bunun nedeni, ağın uyguladığı stratejinin değişen ortamda işe yaramamasıdır. Bunun ardından ağ, yeni ortamı yeniden öğreniyor ve başarıya ulaşma süresinin tekrar önceki referans değere düştüğünü görüyoruz.
Ayrıca, başarısızlık olasılığını da ölçüyoruz ve aynı deneyleri yüzey dönüşleri (üst yüzü saat yönünde veya saat yönünün tersine 90 derece döndürmek) için gerçekleştirdiğimizde aynı uyum sağlama örüntüsüne rastlıyoruz.D
Ağlarımızı görsel olarak ortaya koymak, belleklerinde neler depoladıklarını anlamamızı sağlıyor. Ağların karmaşıklığı arttıkça, bu durum giderek daha da önemli hâle geliyor.
Sinir ağlarımızın belleğini yukarıda görsel olarak canlandırdık. Bu yüksek boyutlu vektörü yoğunlaştırarak 6 gruba ayırmak ve her birine benzersiz bir renk atamak için, temel yorumlanabilirlik araçlarından biri olan(yeni bir pencerede açılır), negatif olmayan matris faktörizasyonunu kullanıyoruz. Daha sonra her zaman adımı için o anda baskın olan grubun rengini görüntülüyoruz.
Her bir bellek grubunun, semantik olarak anlamlı bir davranışla ilişkili olduğunu görüyoruz. Örneğin, yalnızca ağın belleğindeki baskın gruba bakarak, küpü çevirmek veya üst kısmı saat yönünde döndürmek gibi eylemleri henüz gerçekleşmeden öngörebiliyoruz.
Rubik Küp’ü robot elle çözmek hâlâ kolay bir iş değil. Yöntemimiz şu anda, 26 yüzey dönüşü gerektiren maksimum zorluktaki bir karıştırma(yeni bir pencerede açılır) uyguladığımızda Rubik Küp’ü %20 oranında çözüyor. Geri almak için 15 dönüş gerektiren daha basit karıştırma uygulamalarında ise başarı oranı %60 oluyor. Rubik Küp düşürüldüğünde veya verilen süre dolduğunda, girişimi başarısız olarak değerlendiririz. Ancak ağımız, Rubik Küp’ü herhangi bir başlangıç durumundan başlayarak çözme yeteneğine sahiptir. Yani küp düşürülse bile onu tekrar ele yerleştirip çözmeye devam etmek mümkün oluyor.
Genellikle sinir ağımızın ilk birkaç yüzey döndürme ve çevirme sırasında başarısızlığa uğrama olasılığının çok daha yüksek olduğunu görüyoruz. Bunun nedeni, sinir ağının bu ilk döndürme ve çevirme hareketleri esnasında Rubik Küp’ü çözmek ile fiziksel dünyaya uyum sağlamak arasında bir denge kurmaya ihtiyaç duymasıdır.
İlerlememizi kıyaslayabilmek ve problemi yönetilebilir kılmak amacıyla, klasik Rubik Küp’ü çözmeye yönelik nihai hedefimize ulaşma yolunda birer basamak niteliği taşıyan özel küp versiyonları tasarladık ve geliştirdik.E

Rubik Küp prototipleri, soldan sağa: Kilitli küp, Yüzey küp, Tam küp, Giiker(yeni bir pencerede açılır) küp, normal Rubik Küp.
Prototip | Pozisyon + yönelim | İç serbestlik derecesi (sensör) |
Kilitli küp | Görü | 0 (sensör yok) |
Yüzey küp | PhaseSpace | 2 (PhaseSpace) |
Tam küp | PhaseSpace | 6 (PhaseSpace) |
Giiker küp | Görü | 6 (Entegre sensörler) |
Normal Rubik Küp | Görü | 6 (Görü) |
İnsan seviyesindeki el becerisinin, genel amaçlı robotlar geliştirmeye giden yolda çok önemli bir adım olduğuna inanıyoruz ve bu yönde ilerlemekten heyecan duyuyoruz.
İster robotik ister sanal olsun, giderek daha yaygın hâle gelen yapay zeka sistemlerinin oluşturulmasına yardımcı olmak istiyorsanız, iş ilanlarımıza göz at!
Dipnotlar
- A
Şu anda makinelerin üstesinden gelmekte zorluk çektiği, algılama ve el becerisiyle manipülasyon gibi sorunlara odaklanıyoruz. Bu nedenle, sinir ağlarımızı, Kociemba algoritması tarafından üretilen gerekli yüz döndürmelerini ve küp çevirmelerini başarmak üzere eğitiyoruz.
- B
Çalışmamız, otomatik olarak 2 boyutlu ortamlar üreten POET(yeni bir pencerede açılır) ile yakından ilgilidir. Ancak bizim çalışmamız, yeni oluşturulan her ortama aktarılan, tüm ortamlar üzerinde geçerli, ortak bir stratejiyi öğrenir.
- C
Varsayımımızı daha somut olarak ifade etmek gerekirse, sınırsız karmaşıklığa sahip ortamlarda eğitilen sonlu kapasiteli bir sinir ağı, her bir ortam için çözümleri ezberleyemiyor ve tüm rastgeleleştirmelerde işe yarayan tek bir sağlam strateji bulunmuyor. Bu nedenle de sinir ağı, ağı özel amaçlı bir öğrenme algoritması öğrenmeye zorluyor.
- D
Sonuçların tamamı için makalemize(yeni bir pencerede açılır) göz atabilirsin.
- E
Yaptığımız tek değişiklik, her bir orta küpün renkli çıkartmasından küçük bir parça kesmek oldu. Bu, dönüş simetrisini(yeni bir pencerede açılır) kırmak için gerekliydi.
Yazarlar
Teşekkürler
Bu paylaşımın ve makalenin taslakları üzerinde geri bildirimde bulunan aşağıdaki isimlere teşekkür ederiz: Josh Achiam, Greg Brockman, Nick Cammarata, Jack Clark, Jeff Clune, Ruben D’Sa, Harri Edwards, David Farhi, Ken Goldberg, Leslie P. Kaelbling, Hyeonwoo Noh, Lerrel Pinto, John Schulman, Ilya Sutskever ve Tao Xu.
Video: Peter Jordan (Yönetmen), Yvette Solis (Yapımcı), Brooke Chan (Yapımcı)
Editör: Ashley Pilipiszyn
Tasarım: Justin Jay Wang ve Ben Barry
Fotoğraflar: Eric Haines


