Q Коэффициенты обучения переполняются

Я использовал задание «черный ящик» (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)

person user104981    schedule 28.03.2016    source источник


Ответы (2)


У меня была такая же проблема без регрессии потерь. Добавьте что-то вроде суммы квадратов тета к вашему td_error, это должно решить проблему. Однако идея регуляризации — одна из центральных идей машинного обучения, так что постарайтесь узнать о ней.

person Spoilt333    schedule 04.04.2016

Я не знаком с библиотеками, которые вы используете, но такая проблема обычно возникает из-за плохой скорости обучения (альфа-параметр). Я бы порекомендовал вам попытаться реализовать скорость обучения, которая со временем уменьшается, например 1/t (t для временного шага), или, в более общем смысле, которая соответствует условию (2.8), предоставленному здесь.

person Hatim Khouzaimi    schedule 09.04.2016