Artikel ini tentang agen pembelajaran mesin Unity ditulis oleh Michael Lanham, seorang inovator teknis, pengembang aktif untuk Unity, seorang konsultan, manajer, dan penulis banyak game Unity, proyek grafis, dan buku.Pengembang Unity telah menerapkan dukungan untuk pembelajaran mesin, dan khususnya pembelajaran penguatan untuk pembuatan SDK pembelajaran penguatan mendalam (DRL) untuk pengembang game dan simulasi. Untungnya, tim Unity, yang dipimpin oleh Danny Lange, telah berhasil menerapkan mesin DRL yang andal dan modern yang mampu memberikan hasil yang mengesankan. Unity menggunakan model optimalisasi kebijakan proximal (PPO) sebagai dasar dari mesin DRL; model ini jauh lebih kompleks dan mungkin berbeda dalam beberapa aspek.
Pada artikel ini, saya akan memperkenalkan Anda ke alat dan SDK untuk membuat agen DRL dalam game dan simulasi. Terlepas dari kebaruan dan kekuatan alat ini, mudah digunakan dan memiliki alat bantu yang memungkinkan Anda untuk mempelajari konsep pembelajaran mesin saat bepergian. Untuk bekerja dengan tutorial Anda perlu menginstal mesin Unity.
Instal Agen-ML
Pada bagian ini, saya akan secara singkat berbicara tentang langkah-langkah yang harus diambil untuk menginstal ML-Agen SDK. Materi ini masih dalam versi beta dan dapat bervariasi dari versi ke versi. Ikuti langkah-langkah ini:
- Instal Git di komputer; Ini bekerja dari baris perintah. Git adalah sistem manajemen kode sumber yang sangat populer, dan ada banyak sumber daya di Internet tentang menginstal dan menggunakan Git di seluruh platform. Setelah menginstal Git, pastikan itu bekerja dengan membuat tiruan dari repositori apa pun.
- Buka prompt perintah atau shell biasa. Pengguna Windows dapat membuka jendela Anaconda.
- Buka folder yang berfungsi di mana Anda ingin menempatkan kode baru Anda dan masukkan perintah berikut (pengguna Windows dapat memilih C: \ ML-Agen):
git clone https://github.com/Unity-Technologies/ml-agents
- Jadi, Anda mengkloning repositori ml-agen di komputer Anda dan membuat folder baru dengan nama yang sama. Anda juga dapat menambahkan nomor versi ke nama folder. Persatuan, seperti hampir seluruh dunia kecerdasan buatan, terus berubah, setidaknya untuk saat ini. Ini berarti bahwa perubahan baru terus muncul. Pada saat penulisan, kami mengkloning repositori ke folder ml-agent.6:
git clone https://github.com/Unity-Technologies/ml-agents ml-agents.6
- Buat lingkungan virtual baru untuk ml-agen dan tentukan versi 3.6, seperti ini:
# Jendela
conda create -n ml-agents python = 3.6
#Mac
Gunakan dokumentasi untuk lingkungan pilihan Anda
- Aktifkan kembali lingkungan Anda dengan Anaconda:
aktifkan ml-agen
- Instal TensorFlow. Di Anaconda, ini dapat dilakukan dengan perintah berikut:
pip instal tensorflow == 1.7.1
- Instal paket Python. Di Anaconda, masukkan yang berikut ini:
cd ML-Agents #from root folder cd ml-agents or cd ml-agents.6 #for example cd ml-agents pip install -e . or pip3 install -e .
- Jadi, Anda menginstal semua paket SDK Agen yang diperlukan; ini mungkin memakan waktu beberapa menit. Jangan tutup jendela, ini akan segera berguna.
Jadi kami menginstal dan mengkonfigurasi Unity Python SDK untuk ML-Agents. Di bagian selanjutnya, kita akan belajar cara mengatur dan melatih salah satu dari banyak lingkungan yang disediakan oleh Unity.
Pelatihan Agen
Sekarang kita bisa langsung ke bisnis dan mengeksplorasi contoh-contoh yang menggunakan deep reinforcement learning (DRL). Untungnya, ada beberapa contoh dalam toolkit agen baru untuk menunjukkan kekuatan mesin. Buka Unity atau Unity Hub, dan ikuti langkah-langkah ini:
- Klik pada tombol Buka proyek di bagian atas kotak dialog Proyek.
- Temukan dan buka folder proyek UnitySDK, seperti yang ditunjukkan pada tangkapan layar:
Buka Proyek Unity SDK - Tunggu proyek dimuat, dan kemudian buka jendela Proyek di bagian bawah editor. Jika sebuah jendela terbuka meminta Anda untuk memperbarui proyek, maka pilih ya atau lanjutkan. Saat ini, semua kode agen kompatibel ke belakang.
- Temukan dan buka adegan GridWorld seperti yang ditunjukkan pada tangkapan layar:
Membuka contoh adegan GridWorld - Pilih objek GridAcademy di jendela Hierarchy.
- Pergi ke jendela Inspektur dan di sebelah bidang Otak klik pada ikon untuk membuka dialog pemilihan Otak:
- Pilih otak GridWorldPlayer. Otak ini milik pemain, yaitu, pemain (Anda) dapat mengendalikan permainan.
- Klik tombol Play di bagian atas editor dan perhatikan lingkungannya. Karena gim sekarang diatur untuk mengontrol pemain, Anda dapat menggunakan tombol WASD untuk memindahkan kubus. Tugasnya adalah memindahkan kubus biru ke simbol + hijau, sambil menghindari X merah.
Dapatkan nyaman dalam permainan. Perhatikan bahwa permainan hanya berfungsi untuk periode waktu tertentu dan tidak berbasis giliran. Di bagian selanjutnya, kita akan belajar bagaimana menjalankan contoh ini dengan agen DRL.
Apa yang ada di otak?
Salah satu aspek luar biasa dari platform ML-Agen adalah kemampuan untuk dengan cepat dan mudah beralih dari manajemen pemain ke manajemen AI / agen. Untuk ini, Unity menggunakan konsep "otak". Otak dapat dikontrol baik oleh pemain atau oleh agen (learning brain). Hal yang paling menakjubkan adalah Anda dapat mengumpulkan game dan mengujinya sebagai pemain, dan kemudian memberikannya di bawah kendali agen RL. Berkat ini, game apa pun yang ditulis dengan sedikit usaha dapat dibuat untuk dikendalikan menggunakan AI.
Proses pengaturan dan memulai pelatihan agen RL di Unity cukup sederhana. Unity menggunakan Python eksternal untuk membangun model otak pembelajaran. Menggunakan Python sangat masuk akal karena sudah ada beberapa pustaka pembelajaran mendalam (DL) yang dibangun di sekitarnya. Untuk melatih agen di GridWorld, selesaikan langkah-langkah berikut:
- Pilih GridAcademy lagi dan pilih otak GridWorldLearning di bidang Otak alih-alih GridWorldPlayer:
Beralih ke Menggunakan Otak GridWorldLearning - Centang kotak Kontrol di sebelah kanan. Parameter sederhana ini melaporkan bahwa otak dapat dikontrol secara eksternal. Opsi ini harus diaktifkan.
- Pilih objek trueAgent di jendela Hierarchy, dan kemudian di jendela Inspector mengubah properti Brain di komponen Grid Agent ke otak GridWorldLearning:
Pekerjaan otak GridWorldLearning untuk agen - Dalam contoh ini, kita membutuhkan Akademi dan Agen untuk menggunakan otak GridWorldLearning yang sama. Beralih ke jendela Anaconda atau Python dan pilih folder ML-Agents / ml-agen.
- Jalankan perintah berikut di jendela Anaconda atau Python menggunakan lingkungan virtual ml-agent:
mlagents-pelajari config / trainer_config.yaml --run-id = firstRun --train
- Ini akan meluncurkan model pelatihan PPO Persatuan dan agen contoh dengan konfigurasi yang ditentukan. Pada titik tertentu, jendela prompt perintah akan meminta Anda untuk memulai editor Unity dengan lingkungan yang dimuat.
- Klik Mainkan di editor Persatuan untuk meluncurkan lingkungan GridWorld. Segera setelah itu, Anda akan melihat pelatihan agen dan output ke jendela skrip Python:
Menjalankan GridWorld dalam Mode Belajar - Perhatikan bahwa skrip mlagents-learn adalah kode Python yang membangun model RL untuk menjalankan agen. Seperti yang Anda lihat dari output skrip, ada beberapa parameter (hiperparameter) yang perlu dikonfigurasi.
- Biarkan agen mempelajari beberapa ribu iterasi dan perhatikan seberapa cepat ia belajar. Model internal yang digunakan di sini disebut PPO telah terbukti menjadi model pembelajaran yang sangat efektif untuk banyak tugas yang berbeda, dan sangat cocok untuk pengembangan game. Dengan peralatan yang cukup kuat, seorang agen idealnya dapat belajar dalam waktu kurang dari satu jam.
Biarkan agen belajar lebih lanjut dan mencari cara lain untuk melacak proses pembelajaran agen, seperti yang disajikan di bagian selanjutnya.
Memantau Pembelajaran dengan TensorBoard
Melatih agen menggunakan model RL atau model DL apa pun sering kali merupakan tugas yang menakutkan dan membutuhkan perhatian terhadap detail. Untungnya, TensorFlow memiliki seperangkat alat charting yang disebut TensorBoard yang dapat Anda gunakan untuk memantau proses belajar Anda. Ikuti langkah-langkah ini untuk memulai TensorBoard:
- Buka jendela Anaconda atau Python. Aktifkan lingkungan virtual ml-agen. Jangan tutup jendela di mana model pelatihan berjalan; kami membutuhkannya untuk melanjutkan.
- Buka folder ML-Agen / ml-agen dan jalankan perintah berikut:
tensorboard --logdir = ringkasan
- Jadi kami meluncurkan TensorBoard di server web internal kami sendiri. Anda dapat memuat halaman menggunakan URL yang ditampilkan setelah perintah sebelumnya.
- Masukkan URL untuk TensorBoard seperti yang ditunjukkan di jendela, atau ketik localhost: 6006 atau nama mesin: 6006 di browser. Setelah sekitar satu jam, Anda akan melihat sesuatu seperti ini:
Jendela Grafik TensorBoard - Tangkapan layar sebelumnya menunjukkan grafik, yang masing-masing menampilkan aspek pelatihan yang terpisah. Untuk memahami bagaimana agen kami dilatih, Anda perlu menangani masing-masing grafik ini, jadi kami akan menganalisis output dari setiap bagian:
- Lingkungan: bagian ini menunjukkan bagaimana agen memanifestasikan dirinya dalam lingkungan secara keseluruhan. Di bawah ini adalah tampilan grafik yang lebih rinci dengan tren yang disukai:
Gambar terperinci dari grafik bagian Lingkungan- Hadiah Kumulatif: Ini adalah hadiah total yang memaksimalkan agen. Biasanya perlu meningkat, tetapi untuk beberapa alasan itu dapat menurun. Itu selalu yang terbaik untuk memaksimalkan hadiah antara 1 dan -1. Jika jadwal hadiah melampaui kisaran ini, maka ini juga perlu diperbaiki.
- Panjang Episode: jika nilai ini menurun, maka itu biasanya pertanda baik. Pada akhirnya, semakin pendek episode, semakin banyak pelatihan. Namun, perlu diingat bahwa jika perlu, panjang episode dapat meningkat, sehingga gambarnya mungkin berbeda.
- Pelajaran: bagan ini memperjelas pelajaran yang diberikan agen; Ini dimaksudkan untuk pembelajaran kurikulum.
- Kerugian: Bagian ini menunjukkan grafik yang menunjukkan kerugian atau biaya yang dihitung untuk kebijakan dan nilai. Di bawah ini adalah tangkapan layar bagian ini dengan panah yang menunjuk ke pengaturan optimal:
Kehilangan dan pelatihan yang disukai
- Kerugian Kebijakan: Grafik ini menentukan jumlah perubahan kebijakan dari waktu ke waktu. Politik adalah elemen yang mendefinisikan tindakan, dan dalam kasus umum, jadwal ini harus cenderung ke bawah, menunjukkan bahwa politik membuat keputusan yang lebih baik.
- Kehilangan Nilai: Ini adalah kerugian rata-rata dari fungsi nilai. Intinya, ia memodelkan seberapa baik agen memprediksi nilai kondisi selanjutnya. Pada awalnya, nilai ini harus meningkat, dan setelah stabilisasi remunerasi, seharusnya menurun.
- Kebijakan: untuk menilai kualitas tindakan dalam PPO, konsep kebijakan digunakan, bukan model. Tangkapan layar di bawah ini menunjukkan grafik kebijakan dan tren yang disukai:
Bagan Kebijakan dan Tren Pilihan - Entropi: Grafik ini menunjukkan besarnya agen penelitian. Nilai ini perlu dikurangi, karena agen belajar lebih banyak tentang lingkungan dan membutuhkan lebih sedikit riset.
- Learning Rate: dalam hal ini, nilai ini harus secara bertahap menurun secara linear.
- Perkiraan Nilai: Ini adalah nilai rata-rata yang dikunjungi oleh semua negara agen. Untuk mencerminkan peningkatan pengetahuan agen, nilai ini harus tumbuh dan kemudian distabilkan.
6. Biarkan agen berjalan sampai selesai dan jangan menutup TensorBoard.
7. Kembali ke jendela Anaconda / Python yang melatih otak dan menjalankan perintah ini:
mlagents-pelajari config / trainer_config.yaml --run-id = secondRun --train
8. Anda akan kembali diminta untuk mengklik Mainkan di editor; jadi lakukanlah. Biarkan agen memulai pelatihan dan melakukan beberapa sesi. Dalam prosesnya, tonton jendela TensorBoard dan perhatikan bagaimana secondRun ditampilkan pada grafik. Anda dapat membiarkan agen ini berjalan hingga selesai, tetapi Anda dapat menghentikannya jika diinginkan.
Dalam versi ML-Agen sebelumnya, Anda harus terlebih dahulu membangun Unity yang dapat dieksekusi sebagai lingkungan belajar untuk gim, dan kemudian menjalankannya. Otak luar Python seharusnya bekerja dengan cara yang sama. Metode ini membuatnya sangat sulit untuk men-debug masalah dalam kode atau dalam game. Dalam teknik baru, semua kesulitan ini dihilangkan.
Sekarang kita telah melihat betapa mudahnya mengatur dan melatih agen, kita akan beralih ke bagian berikutnya, di mana kita belajar bagaimana menjalankan agen tanpa otak eksternal Python dan menjalankannya langsung di Unity.
Peluncuran Agen
Pelatihan python sangat bagus, tetapi Anda tidak bisa menggunakannya dalam gim nyata. Idealnya, kami ingin membuat grafik TensorFlow dan menggunakannya di Unity. Untungnya, perpustakaan TensorFlowSharp telah dibuat yang memungkinkan .NET untuk menggunakan grafis TensorFlow. Ini memungkinkan kami membuat model TFModels offline, dan kemudian menyuntikkannya ke dalam gim. Sayangnya, kita hanya bisa menggunakan model yang terlatih, tetapi tidak melatihnya seperti itu, setidaknya belum.
Mari kita lihat bagaimana ini bekerja, menggunakan contoh grafik yang baru saja kita latih untuk lingkungan GridWorld; gunakan itu sebagai otak bagian dalam Persatuan. Ikuti langkah-langkah di bagian berikut untuk mengatur dan menggunakan otak bagian dalam Anda:
- Unduh plugin TFSharp dari sini
- Dari menu editor, pilih Aset | Paket Impor | Paket Kustom ...
- Temukan paket aset yang baru saja Anda unduh dan gunakan dialog impor untuk memuat plugin ke proyek.
- Dari menu, pilih Edit | Pengaturan Proyek. Jendela Pengaturan terbuka (muncul dalam versi 2018.3)
- Temukan Scripting Define Symbols karakter dalam opsi Player dan ubah teks menjadi ENABLE_TENSORFLOW, dan juga aktifkan Izinkan Kode Tidak Aman, seperti yang ditunjukkan pada tangkapan layar:
Mengatur bendera ENABLE_TENSORFLOW - Temukan objek GridWorldAcademy di jendela Hierarchy dan pastikan bahwa ia menggunakan Brains | GridWorldLearning. Nonaktifkan opsi Kontrol di bagian Otak skrip Grid Academy.
- Temukan otak GridWorldLearning di folder Aset / Contoh / GridWorld / Otak dan pastikan bahwa parameter Model di jendela Inspektur diatur, seperti yang ditunjukkan pada tangkapan layar:
Model tugas untuk otak - GridWorldLearning harus sudah ditetapkan sebagai model. Dalam contoh ini, kami menggunakan model TF yang datang dengan contoh GridWorld.
- Klik Mainkan untuk memulai editor dan lihat bagaimana agen mengelola kubus.
Kami sekarang meluncurkan lingkungan pra-terlatih Unity. Di bagian selanjutnya, kita akan belajar bagaimana menggunakan otak yang kita latih di bagian sebelumnya.
Memuat otak yang terlatih
Semua contoh Unity memiliki otak pra-terlatih yang dapat digunakan untuk mempelajari contoh. Tentu saja, kami ingin dapat memuat grafik TF kami sendiri ke Unity dan menjalankannya. Untuk memuat grafik yang terlatih, ikuti langkah-langkah ini:
- Buka folder ML-Agen / ml-agen / model / firstRun-0. Di dalam folder ini adalah file GridWorldLearning.bytes. Seret file ini ke folder Project / Asset / ML-Agents / Examples / GridWorld / TFModels di dalam editor Unity:
Menyeret grafik byte ke Unity - Jadi kami mengimpor grafik ke proyek Unity sebagai sumber daya dan menamainya menjadi GridWorldLearning 1. Mesin melakukan ini karena model default sudah memiliki nama yang sama.
- Temukan GridWorldLearning di folder otak, pilih di jendela Inspektur dan seret model GridWorldLearning 1 yang baru ke dalam bidang Model Parameter Otak:
Memuat otak ke dalam bidang Model Grafik - Pada tahap ini, kita tidak perlu mengubah parameter lain, tetapi memberi perhatian khusus pada bagaimana otak dikonfigurasi. Untuk saat ini, pengaturan standar akan dilakukan.
- Klik Mainkan di editor Persatuan dan lihat bagaimana agen berhasil bergerak di sekitar permainan.
- Keberhasilan agen dalam permainan tergantung pada waktu pelatihannya. Jika Anda mengizinkannya menyelesaikan pelatihan, agen tersebut akan serupa dengan agen Persatuan yang sepenuhnya terlatih.