深度强化学习训练的准确性

时间:2019-06-04 14:43:06

标签: machine-learning deep-learning artificial-intelligence reinforcement-learning keras-rl

我正在使用深度强化学习方法来预测时间序列行为。我是一个新手,所以我的问题比计算机编程的问题更具概念性。我的同事给了我以下图表,其中包括使用深度强化学习的时间序列数据分类的训练,验证和测试准确性。

enter image description here

从该图可以看出,验证和测试准确性都是随机的,因此,代理当然是过拟合的。

但是让我感到惊讶的是我的同事如何训练他的经纪人(也许是由于缺乏知识,这就是为什么我在这里问你)。在此图表的X轴上,您可以找到“时期”数字(或迭代)。换句话说,代理已多次安装(或训练) 如以下代码所示:

#initiating the agent

self.agent = DQNAgent(model=self.model, policy=self.policy, 
nb_actions=self.nbActions, memory=self.memory, nb_steps_warmup=200, 
target_model_update=1e-1, 
enable_double_dqn=True,enable_dueling_network=True)

#Compile the agent with the Adam optimizer and with the mean absolute error metric

self.agent.compile(Adam(lr=1e-3), metrics=['mae'])

#there will be 100 iterations, I will fit and test the agent 100 times
for i in range(0,100):
    #delete previous environments and create new ones         
    del(trainEnv)       
    trainEnv = SpEnv(parameters)
    del(validEnv)
    validEnv=SpEnv(parameters)
    del(testEnv)
    testEnv=SpEnv(parameters)

   #Reset the callbacks used to show the metrics while training, validating and testing
   self.trainer.reset()
   self.validator.reset()
   self.tester.reset()

   ####TRAINING STEP#### 
   #Reset the training environment
   trainEnv.resetEnv()
   #Train the agent
   self.agent.fit(trainEnv,nb_steps=floor(self.trainSize.days-self.trainSize.days*0.2),visualize=False,verbose=0)
   #Get metrics from the train callback  
   (metrics)=self.trainer.getInfo()
   #################################

   ####VALIDATION STEP####
   #Reset the validation environment
   validEnv.resetEnv()
   #Test the agent on validation data
   self.agent.test(validEnv,other_parameters)
   #Get the info from the validation callback
   (metrics)=self.validator.getInfo()
   ####################################             

   ####TEST STEP####
   #Reset the testing environment
   testEnv.resetEnv()
   #Test the agent on testing data            
   self.agent.test(testEnv,nb_episodes=floor(self.validationSize.days-self.validationSize.days*0.2),visualize=False,verbose=0)
   #Get the info from the testing callback
   (metrics)=self.tester.getInfo()

根据图表和代码,对我来说奇怪的是,代理已多次安装,彼此独立,但是训练精度随时间增加。似乎以前的经验正在帮助代理商提高培训准确性。但是,如果重置环境并且代理又简单地重新安装,那怎么可能呢?以前配件的误差是否向后传播,这有助于代理提高其在后续配件中的精度?

2 个答案:

答案 0 :(得分:2)

重置的是环境,而不是代理。因此,座席实际上是在每次迭代中积累经验。

答案 1 :(得分:1)

环境正在重置,但代理未重置。

可学习的参数属于代理,而不是环境。因此,agent的参数在所有情节中都在变化,也就是说,每次您拟合数据时agent都会学习。

如果在您适合的所有时间数据都相同,那么只会使我们的代理人过度拟合数据分布