"Kod + Öğretici", "dünya modeli" deneyini yeniden üretir, denetimsiz bir şekilde hızlı eğitim

Xinzhiyuan Derlemesi

Kaynak: blog.otoro.net

Yazar: David Ha derleme: Xiao Qin

Xin Zhiyuan Rehberi "Dünya Modelleri", Google beyin araştırma bilimcisi David Ha ve İsviçreli AI Lab direktörü Jürgen Schmidhuber tarafından ortaklaşa önerilen pekiştirmeli öğrenme ortamları için oluşturulmuş bir sinir ağı modelidir. "Dünya Modeli" makalesi yayınlandıktan sonra hararetli tartışmalara yol açtı. Kısa bir süre önce, makalenin yazarlarından David Ha, dünya modeli deneyini yeniden üretme yöntemini açıkladı.Bu makale adım adım bir yorum getiriyor.

"Dünya Modelleri" Google Brain Research Scientist David Ha ve Swiss AI Lab Başkanı Jürgen Schmidhuber tarafından ortaklaşa önerilen pekiştirmeli öğrenme ortamı için oluşturulmuş bir sinir ağı modelidir. Dünya modeli geçilebilir Denetimsiz Hızlı eğitim yöntemi, yapay zekanın "rüyadaki" dış çevrenin gelecekteki durumunu tahmin etmesini sağlayarak, görevleri tamamlama verimliliğini büyük ölçüde artırır. Makale yayınlandıktan sonra hararetli tartışmalara neden oldu.

Kısa bir süre önce, makalenin yazarlarından David Ha, dünya modeli deneyini yeniden üretme yöntemini açıkladı.Bu makale adım adım bir yorum getiriyor. GitHub'da referans TensorFlow modeli: https://github.com/hardmaru/WorldModelsExperiments

Diğerleri dünya modelini bağımsız olarak uyguladılar. Keras, CarRacing-v0 deneyinin bir bölümünü yeniden üreten bir uygulamaya sahiptir. PyTorch ayrıca bu modeli OpenAI Retro Sonic ortamında uygulamaya çalışan bir projeye sahiptir.

Dünya modeli ile ilgili olarak, onu orijinal interaktif makalede tam olarak tartıştık, bu nedenle makaleyi burada ayrıntılı olarak yorumlamayacağız.

World Models kağıdı: https://worldmodels.github.io/

Yazılım ayarları

Kodu test etmek için aşağıdaki ayarları kullandım:

  • Ubuntu 16.04
  • Python 3.5.4
  • TensorFlow 1.8.0
  • NumPy 1.13.3
  • VizDoom Spor Salonu Seviyeleri
  • OpenAI Gym 0.9.4 (Gym 1.0+ molaları VizDoom, CarRacing görevlerine uygulanabilir)
  • cma 2.2.0
  • mpi4py 2, lütfen bu proje için atadığımız estool'e bakın
  • Model testi ve izleme ilerlemesi için Jupyter Notebook

Çıkarım için OS X kullanıyorum, ancak modeli eğitmek için Google Cloud VM kullanıyorum. V ve M modellerini bir P100 GPU bulut sunucusunda eğittim ve saf bir CPU örneğinde 64 cpu çekirdekli (n1-standard-64) bir denetleyici C'yi eğitmek için CMA-ES kullandım. Aşağıda, eğitimin hangi kısımlarının GPU gerektirdiğini ve hangi kısımların yalnızca CPU kullandığını özetleyecek ve bu deneyi çalıştırmanın maliyetini azaltmaya çalışacağız.

Önceden eğitilmiş modeli çalıştırın

Depoyu yalnızca CPU modunda çalışan bir masaüstü bilgisayara kopyalamanız ve sonuçları yeniden oluşturmak için depoda sağlanan önceden eğitilmiş modeli kullanmanız gerekir. Clould VM veya GPU gerekmez.

CarRacing-v0

MacBook Pro kullanıyorsanız, çözünürlüğü "daha fazla alana" ayarlamanızı öneririm çünkü CarRacing-v0 ortamı daha yüksek bir çözünürlük sunar ve varsayılan ekran ayarlarını karşılamaz.

