2016-03-28 12 views
0

私はブラックボックスチャレンジ(www.blackboxchallenge.com)を使用して強化学習を試みました。Q学習係数のオーバーフロー

チャレンジのためのタスクと環境を作成しました。私はPyBrainを使用してブラックボックス環境に基づいてトレーニングを行っています。環境の概要は、浮動小数点数のndarrayと設定された数のアクションである、各状態ごとにいくつかの機能を持っていることです。トレーニングの例では、36のフィーチャと4つのアクションです。

私はQ_LinFAとQLambda_LinFAの両方の学習者を試しましたが、両方とも係数のオーバーフロー(._theta配列)があります。トレーニング中に値はOKから始まり、すべてが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) 

答えて

0

私は同じ問題を抱えていました。あなたのtd_errorにthetaの四角形のようなものを追加すると、問題が修正されるはずです。 しかし、正則化の考え方はMLの中心的アイデアの1つなので、それについて学びましょう。

0

私は使用しているライブラリに精通していませんが、この種の問題は通常、学習率が悪いためです(アルファパラメータ)。 1/t(時間ステップではt)のように経時的に減少する学習率を実装しようとするか、より一般的には、hereで与えられた条件(2.8)を尊重することをお勧めします。