Bagaimana saya mengajar seekor ular untuk bermain sendiri menggunakan Q-Network

Suatu ketika, menjelajahi kedalaman Internet, saya menemukan sebuah video di mana seseorang melatih ular menggunakan algoritma genetika. Dan saya menginginkan hal yang sama. Tetapi hanya untuk mengambil semua yang sama dan menulis dengan python tidak akan menarik. Dan saya memutuskan untuk menggunakan pendekatan yang lebih modern untuk sistem agen pelatihan, yaitu Q-network. Tapi mari kita mulai dari awal.


Pelatihan penguatan


Dalam pembelajaran mesin, RL (Reinforcement Learning) sangat berbeda dari daerah lain. Perbedaannya adalah bahwa algoritma ML klasik belajar dari data yang sudah jadi, sementara RL, dapat dikatakan, menciptakan data ini untuk dirinya sendiri. Gagasan RL adalah bahwa selain algoritma itu sendiri, yang disebut agen, ada lingkungan di mana agen ini ditempatkan. Pada setiap tahap, agen harus melakukan beberapa tindakan (aksi), dan lingkungan merespons dengan hadiah (hadiah) dan statusnya (negara), atas dasar di mana agen melakukan tindakan.


Dqn


Seharusnya ada penjelasan tentang bagaimana algoritma bekerja, tetapi saya akan meninggalkan tautan ke tempat orang pintar menjelaskannya.


Implementasi ular


Setelah kami menemukan c rl, kami perlu menciptakan lingkungan di mana kami akan menempatkan agen. Untungnya, tidak perlu menemukan kembali roda, karena perusahaan seperti open-ai telah menulis perpustakaan gym, yang dengannya Anda dapat menulis lingkungan Anda sendiri. Di perpustakaan mereka sudah dalam jumlah besar. Dari game atari sederhana hingga model 3d kompleks. Namun di antara semua ini tidak ada ular. Oleh karena itu, kami melanjutkan pembuatannya.


Saya tidak akan menjelaskan semua momen menciptakan lingkungan di gym, tetapi saya hanya akan menunjukkan kelas utama, di mana diperlukan untuk mengimplementasikan beberapa fungsi.


import gym class Env(gym.Env): def __init__(self): pass def step(self, action): """    .    ,      """ def reset(self): """        """ def render(self, mode='human'): """ """ 

Tetapi untuk mengimplementasikan fungsi-fungsi ini, kita perlu membuat sistem penghargaan dan dalam bentuk apa kita akan memberikan informasi tentang lingkungan.


Ketentuan


Dalam video itu, seorang pria memberi ular jarak ke dinding, ular dan apel di 8 arah. Itu adalah 24 angka. Saya memutuskan untuk mengurangi jumlah data, tetapi sedikit menyulitkan mereka. Pertama, saya akan menggabungkan jarak ke dinding dengan jarak ke ular. Sederhananya, kami akan memberi tahu dia jarak ke objek terdekat yang bisa membunuh dalam tabrakan. Kedua, hanya akan ada 3 arah dan mereka akan bergantung pada arah pergerakan ular. Misalnya, ketika mulai, ular itu melihat ke atas, jadi kami akan memberi tahu jarak ke dinding atas, kiri dan kanan. Tetapi ketika kepala ular berbelok ke kanan, maka kita sudah akan melaporkan jarak ke dinding kanan, atas dan bawah. Demi kesederhanaan, saya akan memberikan gambar.



Saya juga memutuskan untuk bermain dengan apel. Kami akan menyajikan informasi tentang hal itu dalam bentuk (x, y) koordinat dalam sistem koordinat, yang berasal dari kepala ular. Sistem koordinat juga akan mengubah orientasinya di belakang kepala ular. Setelah gambar, saya pikir itu pasti menjadi jelas.



Hadiah


Jika Anda dapat memunculkan beberapa fitur dengan keadaan dan berharap bahwa jaringan saraf akan mengetahuinya, maka dengan penghargaan semuanya menjadi lebih rumit. Tergantung padanya apakah agen akan belajar dan apakah dia akan belajar apa yang kita inginkan.


Saya akan segera memberikan sistem penghargaan yang dengannya saya telah mencapai pelatihan yang stabil.


  • Pada setiap langkah, hadiahnya adalah -0,25.
  • Saat kematian -10.
  • Setelah kematian, hingga 15 langkah -100.
  • Saat makan apel sqrt ( jumlah apel dimakan ) * 3.5.

Dan juga memberikan contoh apa yang mengarah pada sistem penghargaan yang buruk.


  • Jika Anda tidak memberikan hadiah yang cukup kecil untuk kematian di beberapa langkah pertama, maka ular akan lebih memilih untuk membunuh di dinding. Ini lebih mudah daripada mencari apel :)
  • Jika Anda memberikan hadiah positif untuk langkah-langkahnya, maka ular akan mulai berputar tanpa akhir. Karena menurutnya itu akan lebih menguntungkan daripada mencari apel.
  • Dan banyak kasus lain di mana ular tidak mau belajar.

Nah, contoh dari apa yang dipelajari ular dalam 2000 episode


Ringkasan


Ketertarikan utama dalam menulis ular adalah untuk melihat bagaimana ular itu belajar dengan mengetahui sedikit tentang lingkungannya. Dan dia belajar dengan baik, karena rata-rata apel yang dimakan mencapai 23, yang menurut saya, tidak terlalu buruk. Karena itu, percobaan dapat dianggap berhasil.


Kode sumber

Source: https://habr.com/ru/post/id465477/


All Articles