Komut satırında carracing alt dizinini girin. Oyunu kendi başınıza oynamaya çalışın, terminalde python env.py çalıştırın. Arabayı kontrol etmek için klavyedeki dört ok tuşunu kullanabilirsiniz. Hızlandırmak / frenlemek için (yukarı, aşağı), dönmek için (sol / sağ) tuşuna basın.

Bu ortamda, her çalıştırma yeni bir Rastgele yörünge . Çok dikkatli sürsem de 800 ve üzeri puanları kolayca alabilirim, ancak 900 ve üzeri puan almak zor. Stanford Üniversitesi'ndeki bazı öğrenciler de sürekli olarak 900'ün üzerinde puan almayı zor buluyor. Bu ortamı çözme şartı, 100 ardışık rastgele yolda ortalama 900 puan almaktır.

Önceden eğitilmiş modeli bir kez çalıştırmak ve aracıyı tam işleme modunda görüntülemek için şunu çalıştırın:

python model.py oluşturma günlüğü / carracing.cma.16.64.best.json

Önceden eğitilmiş modeli, oluşturma yok modunda 100 kez çalıştırın (oluşturma yok modunda, gözlem olarak ortam için piksel bilgilerini ayıklamak için OpenGL kullanılması gerektiğinden, yine de ekranda bir şeyi daha basit hale getirecektir):

python model.py norender günlüğü / carracing.cma.16.64.best.json

Bu komut, 100 denemeden sonra her 100 denemenin puanını verir ve ayrıca ortalama puanı ve standart sapmayı da verir. Ortalama puan 900'ün üzerinde olmalıdır.

M kullanılarak oluşturulan bir ortamda önceden eğitilmiş bir denetleyiciyi çalıştırmak ve görselleştirme için V'yi kullanmak için:

python dream_model.py günlük / carracing.cma.16.64.best.json

DoomTakeCover-v0

Doomrnn dizininde, M tarafından oluşturulan ortamda python doomrnn.py'yi çalıştırın.

Oyunu bu ortamda oynamak için sola, aşağı veya sağa basabilirsiniz. Gerçek ortamda çalışan önceden eğitilmiş modeli görselleştirmek için şunu çalıştırın:

python model.py doomreal oluşturma günlüğü / doomrnn.cma.16.64.best.json

Yeniden yapılandırılmış çerçeveye ve oyunun gerçek çerçevesine ek olarak, ortamın kırpılmış 64 x 64 piksel çerçeveyi gösterecek şekilde değiştirildiğini lütfen unutmayın. Modeli gerçek bir ortamda 100 kez çalıştırmak ve ortalama puanı hesaplamak için şunu çalıştırın:

python model.py doomreal norender günlüğü / doomrnn.cma.16.64.best.json

100 rastgele bölümde 900 adımdan fazla ortalama puan almalısınız. Temsilci tarafından oluşturulan ortamda oynanan oyun hakkında istatistik almak istiyorsanız doomreal yerine doomrnn kullanabilirsiniz ve yukarıdaki iki kod satırı hala çalışır. Üretim ortamının sıcaklığını değiştirmek istiyorsanız, lütfen doomrnn.py içindeki SICAKLIK sabitini değiştirin, mevcut ayar 1,25'tir.

Oluşturulan ortamda oyunu oynayan modeli görselleştirmek için şunu çalıştırın:

python model.py doomrnn oluşturma günlüğü / doomrnn.cma.16.64.best.json

Sıfırdan eğitim

DoomTakeCover-v0

Önce VizDoom deneyini tartışalım, çünkü bu deney sıfırdan uygulamak için daha az hesaplama gerektirir. Depodaki modeli güncelleyebileceğiniz için, bu repoyu fork ve fork'unuzda klon / güncelleme yapmanızı öneririm. Tmux oturumunda herhangi bir komut çalıştırmanızı öneririm, böylece iş ssh bağlantısı kapatıldığında arka planda çalışmaya devam eder.

