PyBrain - โมดูลการเรียนรู้การเสริมแรง

Reinforcement Learning (RL) เป็นส่วนสำคัญใน Machine Learning การเรียนรู้แบบเสริมกำลังทำให้ตัวแทนเรียนรู้พฤติกรรมของมันโดยอาศัยปัจจัยนำเข้าจากสิ่งแวดล้อม

ส่วนประกอบที่โต้ตอบกันระหว่างการเสริมแรงมีดังนี้ -

  • Environment
  • Agent
  • Task
  • Experiment

เค้าโครงของการเรียนรู้การเสริมแรงมีให้ด้านล่าง -

ใน RL ตัวแทนจะพูดคุยกับสิ่งแวดล้อมในการทำซ้ำ ในการทำซ้ำแต่ละครั้งตัวแทนจะได้รับการสังเกตซึ่งมีรางวัล จากนั้นเลือกการกระทำและส่งไปยังสิ่งแวดล้อม สภาพแวดล้อมในการทำซ้ำแต่ละครั้งจะย้ายไปสู่สถานะใหม่และรางวัลที่ได้รับในแต่ละครั้งจะถูกบันทึกไว้

เป้าหมายของตัวแทน RL คือการรวบรวมรางวัลให้ได้มากที่สุด ในระหว่างการทำซ้ำประสิทธิภาพของตัวแทนจะถูกเปรียบเทียบกับของตัวแทนที่ทำหน้าที่ในทางที่ดีและความแตกต่างของประสิทธิภาพก่อให้เกิดรางวัลหรือความล้มเหลว โดยทั่วไปแล้ว RL จะใช้ในการแก้ปัญหาเช่นการควบคุมหุ่นยนต์ลิฟต์โทรคมนาคมเกมเป็นต้น

ลองมาดูวิธีการทำงานกับ RL ใน Pybrain

เรากำลังจะทำงานในเขาวงกต environmentซึ่งจะแสดงโดยใช้อาร์เรย์ numpy 2 มิติโดยที่ 1 คือกำแพงและ 0 คือฟิลด์ว่าง ความรับผิดชอบของตัวแทนคือการเคลื่อนย้ายไปยังสนามว่างและค้นหาจุดเป้าหมาย

นี่คือขั้นตอนการทำงานกับสภาพแวดล้อมเขาวงกตทีละขั้นตอน

ขั้นตอนที่ 1

นำเข้าแพ็คเกจที่เราต้องการด้วยรหัสด้านล่าง -

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

ขั้นตอนที่ 2

สร้างสภาพแวดล้อมเขาวงกตโดยใช้รหัสด้านล่าง -

# 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

ขั้นตอนที่ 3

ขั้นตอนต่อไปคือการสร้าง Agent

ตัวแทนมีบทบาทสำคัญใน RL มันจะโต้ตอบกับสภาพแวดล้อมเขาวงกตโดยใช้เมธอด getAction () และ integrateObservation ()

ตัวแทนมีตัวควบคุม (ซึ่งจะแมปสถานะกับการกระทำ) และผู้เรียน

คอนโทรลเลอร์ใน PyBrain เป็นเหมือนโมดูลที่อินพุตเป็นสถานะและแปลงเป็นการกระทำ

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

ActionValueTableต้องการปัจจัยการผลิต 2 รายการกล่าวคือจำนวนสถานะและการดำเนินการ สภาพแวดล้อมเขาวงกตมาตรฐานมี 4 การกระทำ: เหนือใต้ตะวันออกตะวันตก

ตอนนี้เราจะสร้างผู้เรียน เราจะใช้อัลกอริทึมการเรียนรู้ SARSA () สำหรับผู้เรียนที่จะใช้กับตัวแทน

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

ขั้นตอนที่ 4

ขั้นตอนนี้กำลังเพิ่ม Agent ให้กับ Environment

ในการเชื่อมต่อตัวแทนกับสภาพแวดล้อมเราจำเป็นต้องมีองค์ประกอบพิเศษที่เรียกว่างาน บทบาทของกtask คือการมองหาเป้าหมายในสิ่งแวดล้อมและวิธีที่ตัวแทนได้รับผลตอบแทนจากการกระทำ

สภาพแวดล้อมมีงานของตัวเอง สภาพแวดล้อมเขาวงกตที่เราใช้มีงาน MDPMazeTask MDP ย่อมาจาก“markov decision process”ซึ่งหมายความว่าตัวแทนรู้ตำแหน่งในเขาวงกต สภาพแวดล้อมจะเป็นพารามิเตอร์ของงาน

task = MDPMazeTask(env)

ขั้นตอนที่ 5

ขั้นตอนต่อไปหลังจากเพิ่มตัวแทนในสภาพแวดล้อมคือการสร้างการทดสอบ

ตอนนี้เราจำเป็นต้องสร้างการทดสอบเพื่อที่เราจะได้มีงานและตัวแทนประสานงานซึ่งกันและกัน

experiment = Experiment(task, agent)

ตอนนี้เราจะทำการทดลอง 1,000 ครั้งดังที่แสดงด้านล่าง -

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

สภาพแวดล้อมจะทำงาน 100 ครั้งระหว่างเอเจนต์และงานเมื่อโค้ดต่อไปนี้ถูกเรียกใช้งาน -

experiment.doInteractions(100)

หลังจากการทำซ้ำแต่ละครั้งจะให้สถานะใหม่แก่งานซึ่งจะตัดสินว่าควรส่งข้อมูลและรางวัลใดให้กับตัวแทน เรากำลังจะวางตารางใหม่หลังจากเรียนรู้และรีเซ็ตเอเจนต์ภายใน for loop

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

นี่คือรหัสเต็ม -

ตัวอย่าง

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

เอาต์พุต

python maze.py

สีในช่องว่างจะเปลี่ยนไปในการทำซ้ำแต่ละครั้ง