Unity Machine Learning: Mengajar Agen MO untuk Melompati Dinding

Ada beberapa terobosan besar dalam pembelajaran penguatan (RL) selama beberapa tahun terakhir, mulai dari penggunaan pertama yang berhasil dalam pelatihan piksel mentah hingga pelatihan ahli AI terbuka, dan lingkungan yang semakin canggih diperlukan untuk kemajuan lebih lanjut, yang membantu Persatuan datang.

Alat Unity ML-Agents adalah plugin baru di mesin game Unity, memungkinkan Anda untuk menggunakan Unity sebagai konstruktor lingkungan untuk melatih agen-agen MO.

Dari bermain sepak bola hingga berjalan, melompat dari dinding, dan melatih anjing-anjing AI hingga bermain tongkat, Unity ML-Agents Toolkit menyediakan berbagai kondisi bagi para agen pelatihan.

Dalam artikel ini, kita akan melihat bagaimana agen Unity MO bekerja, dan kemudian kita akan mengajarkan salah satu agen ini untuk melompati tembok.

gambar


Apa itu Unity ML-Agents?


Unity ML-Agents adalah plugin baru untuk mesin game Unity, yang memungkinkan Anda untuk membuat atau menggunakan lingkungan yang sudah jadi untuk melatih agen kami.

Plugin ini terdiri dari tiga komponen:



Yang pertama - lingkungan belajar ( Lingkungan Belajar ), yang berisi adegan Persatuan dan elemen lingkungan.

Yang kedua adalah Python API , yang berisi algoritma RL (seperti PPO - Optimasi Kebijakan Proximal dan SAC - Soft Actor-Critic). Kami menggunakan API ini untuk meluncurkan pelatihan, pengujian, dll. Ini terhubung ke lingkungan belajar melalui komponen ketiga - komunikator eksternal .


Terdiri dari apa lingkungan belajar


Komponen pelatihan terdiri dari berbagai elemen:



Agen pertama adalah aktor panggung. Dialah yang akan kita latih dengan mengoptimalkan komponen yang disebut "Otak", di mana dicatat tindakan apa yang harus dilakukan di masing-masing negara yang mungkin.

Elemen ketiga, Akademi, mengelola agen dan proses pengambilan keputusan serta memproses permintaan dari API Python. Untuk lebih memahami perannya, mari kita ingat proses RL. Ini dapat direpresentasikan sebagai siklus yang berfungsi sebagai berikut:



Misalkan seorang agen perlu belajar cara bermain platformer. Proses RL dalam hal ini akan terlihat seperti ini:

  • Agen menerima status S 0 dari lingkungan - ini akan menjadi frame pertama dari permainan kami.
  • Berdasarkan keadaan S 0, agen melakukan aksi A 0 dan bergeser ke kanan.
  • Lingkungan masuk ke keadaan baru S 1 .
  • Agen menerima hadiah R 1 karena tidak mati ( Imbalan positif +1).

Siklus RL ini membentuk urutan keadaan, tindakan, dan penghargaan. Tujuan agen adalah untuk memaksimalkan total hadiah yang diharapkan.



Dengan demikian, Akademi mengirimkan instruksi kepada agen dan memberikan sinkronisasi dalam pelaksanaannya, yaitu:

  • Koleksi pengamatan;
  • Pilihan tindakan sesuai dengan instruksi yang ditetapkan;
  • Eksekusi tindakan;
  • Atur ulang jika jumlah langkah telah tercapai atau tujuan telah tercapai.


Kami mengajarkan agen untuk melompati tembok


Sekarang kita tahu bagaimana agen Unity bekerja, kita akan melatih seseorang untuk melompati tembok.

Model yang sudah terlatih juga dapat diunduh di GitHub .

Lingkungan Belajar Melompat Wall


Tujuan dari lingkungan ini adalah untuk mengajarkan agen untuk sampai ke ubin hijau.

Pertimbangkan tiga kasus:

1. Tidak ada dinding, dan agen kami hanya perlu sampai ke ubin.

gambar

2. Agen perlu belajar cara melompat untuk mencapai ubin hijau.

gambar

3. Kasing paling sulit: dinding terlalu tinggi untuk dilompati agen, jadi dia harus melompat ke balok putih terlebih dahulu.

gambar

Kami akan mengajarkan agen dua skenario perilaku tergantung pada ketinggian dinding:

  • SmallWallJump dalam case tanpa dinding atau pada ketinggian dinding yang rendah;
  • BigWallJump dalam hal tembok tinggi.

Seperti inilah sistem imbalannya:



Dalam pengamatan kami, kami tidak menggunakan kerangka biasa, tetapi 14 reykast, yang masing-masing dapat mendeteksi 4 objek yang mungkin. Dalam hal ini, reykast dapat dianggap sebagai sinar laser yang dapat menentukan apakah mereka melewati suatu objek.

Kami juga akan menggunakan posisi agen global dalam program kami.

gambar

Ada empat opsi di ruang kami:



Tujuannya adalah untuk mencapai ubin hijau dengan imbalan rata-rata 0,8 .

Jadi mari kita mulai!


Pertama-tama, buka proyek UnitySDK .

Di antara contoh yang Anda butuhkan untuk menemukan dan membuka adegan WallJump .

Seperti yang Anda lihat, ada banyak agen di atas panggung, yang masing-masing diambil dari cetakan yang sama, dan mereka semua memiliki "otak" yang sama.

gambar