Önce ~ 200 GB depolama kapasitesi ve 220 GB RAM ile 64 çekirdekli bir CPU örneği oluşturun ve bu örnekte depoyu klonlayın. Doomrnn dizininde, rasgele politikadan 200 bölüm çıkaracak ve doomrnn / kayıt içine bir .npz dosyası olarak kaydedecek olan extract.py adında bir komut dosyası vardır. Extract.bash adlı bash betiği extract.py'yi 64 kez çalıştıracaktır, bu nedenle bash extract.bash'ı çalıştırarak doomrnn / record içinde 12800 .npz dosyası oluşturacağız. Bazı durumlar rastgele başarısız olabilir, bu nedenle bazı ekstra veriler oluşturuyoruz, ancak sonunda V ve M'yi eğitmek için yalnızca 10.000 bölüm kullandık. Bu işlem birkaç saat sürer (5 saat süremeyebilir).

Kayıt alt dizininde .npz dosyasını oluşturduktan sonra, ~ 200GB depolama alanı ve 220GB RAM ile bir P100 GPU örneği oluşturdum ve içindeki depoyu klonladım. CPU örneğindeki tüm .npz dosyalarını GPU örneğinin aynı kayıt alt dizinine kopyalamak için scp ssh copy komutunu kullanıyorum. Scp çalışmazsa, gcloud aracını kullanabilirsiniz. İki örnek aynı bölgedeyse, bu çok hızlı, bir dakikadan az olmalıdır. .Npz dosyasını GPU makinesine kopyaladıktan sonra, CPU örneğini kapatın.

Bir GPU makinesinde, VAE'yi eğitmek, kaydedilen veri kümesini önceden işlemek ve MDN-RNN'yi eğitmek için bash gpu_jobs.bash komutunu çalıştırın.

Bu gpu_jobs.bash aşağıdaki üç öğeyi sırayla çalıştıracaktır:

1) python vae_train.py-bu VAE'yi eğitecek ve eğitimden sonra model tf_vae / vae.json'a kaydedilecektir

2) Ardından, önceden eğitilmiş VAE'yi başlatarak toplanan verileri önceden işlemek için kullanacaktır: python series.py. Series adlı bir alt dizinde yeni bir veri kümesi oluşturulacaktır.

3) Ardından, series.npz adlı bir veri kümesini kaydedin, komut dosyası MDN-RNN eğiticisini şu komutla başlatacaktır: python rnn_train.py. Bu, tf_rnn / rnn.json ve tf_initial_z / initial_z.json içinde bir model oluşturacaktır. İnitial_z.json dosyası, ortamı oluştururken gereken bölümün ilk potansiyel değişkenlerini (z) kaydeder. Tüm süreç 6 ~ 8 saat sürebilir.

Vae_test.ipynb dizüstü bilgisayarı, girişi / yeniden yapılandırılmış görüntüyü görselleştirmek için eğitim veri setinde VAE'yi kullanacaktır.

V ve M eğitildikten sonra 3 yeni json dosyası alacaksınız. Şimdi vae.json, initial_z.json ve rnn.json'u tf_modelssub dizinine kopyalamanız ve önceki dosyaların üzerine yazmanız gerekir. Git add doomrnn / tf_models / *. Json komutunu kullanarak bu yeni modelleri git repo'suna güncelleyin ve güncellemeyi fork'unuza gönderin. Bu işlemi tamamladıktan sonra GPU makinesini kapatabilirsiniz. 64 çekirdekli CPU örneğini yeniden başlatmanız ve makinede yeniden oturum açmanız gerekir.

Şimdi, 64 çekirdekli CPU örneğinde, CMA-ES tabanlı eğitimi çalıştırın ve doomrnn dizinindeki python train.py komutunu başlatın. Bu, eğiticiyi başlatacak ve Ctrl-C çalışana kadar eğitime devam edecektir. Kontrolör C, M'nin üretim ortamında 1,25 sıcaklıkta eğitilecektir. Oluşturulan günlük dosyasının plot_training_progress.ipynb not defterini yükleyerek ilerlemeyi izleyebilirsiniz. 200 yinelemeden sonra (veya yaklaşık 4-5 saat), etkileyici sonuçlar almak için yeterli olacaktır ve bırakabilirsiniz. Yaklaşık 1800 yinelemeden sonra durdum, 200 yinelemeden sonra gerçekten değer katmasa da, bu yüzden para israf etmeye gerek yok. Log / * .json'daki tüm dosyaları çatallı depoya ekleyin ve ardından örneği kapatın.

Şekil: DoomRNN'yi eğitmek ve oluşturulan ortamda C'nin performansını kaydetmek için CMA-ES'yi kullanın

