深度强化学习训练准确率
Deep Reinforcement Learning Training Accuracy
我正在使用深度强化学习方法来预测时间序列行为。我在这方面是个新手,所以我的问题比计算机编程问题更具概念性。我的同事给了我下面的图表,使用深度强化学习训练、验证和测试时间序列数据分类的准确性。
从这张图中可以看出,验证和测试的准确度都是随机的,因此,当然,代理是过度拟合的。
但更让我惊讶的是(可能是知识匮乏,所以才来问你),我的同事是如何训练他的agent的。在此图表的 X 轴中,您可以找到 "epoch" 数字(或迭代)。换句话说,智能体被安装(或训练)了几次
如以下代码所示:
#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()
根据图表和代码,让我感到奇怪的是,agent 被安装了几次,彼此独立,但训练精度随着时间的推移而增加。似乎以前的经验正在帮助代理提高训练准确性。但是,如果环境被重置并且代理只是再次安装,那怎么可能呢?是否有任何来自先前拟合的错误反向传播帮助代理提高其在下一个拟合中的准确性?
reset的是环境,不是agent。所以代理实际上从每次迭代中积累经验。
正在重置环境,但不是代理。
可学习参数属于智能体,不属于环境。因此,agent 的参数在所有 episode 中都在变化,即每次拟合数据时,agent 都在学习。
如果你拟合的所有时间的数据都是相同的,那么它只会让我们的智能体在数据分布上过度拟合
我正在使用深度强化学习方法来预测时间序列行为。我在这方面是个新手,所以我的问题比计算机编程问题更具概念性。我的同事给了我下面的图表,使用深度强化学习训练、验证和测试时间序列数据分类的准确性。
从这张图中可以看出,验证和测试的准确度都是随机的,因此,当然,代理是过度拟合的。
但更让我惊讶的是(可能是知识匮乏,所以才来问你),我的同事是如何训练他的agent的。在此图表的 X 轴中,您可以找到 "epoch" 数字(或迭代)。换句话说,智能体被安装(或训练)了几次 如以下代码所示:
#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()
根据图表和代码,让我感到奇怪的是,agent 被安装了几次,彼此独立,但训练精度随着时间的推移而增加。似乎以前的经验正在帮助代理提高训练准确性。但是,如果环境被重置并且代理只是再次安装,那怎么可能呢?是否有任何来自先前拟合的错误反向传播帮助代理提高其在下一个拟合中的准确性?
reset的是环境,不是agent。所以代理实际上从每次迭代中积累经验。
正在重置环境,但不是代理。
可学习参数属于智能体,不属于环境。因此,agent 的参数在所有 episode 中都在变化,即每次拟合数据时,agent 都在学习。
如果你拟合的所有时间的数据都是相同的,那么它只会让我们的智能体在数据分布上过度拟合