Q学习系数溢出

时间:2016-03-28 14:14:13

标签: pybrain reinforcement-learning q-learning

我一直在使用黑盒挑战(www.blackboxchallenge.com)来尝试学习强化学习。

我已经为挑战创建了一个任务和环境,我正在使用PyBrain基于黑盒环境进行训练。环境摘要是,每个州都有许多功能,这些功能是浮点数和一定数量的操作。对于训练示例,它有36个特征和4个动作。

我已经尝试了Q_LinFA和QLambda_LinFA学习器,但两者都有系数溢出(._theta数组)。在训练期间,值开始正常并快速增加,直到它们都是NaN。当我尝试用线性函数逼近器实现Q-learning时,我遇到了类似的问题。我也尝试将功能缩放到-1,1但这对任何事都没有帮助。

我的代码如下:

from bbox_environment import *
from bbox_task import *
import numpy as np
from pybrain.rl.learners.valuebased.linearfa import QLambda_LinFA 
from pybrain.rl.learners.valuebased import ActionValueNetwork
from pybrain.rl.agents.linearfa import LinearFA_Agent
from pybrain.rl.experiments import EpisodicExperiment

test_env = bbox_environment("../levels/train_level.data")
test_task = bbox_task(test_env)
#test_controller = ActionValueNetwork(test_env.outdim,test_env.numActions)
learner = QLambda_LinFA(4,36)
agent = LinearFA_Agent(learner)
experiment = EpisodicExperiment(test_task,agent)

num_episodes = 5 
i = 0

while(i < num_episodes):
    experiment.doEpisodes()
    agent.learn()
    agent.reset()
    print learner._theta
    i = i + 1

我的直觉是它可能与这两个运行时错误有关,但我无法弄明白。请帮帮忙?

/usr/local/lib/python2.7/dist-packages/pybrain/rl/learners/valuebased/linearfa.py:81: RuntimeWarning: invalid value encountered in subtract
  tmp -= max(tmp)
/usr/local/lib/python2.7/dist-packages/pybrain/rl/learners/valuebased/linearfa.py:126: RuntimeWarning: invalid value encountered in double_scalars
  td_error = reward + self.rewardDiscount * max(dot(self._theta, next_state)) - dot(self._theta[action], state)

2 个答案:

答案 0 :(得分:0)

我有同样的问题而没有倒退。在你的td_error中添加像thetas的平方和,它应该解决问题。 然而,正规化的想法是ML的核心思想之一,所以试着去了解它。

答案 1 :(得分:0)

我不熟悉您正在使用的库,但这种问题通常是由于学习率不佳(alpha参数)。我建议你尝试实现一个学习率随着时间的推移逐渐减少,比如1 / t(时间步长为t),或者更普遍的是考虑here提供的条件(2.8)。