Masaüstü örneğinizi kullanın ve çatallı depoyu tekrar çekin. Şimdi yeni eğitilmiş V, M ve C modellerini test etmek için aşağıdaki kodu çalıştırabilirsiniz.

python model.py doomreal oluşturma günlüğü / doomrnn.cma.16.64.best.json

Doomreal'ı doomrnn ile değiştirebilir veya oluşturulan ortamı denemek için norender olarak render edebilir veya aracıyı 100 kez deneyebilirsiniz.

CarRacing-v0

CarRacing-v0'ın süreci önceki VizDoom örneğiyle hemen hemen aynıdır, bu nedenle bu bölüm temelde farklılıkları tartışmaktadır.

CarRacing-v0 ortamı, spor salonu ortamının işleme olmayan modunda bile OpenGL kullanılarak oluşturulduğundan, grafik çıktısına da dayanır.Bu nedenle, CloudVM kutusunda komutları paketlemek için başsız bir X sunucusu kullanılmalıdır. Carracing dizinindeki extract.bash dosyasında görebileceğiniz gibi, asıl komuttan önce xvfb-run -a -s "-screen 01400x900x24 + extension RANDR" komutunu çalıştırın. Ayrıca, veri toplama ve V ve M modellerini eğitme süreci VizDoom ile aynıdır.

VAE ve MDN-RNN modellerini eğittikten sonra, vae.json, initial_z.json ve rnn.json'u vae, initial_z ve rnn dizinlerine kopyalamanız (DoomRNN'de tf_models'e kopyalamak yerine) ve öncekilerin üzerine yazmanız gerektiğini lütfen unutmayın. Dosyayı açın, ardından çatallı depoyu her zamanki gibi güncelleyin.

Şekil: vae_test.ipynb, CarRacing-v0 tarafından çıkarılan veriler üzerinde eğitilen VAE'yi kontrol etmek için kullanılır.

Bu ortamda, V ve M modellerini model öngörücü kontrol (MPC) olarak kullanıyoruz ve kontrolör C'yi üretim ortamında eğitim yerine gerçek ortamda eğitiyoruz. Bu nedenle, train.py yerine gce_train.bash çalıştırmanız gerekir. Gerçek ortamda antrenman yaptığımız için antrenman hızı DoomRNN'ye göre daha yavaş. Eğitim bir tmux oturumunda çalıştığından, Jupyter'i, oluşturulan günlük dosyasını yükleyen başka bir tmux oturumunda paralel olarak çalıştırarak ilerlemeyi izlemek için plot_training_progress.ipynb not defterini kullanabilirsiniz.

Şekil: CarRacing-v0'ı eğitmek için CMA-ES'yi kullanma. C'nin gerçek ortamdaki performansını kaydedin.

150-200 kuşaktan (veya yaklaşık 3 gün) sonra, istenen 900 puana çok yakın olan ortalama ~ 880 puana ulaşmak yeterli olacaktır. 850+ puandan memnunsanız, bu sefer bırakmanızı öneririm. Niteliksel olarak konuşursak, 900+ puana ulaşan nihai temsilci ile karşılaştırıldığında, 850-870 arasındaki puanlar fena değil. Zor kazanılan parayı bulutta harcamak istemiyorum. 900+ puan almak birkaç hafta sürebilir. Nihai model log / *. Json formatında kaydedilir, her zamanki gibi test edebilir ve görüntüleyebilirsiniz.

katkı

Denenecek pek çok harika fikir var, örneğin yinelemeli eğitim yöntemleri, aktarım öğrenimi, içsel motivasyon ve diğer ortamlar.

Şekil: Üretken gürültülü piksel sarkaç ortamı mı?

Kodu genişletmek ve yeni şeyler denemek istiyorsanız, kodu aynı anda birden fazla ortamda çalışacak şekilde iyileştirmeye çalışmak yerine kodu değiştirmenizi ve belirli bir yeni ortamı çözmeye çalışmanızı öneririm. Araştırma çalışması için zor bir ortamı çözmeye çalışmak istiyorsanız, genellikle belirli özel değişikliklere ihtiyacınız olduğunu görüyorum. Ayrı bir alt dizinle bir çekme isteği göndermeye hoş geldiniz. Alt dizin, çözmeye çalıştığınız belirli ortama uyarlanabilir ve alt dizinin README.md dosyasında açıklanmıştır.

