Pybrain-reinforcement-learning-module
PyBrain-強化学習モジュール
強化学習(RL)は、機械学習の重要な部分です。 強化学習により、エージェントは環境からの入力に基づいて行動を学習します。
強化中に相互作用するコンポーネントは次のとおりです-
- 環境
- エージェント
- Task
- 実験
強化学習のレイアウトは以下のとおりです-
RLでは、エージェントは環境と繰り返し対話します。 各反復で、エージェントは報酬のあるオブザベーションを受け取ります。 次に、アクションを選択し、環境に送信します。 各反復での環境は新しい状態に移行し、毎回受け取った報酬は保存されます。
RLエージェントの目標は、できるだけ多くの報酬を収集することです。 反復の間、エージェントのパフォーマンスは、適切に機能するエージェントのパフォーマンスと比較され、パフォーマンスの違いは報酬または失敗のいずれかを引き起こします。 RLは基本的に、ロボット制御、エレベータ、通信、ゲームなどの問題解決タスクで使用されます。
PybrainでRLを操作する方法を見てみましょう。
迷路*環境*で作業します。これは、1が壁で0が自由フィールドである2次元のnumpy配列を使用して表されます。 エージェントの責任は、フリーフィールド上を移動してゴールポイントを見つけることです。
以下は、迷路環境での作業の段階的な流れです。
ステップ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(
[[env = Maze(mazearray, (7, 7)) # create the environment, the first parameter is the
maze array and second one is the goal field tuple
ステップ3
次のステップは、エージェントを作成することです。
エージェントはRLで重要な役割を果たします。 getAction()メソッドとintegratedObservation()メソッドを使用して、迷路環境と対話します。
エージェントには、コントローラー(状態をアクションにマップする)と学習者がいます。
PyBrainのコントローラーはモジュールのようなもので、入力はステートであり、アクションに変換されます。
controller = ActionValueTable(81, 4)
controller.initialize(1.)
*_ActionValueTable_* には2つの入力、つまり状態とアクションの数が必要です。 標準的な迷路環境には、北、南、東、西の4つのアクションがあります。
次に、学習者を作成します。 エージェントで使用する学習者にSARSA()学習アルゴリズムを使用します。
learner = SARSA()
agent = LearningAgent(controller, learner)
ステップ4
この手順では、環境にエージェントを追加しています。
エージェントを環境に接続するには、タスクと呼ばれる特別なコンポーネントが必要です。 *タスク*の役割は、環境内の目標と、エージェントがアクションに対する報酬を得る方法を探すことです。
環境には独自のタスクがあります。 使用したMaze環境にはMDPMazeTaskタスクがあります。 MDPは*「マルコフ決定プロセス」*の略で、エージェントが迷路での位置を知っていることを意味します。 環境はタスクのパラメーターになります。
task = MDPMazeTask(env)
ステップ5
環境にエージェントを追加した後の次のステップは、実験を作成することです。
ここで、タスクとエージェントを相互に調整できるように、実験を作成する必要があります。
experiment = Experiment(task, agent)
今、私たちは以下に示すように実験を1000回実行するつもりです-
for i in range(1000):
experiment.doInteractions(100)
agent.learn()
agent.reset()
次のコードが実行されると、環境はエージェントとタスクの間で100回実行されます-
experiment.doInteractions(100)
各反復の後、新しい情報をタスクに返し、エージェントに渡す情報と報酬を決定します。 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")
ここに完全なコードがあります-
例
*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(
[[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*
自由フィールドの色は、反復ごとに変更されます。