Я пытался внедрить Proximal Policy Optimization с помощью награды за внутреннее любопытство для полной нейронной сети LSTM.
Потери как в PPO, так и в ICM расходятся, и я хотел бы выяснить, является ли ее ошибка в коде или неправильно выбраннойгиперпараметры.
Код (где может быть неправильная реализация):
- В модели ICM я также использую первый уровень LSTM для соответствия входным измерениям.
- В целом ICMнабор данных распространяется сразу, с нулями в качестве начального скрытого (результирующие тензоры отличаются, чем они были бы, если бы я распространял только 1 состояние или пакет и повторно использовал скрытые ячейки)
- В обработке преимуществ PPO и вознаграждения скидкинабор данных распространяется одна за другой, и скрытые ячейки используются повторно (в точности наоборот, чем в ICM, потому что здесь он использует ту же модель для выбора действий, а этот подход «в реальном времени»)
- В модели обучения PPOобучается партиями с повторным использованием скрытых ячеек
Я использовал https://github.com/adik993/ppo-pytorch как код по умолчаниюи переработал его для работы в моей среде и использования LSTM
. Я могу предоставить образцы кода позже, если это будет запрошено специально из-за большого количества строк
Гиперпараметры:
def __init_curiosity(self):
curiosity_factory=ICM.factory(MlpICMModel.factory(), policy_weight=1,
reward_scale=0.1, weight=0.2,
intrinsic_reward_integration=0.01,
reporter=self.reporter)
self.curiosity = curiosity_factory.create(self.state_converter,
self.action_converter)
self.curiosity.to(self.device, torch.float32)
self.reward_normalizer = StandardNormalizer()
def __init_PPO_trainer(self):
self.PPO_trainer = PPO(agent = self,
reward = GeneralizedRewardEstimation(gamma=0.99, lam=0.95),
advantage = GeneralizedAdvantageEstimation(gamma=0.99, lam=0.95),
learning_rate = 1e-3,
clip_range = 0.3,
v_clip_range = 0.3,
c_entropy = 1e-2,
c_value = 0.5,
n_mini_batches = 32,
n_optimization_epochs = 10,
clip_grad_norm = 0.5)
self.PPO_trainer.to(self.device, torch.float32)
Графики тренировок:
(обратите внимание на большие числа по оси Y)
ОБНОВЛЕНИЕ
На данный момент я переработал обработку LSTM для использования пакетов и скрытой памятина всех местах (как для основной модели, так и для ICM), но проблема все еще присутствует.Я проследил это до выхода из модели ICM, здесь выходные данные расходятся в основном в action_hat
тензор.