Точность обучения глубокого обучения - PullRequest
1 голос
/ 04 июня 2019

Я использую метод глубокого обучения для прогнозирования поведения временных рядов.Я новичок в этом, поэтому мой вопрос более концептуален, чем вопрос компьютерного программирования.Мой коллега дал мне следующую таблицу с точностью обучения, проверки и тестирования классификации данных временных рядов с использованием обучения с глубоким подкреплением.

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 ]

2 голосов
/ 04 июня 2019

Что сбрасывается, так это среда, а не агент.Таким образом, агент накапливает опыт на каждой итерации.

1 голос
/ 24 июня 2019

Среда сбрасывается, но не агент.

Изучаемые параметры принадлежат агенту, а не среде. Таким образом, параметры агента меняются во всех эпизодах, т. Е. Агент учится каждый раз, когда вы подбираете данные.

Если данные одинаковы для всех ваших подходов, это только заставляет нашего агента перегружать распределение данных

...