0

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

我已经为挑战创建了一个任务和一个环境,并且我正在使用 PyBrain 基于黑盒环境进行训练。环境的总结是每个状态都有许多特性,它们是浮点数的 numpy ndarray 和一组动作。对于训练示例,它是 36 个特征和 4 个动作。

我已经尝试过 Q_LinFA 和 QLambda_LinFA 学习器,但它们的系数都溢出(._theta 数组)。在训练期间,值开始正常并迅速增加,直到它们都是 NaN。当我尝试自己使用线性函数逼近器实现 Q 学习时,我遇到了类似的问题。我也尝试将功能缩小到 -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)
4

2 回答 2

0

我有同样的问题,没有损失回归。将诸如 thetas 平方和之类的东西添加到您的 td_error 中,它应该可以解决问题。但是,正则化的思想是 ML 的核心思想之一,因此请尝试了解它。

于 2016-04-04T21:00:04.327 回答
0

我不熟悉您正在使用的库,但这种问题通常是由于学习率(alpha 参数)不好。我建议您尝试实现一个随时间递减的学习率,例如 1/t(时间步长为 t),或者更普遍地遵守此处提供的条件(2.8) 。

于 2016-04-09T13:42:17.783 回答