Arsitektur jaringan saraf untuk mengimplementasikan algoritma RL dengan kemampuan untuk mengatur tindakan yang berjalan secara bersamaan

Salah satu skema jaringan saraf klasik untuk mengimplementasikan algoritma RL adalah sebagai berikut:


Di mana: input - input ke jaringan saraf; Arsitektur lapisan tersembunyi FC - (terhubung penuh) atau CNN - FC - arsitektur arsitektur lapisan tersembunyi (tergantung pada apa yang diumpankan ke input); keluaran - keluaran jaringan. Seringkali, output jaringan adalah lapisan softmax yang memberikan kemungkinan salah satu tindakan dari set semua tindakan yang mungkin.

Kerugian dari arsitektur ini adalah sulit untuk mengimplementasikan pilihan dari beberapa tindakan yang dilakukan secara bersamaan.

Untuk mengatasi masalah ini, arsitektur dengan lapisan topeng diusulkan. Arsitektur yang diusulkan adalah sebagai berikut:


Arsitektur ini sepenuhnya konsisten dengan arsitektur klasik, tetapi juga termasuk layer action mask. Hanya ada satu jalan keluar dari arsitektur ini - ini adalah nilai dari nilai tindakan (sekelompok tindakan yang dilakukan secara bersamaan). Layer mask tindakan dapat diimplementasikan sesuai dengan pseudo-code di bawah ini:

import numpy as np class Layer: def __init__(self, items, item_size, extra_size): assert(items > 0) assert(item_size > 0) assert(extra_size >= 0) self.items = items self.item_size = item_size self.extra_size = extra_size def build(self): self._expand_op = np.zeros((self.items, self.items*self.item_size), \ dtype=np.float32) for i in range(self.items): self._expand_op[i,i*self.item_size:(i+1)*self.item_size] = np.float32(1.0) def call(self, inputs, ops): op_mask_part = inputs[:self.items*self.item_size] if self.extra_size > 0: ext_part = inputs[self.items*self.item_size:] else: ext_part = None # if ops in [-0.5, 0.5] or [-0.5 .. 0.5]: ops1 = np.add(ops, np.float(0.5)) # optional extended_op = np.matmul(ops1, self._expand_op) if self.extra_size > 0: return np.concatenate((np.multiply(op_mask_part, extended_op), ext_part)) else: return np.multiply(op_mask_part,extended_op) 

Dan menggunakan kode ini menunjukkan potongan kode berikut:

 items = 5 item_size = 10 extra_size = 20 l = Layer(items=items, item_size=item_size, extra_size=extra_size) l.build() inputs = np.random.rand(items*item_size+extra_size) ops = np.random.randint(0, 2, (items,), dtype="int") ops = ops.astype(dtype=np.float32) - np.float32(0.5) result = l.call(inputs,ops) 

Dapat dilihat dari kode layer bahwa untuk setiap aksi jaringan saraf belajar membentuk beberapa representasi aksi dalam bentuk serangkaian bobot. Dan representasi ini bisa masuk ke jaringan setelah layer mask atau tidak. Bergantung pada operasi, bobot ini dapat terjadi dengan tugas beberapa operasi pada seluruh kelompok bobot aksi (tidak hanya perkalian dengan [0,1]). Dengan demikian, tugas tindakan dibentuk untuk menghitung nilai kelompok tindakan yang dilakukan oleh jaringan. (Dalam kasus klasik, lapisan softmax menghitung nilai semua tindakan; dalam arsitektur yang diusulkan, jaringan saraf menghitung nilai sekelompok tindakan yang dipilih.)

(Untuk definisi nilai suatu tindakan, lihat, misalnya, R.S. Sutton, E.G. Barto Reinforced Learning.)

Contoh penggunaan arsitektur yang diusulkan


Game tetris


Gagasan menggunakan arsitektur ini untuk memainkan tetris adalah sebagai berikut. Pada input, kami mengirimkan gambar kaca dari game tetris (satu pixel satu persegi). Kami mengelompokkan aksi individu menjadi grup aksi. Evaluasi satu tindakan untuk jaringan saraf adalah topeng dari posisi akhir sosok dalam gelas. Angka tersebut diatur oleh kuadratnya di dalam topeng tindakan di lapisan topeng aksi di jaringan saraf. Untuk memilih grup tindakan, kami memilih penilaian maksimum aksi (keluar) dari daftar semua posisi akhir dari gambar saat ini.


Menggambar. Bidang (sel biru) dan bentuk jatuh (sel abu-abu terang) ditampilkan. Posisi akhir gambar adalah semua posisi yang memungkinkan dari mana gambar tidak dapat bergerak sesuai dengan aturan permainan (tidak ditampilkan).

Agen mensimulasikan pergerakan mobil


Dalam hal ini, setiap aksi akselerasi (beberapa akselerasi akselerasi), pengereman (beberapa akselerasi yang dimungkinkan selama pengereman), serta beberapa derajat rotasi dimodelkan sebagai aksi elementer. Dapat dipahami bahwa pada saat yang sama suatu rotasi dan salah satu akselerasi mungkin terlibat, atau hanya satu aksi rotasi atau satu aksi akselerasi. Dalam hal ini, arsitektur memungkinkan Anda menentukan beberapa tindakan elementer pada saat yang bersamaan untuk membentuk aksi kompleks.


Menggambar. Selain bidang untuk melakukan tindakan oleh model mobil (di mana tujuan parkir ditunjukkan oleh garis merah dan hijau), input dari jaringan saraf (di bawah) dan nilai-nilai evaluasi tindakan untuk semua tindakan yang mungkin dilakukan dalam keadaan model ini juga ditampilkan.

Aplikasi arsitektur lainnya yang mungkin


Demikian pula, dengan penggunaan tetris dalam game, arsitektur dapat digunakan untuk game lain, di mana serangkaian angka dan beberapa aksi dapat diatur di lapangan pada saat yang sama (misalnya, bergerak di sekitar lapangan bermain).

Dalam robotika, arsitektur ini dapat berfungsi sebagai meta-jaringan yang mengoordinasikan elemen-elemen struktural individu menjadi ansambel bersama.

Juga, arsitektur ini memungkinkan Anda untuk menggunakan transfer belajar untuk melatih bagian CNN sebelumnya, dan sebaliknya pada awalnya untuk melatih bagian RL dari jaringan saraf, dan kemudian melatih bagian CNN pada jaringan RL yang sudah terlatih pada data model. Dalam contoh, ketika memprogram permainan Tetris, pembelajaran transfer diterapkan dengan pelatihan di awal bagian CNN dan bagian FC ke lapisan masker aksi (apa yang ditransfer ke jaringan yang dihasilkan). Dalam masalah parkir, saya juga berencana untuk menerapkan pelatihan CNN setelah mempelajari bagian RL (yaitu cherry pertama).

→ Contoh kode sumber program dapat ditemukan di sini

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


All Articles