PyBrain - Takviye Öğrenim Modülü

Takviyeli Öğrenme (RL), Makine Öğreniminin önemli bir parçasıdır. Pekiştirmeli öğrenme, aracının ortamdan gelen girdilere dayalı olarak davranışını öğrenmesini sağlar.

Takviye sırasında birbirleriyle etkileşime giren bileşenler aşağıdaki gibidir -

  • Environment
  • Agent
  • Task
  • Experiment

Takviyeli Öğrenmenin düzeni aşağıda verilmiştir -

RL'de, aracı yinelemeli olarak çevre ile konuşur. Temsilci, her yinelemede ödülün bulunduğu bir gözlem alır. Daha sonra eylemi seçer ve ortama gönderir. Her yinelemede ortam yeni bir duruma geçer ve her seferinde alınan ödül kaydedilir.

RL temsilcisinin amacı, olabildiğince çok ödül toplamaktır. Yineleme arasında, aracının performansı, iyi bir şekilde davranan temsilcinin performansı ile karşılaştırılır ve performans farkı, ödül veya başarısızlığa yol açar. RL temel olarak robot kontrolü, asansör, telekomünikasyon, oyunlar vb. Gibi problem çözme görevlerinde kullanılır.

Pybrain'de RL ile nasıl çalışılacağına bir göz atalım.

Labirent üzerinde çalışacağız environment1'in bir duvar ve 0'ın bir boş alan olduğu 2 boyutlu numpy dizisi kullanılarak temsil edilecektir. Temsilcinin sorumluluğu, serbest sahayı geçmek ve hedef noktasını bulmaktır.

İşte labirent ortamıyla çalışmanın adım adım akışı.

Aşama 1

İhtiyacımız olan paketleri aşağıdaki kodla içe aktarın -

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

Adım 2

Aşağıdaki kodu kullanarak labirent ortamını oluşturun -

# 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

Aşama 3

Bir sonraki adım, Aracı oluşturmaktır.

Ajan, RL'de önemli bir rol oynar. GetAction () ve integrateObservation () yöntemlerini kullanarak labirent ortamıyla etkileşime girecektir.

Temsilcinin bir denetleyicisi (durumları eylemlerle eşleştirecek) ve bir öğrencisi vardır.

PyBrain'deki kontrolör, girişin durum olduğu ve bunları eyleme dönüştürdüğü bir modül gibidir.

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

ActionValueTable2 girdiye ihtiyaç duyar, yani durum ve eylem sayısı. Standart labirent ortamında 4 eylem vardır: kuzey, güney, doğu, batı.

Şimdi bir öğrenci yaratacağız. Aracı ile birlikte kullanılacak öğrenci için SARSA () öğrenme algoritmasını kullanacağız.

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

4. adım

Bu adım, Ortama Ajan eklemektir.

Aracıyı ortama bağlamak için görev adı verilen özel bir bileşene ihtiyacımız var. Bir rolütask çevredeki hedefi ve temsilcinin eylemler için nasıl ödül kazandığını aramaktır.

Çevrenin kendi görevi vardır. Kullandığımız Labirent ortamında MDPMazeTask görevi bulunmaktadır. MDP kısaltması“markov decision process”yani, ajan labirentteki konumunu bilir. Çevre, görevin bir parametresi olacaktır.

task = MDPMazeTask(env)

Adım 5

Ortama aracı ekledikten sonraki adım, bir Deney oluşturmaktır.

Şimdi, görevi ve aracıyı birbiriyle koordine edebilmemiz için deneyi oluşturmamız gerekiyor.

experiment = Experiment(task, agent)

Şimdi, deneyi aşağıda gösterildiği gibi 1000 kez çalıştıracağız -

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

Aşağıdaki kod yürütüldüğünde ortam, aracı ve görev arasında 100 kez çalışacaktır -

experiment.doInteractions(100)

Her yinelemeden sonra, temsilciye hangi bilgilerin ve ödülün aktarılması gerektiğine karar veren göreve yeni bir durum verir. For döngüsü içindeki aracıyı öğrenip sıfırladıktan sonra yeni bir tablo çizeceğiz.

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")

İşte tam kod -

Misal

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")

Çıktı

python maze.py

Boş alandaki renk her yinelemede değiştirilecektir.