Seperti dalam kasus Pembelajaran Penguatan Jauh klasik, setelah kami meluncurkan beberapa contoh permainan (misalnya, 128 lingkungan paralel), sekarang kami hanya menyalin dan menempelkan agen untuk memiliki status yang lebih berbeda. Dan karena kami ingin melatih agen kami dari awal, pertama-tama kita perlu menghilangkan "otak" dari agen tersebut. Untuk melakukan ini, buka folder Rak itan dan buka Rak itan.

Selanjutnya, dalam hierarki Prefab, Anda harus memilih agen dan pergi ke pengaturan.

Dalam Parameter Perilaku, Anda perlu menghapus model. Jika kami memiliki beberapa GPU yang dapat digunakan, Anda dapat menggunakan Perangkat Inferensi dari CPU sebagai GPU.

gambar

Dalam komponen Wall Jump Agent, Anda harus melepaskan Otak untuk kasing tanpa dinding, serta untuk dinding rendah dan tinggi.

gambar

Setelah itu, Anda dapat mulai melatih agen Anda dari awal.

Untuk pelatihan pertama kami, kami hanya mengubah jumlah langkah pelatihan total untuk dua skenario perilaku: SmallWallJump dan BigWallJump. Sehingga kita dapat mencapai tujuan hanya dalam 300 ribu langkah. Untuk melakukan ini, dalam config / trainer config.yaml, ubah max_steps menjadi 3e5 untuk kasus SmallWallJump dan BigWallJump.

gambar

Untuk melatih agen kami, kami akan menggunakan PPO (Optimasi Kebijakan Proximal). Algoritma ini mencakup akumulasi pengalaman dalam berinteraksi dengan lingkungan dan menggunakannya untuk memperbarui kebijakan pengambilan keputusan. Setelah memperbaruinya, peristiwa-peristiwa sebelumnya dibuang, dan pengumpulan data berikutnya dilakukan sudah berdasarkan ketentuan kebijakan yang diperbarui.

Jadi, pertama-tama, menggunakan API Python, kita perlu memanggil komunikator eksternal sehingga ia memerintahkan Akademi untuk meluncurkan agen. Untuk melakukan ini, buka terminal di mana ml-agent-master berada dan ketik di dalamnya:

mlagents-learn config/trainer_config.yaml — run-id=”WallJump_FirstTrain” — train

Perintah ini akan meminta Anda untuk memulai adegan Unity. Untuk melakukan ini, tekan ► di bagian atas editor.

gambar

Anda dapat menonton pelatihan agen Anda di Tensorboard dengan perintah berikut:

tensorboard — logdir=summaries

Ketika pelatihan selesai, Anda perlu memindahkan file model tersimpan yang terdapat dalam ml-agent-master / models ke UnitySDK / Assets / ML-Agents / samples / WallJump / TFModels . Kemudian, buka lagi editor Unity dan pilih adegan WallJump , tempat kita membuka objek WallJumpArea yang sudah selesai .

Setelah itu, pilih agen dan dalam parameter perilaku seret file SmallWallJump.nn ke dalam Placeholder Model.

gambar

Pindahkan juga:

  1. SmallWallJump.nn di No Wall Brain Placeholder.
  2. SmallWallJump.nn di Small Wall Brain Placeholder.
  3. BigWallJump.nn di No Wall Brain Placeholder.

gambar

Setelah itu, tekan tombol ► di bagian atas editor dan Anda selesai! Algoritma konfigurasi pelatihan agen sekarang lengkap.

gambar

Waktu percobaan


Cara terbaik untuk belajar adalah terus-menerus mencoba membawa sesuatu yang baru. Sekarang kami telah mencapai hasil yang baik, kami akan mencoba untuk meletakkan beberapa hipotesis dan mengujinya.


Mengurangi koefisien diskon menjadi 0,95


Jadi kita tahu bahwa:

  • Semakin besar gamma, semakin rendah diskonnya. Artinya, agen lebih peduli tentang imbalan jangka panjang.
  • Di sisi lain, semakin kecil gamma, semakin besar diskonnya. Dalam hal ini, prioritas agen adalah kompensasi jangka pendek.

Gagasan dari percobaan ini adalah bahwa jika kita meningkatkan diskon dengan mengurangi keseluruhan dari 0,99 menjadi 0,95, hadiah jangka pendek akan menjadi prioritas bagi agen - yang dapat membantunya untuk dengan cepat mendekati kebijakan perilaku optimal.



Menariknya, dalam kasus lompatan melalui dinding rendah, agen akan berusaha untuk hasil yang sama. Ini dapat dijelaskan oleh fakta bahwa case ini cukup sederhana: agen hanya perlu pindah ke ubin hijau dan, jika perlu, melompat jika ada dinding di depan.



Di sisi lain, dalam kasus Big Wall Jump, ini bekerja lebih buruk, karena agen kami lebih peduli dengan hadiah jangka pendek dan karena itu tidak mengerti bahwa ia perlu naik ke blok putih untuk melompati tembok.

Meningkatnya kompleksitas jaringan saraf


Akhirnya, kami berhipotesis apakah agen kami akan menjadi lebih pintar jika kami meningkatkan kompleksitas jaringan saraf. Untuk melakukan ini, tambah ukuran level tersembunyi dari 256 menjadi 512.

Dan kami menemukan bahwa dalam kasus ini agen baru bekerja lebih buruk daripada agen pertama kami. Ini berarti tidak masuk akal bagi kami untuk menambah kompleksitas jaringan kami, karena kalau tidak, waktu belajar juga akan meningkat.



Jadi, kami melatih agen untuk melompati tembok, dan itu saja untuk hari ini. Ingatlah bahwa untuk membandingkan hasilnya, model yang terlatih dapat diunduh di sini .

gambar

All Articles