Okuma materyali:

Biraz arka plan bilgisi edinmek için deneyi yeniden oluşturmaya çalışmadan önce aşağıdaki makaleleri okumanız önerilir.

  • World Models kağıdı: https://worldmodels.github.io/
  • Evrim Stratejileri için Görsel Bir Kılavuz: blog.otoro.net/2017/10/29/visual-evolution-strategies
  • Değişen Kararlı Stratejiler: blog.otoro.net/2017/11/12/evolving-stable-strategies/

Aşağıdakiler isteğe bağlı okuma malzemeleridir:

  • Karışım Yoğunluğu Ağları: blog.otoro.net/2015/06/14/mixture-density-networks/
  • TensorFlow ile Karışım Yoğunluğu Ağları: blog.otoro.net/2015/11/24/mixture-density-networks-with-tensorflow/

Varyasyonel Otomatik Kodlayıcılara aşina değilseniz, lütfen aşağıdaki eğitimleri okuyun:

  • TensorFlow'da Varyasyonel Otomatik Kodlayıcı: https://jmetzen.github.io/2015-11-27/vae.html
  • Keras'ta Otomatik Kodlayıcılar Derleme: https://blog.keras.io/building-autoencoders-in-keras.html
  • Gizli Vektörlerden Büyük Görüntüler Oluşturma: blog.otoro.net/2016/04/01/generating-large-images-from-latent-vectors/

Sürekli sırayla üretilen RNN'ye aşina değilseniz, lütfen aşağıdaki materyalleri okuyun:

  • Tekrarlayan Sinir Ağları ile Diziler Oluşturma: https://arxiv.org/abs/1308.0850
  • Eskiz Çizimlerinin Sinirsel Temsili: https://arxiv.org/abs/1704.03477
  • TensorFlow'da El Yazısı Üretimi Demosu: blog.otoro.net/2015/12/12/handwriting-generation-demo-in-tensorflow/
  • Sanatçılar için Tekrarlayan Sinir Ağı Eğitimi: blog.otoro.net/2017/01/01/recurrent-neural-network-artist/

Orijinal:

ABD'deki Lexus satışlarının kutuplaşması ne anlama geliyor?
önceki
Yeni yılın üçüncü günü | Neden bugün geç kalkmanız gerekiyor?
Sonraki
İki yıl üst üste yerel skor şampiyonu + birden fazla kariyer zirvesi, Ding Yan Yuhang'ın MVP'yi kazanması bekleniyor
Bu kadar! 8,5 milyar doları çılgınca parçalayan ve şelale yağmur ormanını içeriye taşıyan Singapur Changi Havaalanı yeniden alevler içinde
Jeep Free Light'ın 75. Yıl Dönümü Sürümü: "Kuşlar iyi kuşlardır, sadece çok konuşun"
Kış Olimpiyatları madalya listesinde Norveç ve Almanya eşit, Kanada üçüncü, Çin 5 gümüşle 19. sırada
ŞiirMüreffeh dünyayı geçerek hafif bir tekne sallayın
% 99 üretim oranı! Sakura yağmuru, gökkuşağı odası, beyaz kumlu plaj ... İnternet ünlüleri için bahar check-in listesi yayınlandı!
Nilüferde yaşayan ve besin olarak fasulye eken karides Hanchuan Luming aile çiftliğindeki ekolojik döngü tarıma bakıldığında
Havacılık Endüstrisi Changfei: Sağlıklı ve medeni Bahar Şenliği'ni kutlayalım
Bir aile yanında konaklama seçmek zor mu? Shaoguan'da size mükemmel bir tatil gezisi sunan 7 harika pansiyon
Turboşarjı ve fiyatlandırmayı çözdükten sonra Honda New Jade, Golf Jade alıcılarını elinden alabilir mi?
Yaşamın her kesiminden insanlar, Liu Xingyu'nun yalnızca üç kelime söylemek istediğini, ancak eski Olimpiyat şampiyonunun anlayamadığını söyledi.
Tiggo 7 çok güzel, konsept otomobilinin neye benzediğini merak etmiyor musunuz?
To Top