PyBrain - Modul Pembelajaran Penguatan

Reinforcement Learning (RL) adalah bagian penting dalam Machine Learning. Pembelajaran penguatan membuat agen mempelajari perilakunya berdasarkan masukan dari lingkungan.

Komponen yang berinteraksi satu sama lain selama Penguatan adalah sebagai berikut -

  • Environment
  • Agent
  • Task
  • Experiment

Tata letak Reinforcement Learning diberikan di bawah ini -

Di RL, agen berbicara dengan lingkungan dalam iterasi. Pada setiap iterasi, agen menerima observasi yang memiliki imbalan. Kemudian memilih tindakan dan mengirimkannya ke lingkungan. Lingkungan di setiap iterasi pindah ke keadaan baru dan hadiah yang diterima setiap kali disimpan.

Tujuan agen RL adalah mengumpulkan hadiah sebanyak mungkin. Di antara iterasi kinerja agen dibandingkan dengan kinerja agen yang bertindak dengan cara yang baik dan perbedaan kinerja menimbulkan penghargaan atau kegagalan. RL pada dasarnya digunakan dalam tugas-tugas pemecahan masalah seperti kontrol robot, elevator, telekomunikasi, game, dll.

Mari kita lihat bagaimana bekerja dengan RL di Pybrain.

Kami akan mengerjakan labirin environmentyang akan direpresentasikan dengan 2 dimensi numpy array dimana 1 adalah dinding dan 0 adalah bidang bebas. Tanggung jawab agen adalah pindah ke lapangan bebas dan menemukan titik tujuan.

Berikut adalah aliran langkah demi langkah bekerja dengan lingkungan labirin.

Langkah 1

Impor paket yang kita butuhkan dengan kode di bawah ini -

from scipy import *
import sys, time
import matplotlib.pyplot as pylab # for visualization we are using mathplotlib

from pybrain.rl.environments.mazes import Maze, MDPMazeTask
from pybrain.rl.learners.valuebased import ActionValueTable
from pybrain.rl.agents import LearningAgent
from pybrain.rl.learners import Q, QLambda, SARSA #@UnusedImport
from pybrain.rl.explorers import BoltzmannExplorer #@UnusedImport
from pybrain.rl.experiments import Experiment
from pybrain.rl.environments import Task

Langkah 2

Buat lingkungan labirin menggunakan kode di bawah ini -

# create the maze with walls as 1 and 0 is a free field
mazearray = array(
   [[1, 1, 1, 1, 1, 1, 1, 1, 1],
   [1, 0, 0, 1, 0, 0, 0, 0, 1],
   [1, 0, 0, 1, 0, 0, 1, 0, 1],
   [1, 0, 0, 1, 0, 0, 1, 0, 1],
   [1, 0, 0, 1, 0, 1, 1, 0, 1],
   [1, 0, 0, 0, 0, 0, 1, 0, 1],
   [1, 1, 1, 1, 1, 1, 1, 0, 1],
   [1, 0, 0, 0, 0, 0, 0, 0, 1],
   [1, 1, 1, 1, 1, 1, 1, 1, 1]]
)
env = Maze(mazearray, (7, 7)) # create the environment, the first parameter is the 
maze array and second one is the goal field tuple

LANGKAH 3

Langkah selanjutnya adalah membuat Agen.

Agen memainkan peran penting dalam RL. Ini akan berinteraksi dengan lingkungan labirin menggunakan metode getAction () dan integratedObservation ().

Agen memiliki pengontrol (yang akan memetakan negara ke tindakan) dan pelajar.

Pengontrol di PyBrain seperti modul, yang masukannya adalah status dan mengubahnya menjadi tindakan.

controller = ActionValueTable(81, 4)
controller.initialize(1.)

Itu ActionValueTablemembutuhkan 2 masukan, yaitu jumlah status dan tindakan. Lingkungan labirin standar memiliki 4 tindakan: utara, selatan, timur, barat.

Sekarang kita akan membuat pelajar. Kami akan menggunakan algoritma pembelajaran SARSA () agar pelajar dapat digunakan dengan agen.

learner = SARSA()
agent = LearningAgent(controller, learner)

LANGKAH 4

Langkah ini menambahkan Agen ke Lingkungan.

Untuk menghubungkan agen ke lingkungan, kita membutuhkan komponen khusus yang disebut tugas. Peran atask adalah mencari tujuan di lingkungan dan bagaimana agen mendapat penghargaan atas tindakannya.

Lingkungan memiliki tugasnya sendiri. Lingkungan Maze yang kami gunakan memiliki tugas MDPMazeTask. MDP adalah singkatan dari“markov decision process”yang artinya, agen tersebut mengetahui posisinya di labirin. Lingkungan akan menjadi parameter tugas.

task = MDPMazeTask(env)

LANGKAH 5

Langkah selanjutnya setelah menambahkan agen ke lingkungan adalah membuat Eksperimen.

Sekarang kita perlu membuat eksperimen, sehingga kita dapat memiliki tugas dan agen berkoordinasi satu sama lain.

experiment = Experiment(task, agent)

Sekarang kita akan menjalankan percobaan 1000 kali seperti yang ditunjukkan di bawah ini -

for i in range(1000):
   experiment.doInteractions(100)
   agent.learn()
   agent.reset()

Lingkungan akan berjalan 100 kali antara agen dan tugas ketika kode berikut dijalankan -

experiment.doInteractions(100)

Setelah setiap iterasi, itu memberikan kembali status baru untuk tugas yang memutuskan informasi dan hadiah apa yang harus diteruskan ke agen. Kita akan memplot tabel baru setelah mempelajari dan mengatur ulang agen di dalam perulangan for.

for i in range(1000):
   experiment.doInteractions(100)
   agent.learn()
   agent.reset()
   pylab.pcolor(table.params.reshape(81,4).max(1).reshape(9,9))
   pylab.savefig("test.png")

Ini kode lengkapnya -

Contoh

maze.py

from scipy import *
import sys, time
import matplotlib.pyplot as pylab

from pybrain.rl.environments.mazes import Maze, MDPMazeTask
from pybrain.rl.learners.valuebased import ActionValueTable
from pybrain.rl.agents import LearningAgent
from pybrain.rl.learners import Q, QLambda, SARSA #@UnusedImport
from pybrain.rl.explorers import BoltzmannExplorer #@UnusedImport
from pybrain.rl.experiments import Experiment
from pybrain.rl.environments import Task

# create maze array
mazearray = array(
   [[1, 1, 1, 1, 1, 1, 1, 1, 1],
   [1, 0, 0, 1, 0, 0, 0, 0, 1],
   [1, 0, 0, 1, 0, 0, 1, 0, 1],
   [1, 0, 0, 1, 0, 0, 1, 0, 1],
   [1, 0, 0, 1, 0, 1, 1, 0, 1],
   [1, 0, 0, 0, 0, 0, 1, 0, 1],
   [1, 1, 1, 1, 1, 1, 1, 0, 1],
   [1, 0, 0, 0, 0, 0, 0, 0, 1],
   [1, 1, 1, 1, 1, 1, 1, 1, 1]]
)
env = Maze(mazearray, (7, 7))

# create task
task = MDPMazeTask(env)

#controller in PyBrain is like a module, for which the input is states and 
convert them into actions.
controller = ActionValueTable(81, 4)
controller.initialize(1.)

# create agent with controller and learner - using SARSA()
learner = SARSA()

# create agent
agent = LearningAgent(controller, learner)

# create experiment
experiment = Experiment(task, agent)

# prepare plotting
pylab.gray()
pylab.ion()

for i in range(1000):
experiment.doInteractions(100)

agent.learn()
agent.reset()

pylab.pcolor(controller.params.reshape(81,4).max(1).reshape(9,9))
pylab.savefig("test.png")

Keluaran

python maze.py

Warna di bidang bebas akan berubah di setiap iterasi.