From 1b6de16b4fc62d1a701a1c5357b705dc4f0bd9bd Mon Sep 17 00:00:00 2001 From: Shangtong Zhang Date: Sun, 15 Oct 2017 10:05:33 -0600 Subject: [PATCH] Fix a critical bug in DDPG --- README.md | 5 +- agent/DDPG_agent.py | 8 +- component/task.py | 38 ++++ images/DDPG-Pendulum-v0.png | Bin 46394 -> 41301 bytes main.py | 271 ++++++--------------------- network/continuous_action_network.py | 2 +- 6 files changed, 103 insertions(+), 221 deletions(-) diff --git a/README.md b/README.md index 71876df..8d4cfa3 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Implemented algorithms: * Distributed Proximal Policy Optimization (DPPO) # Curves -> Curves for CartPole are trivial so I didn't place it here. +> Curves for CartPole are trivial so I didn't place it here. There isn't any fixed random seed. ## DQN, Double DQN, Dueling DQN ![Loading...](https://raw.githubusercontent.com/ShangtongZhang/DeepRL/master/images/DQN-breakout.png) ![Loading...](https://raw.githubusercontent.com/ShangtongZhang/DeepRL/master/images/DQN-Pong.png) @@ -51,7 +51,8 @@ variance unbounded, which is also included in the implementation. ![Loading...](https://raw.githubusercontent.com/ShangtongZhang/DeepRL/master/images/DDPG-Pendulum-v0.png) -Current DDPG implementation seems to have potential bugs, I'm now actively working on it. +Extra caution is necessary when computing gradients, the [repo](https://github.com/ghliu/pytorch-ddpg) I referred +seems to have critical bugs. Anyway DDPG is fairly unstable. ## DPPO diff --git a/agent/DDPG_agent.py b/agent/DDPG_agent.py index 1c5619b..8b86e4c 100644 --- a/agent/DDPG_agent.py +++ b/agent/DDPG_agent.py @@ -89,11 +89,13 @@ class DDPGAgent: critic_loss.backward() self.critic_opt.step() - actor_loss = -critic.predict(states, actor.predict(states, False)) - actor_loss = actor_loss.mean() + actions = actor.predict(states, False) + var_actions = Variable(actions.data, requires_grad=True) + q = critic.predict(states, var_actions) + q.backward(torch.ones(q.size())) actor.zero_grad() - actor_loss.backward() + actions.backward(-var_actions.grad.data) self.actor_opt.step() self.soft_update(self.target_network, self.learning_network) diff --git a/component/task.py b/component/task.py index a6eb803..6d46885 100644 --- a/component/task.py +++ b/component/task.py @@ -76,9 +76,28 @@ class PixelAtari(BasicTask): def normalize_state(self, state): return np.asarray(state, dtype=np.float32) / 255.0 +class ContinuousMountainCar(BasicTask): + name = 'MountainCarContinuous-v0' + success_threshold = 90 + default_max_episode = 999 + + def __init__(self): + BasicTask.__init__(self) + self.env = gym.make(self.name) + self.env._max_episode_steps = sys.maxsize + self.action_dim = self.env.action_space.shape[0] + self.state_dim = self.env.observation_space.shape[0] + + def step(self, action): + action = np.clip(action, -1, 1) + next_state, reward, done, info = self.env.step(action) + return next_state, reward, done, info + + class Pendulum(BasicTask): name = 'Pendulum-v0' success_threshold = -10 + default_max_episode = 200 def __init__(self): BasicTask.__init__(self) @@ -95,6 +114,24 @@ class Pendulum(BasicTask): class BipedalWalker(BasicTask): name = 'BipedalWalker-v2' success_threshold = 300 + default_max_episode = 999 + + def __init__(self): + BasicTask.__init__(self) + self.env = gym.make(self.name) + self.env._max_episode_steps = sys.maxsize + self.action_dim = self.env.action_space.shape[0] + self.state_dim = self.env.observation_space.shape[0] + + def step(self, action): + action = np.clip(action, -1, 1) + next_state, reward, done, info = self.env.step(action) + return next_state, reward, done, info + +class BipedalWalkerHardcore(BasicTask): + name = 'BipedalWalkerHardcore-v2' + success_threshold = 300 + default_max_episode = 2000 def __init__(self): BasicTask.__init__(self) @@ -111,6 +148,7 @@ class BipedalWalker(BasicTask): class ContinuousLunarLander(BasicTask): name = 'LunarLanderContinuous-v2' success_threshold = 300 + default_max_episode = 1000 def __init__(self): BasicTask.__init__(self) diff --git a/images/DDPG-Pendulum-v0.png b/images/DDPG-Pendulum-v0.png index 4da5d1bd68de89f4d4c1c385c53632b5820e550f..09b9296fc197fd61efc239ce027069c6eb081765 100644 GIT binary patch literal 41301 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 WY-*+wl?(V9jHmk{w=Y}+GyV_qRrVAB literal 46394 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 diff --git a/main.py b/main.py index 3f84aad..0b94f47 100644 --- a/main.py +++ b/main.py @@ -62,75 +62,6 @@ def a3c_cart_pole(): agent = AsyncAgent(config) agent.run() -def a3c_pendulum(): - config = Config() - config.task_fn = lambda: Pendulum() - task = config.task_fn() - config.actor_optimizer_fn = lambda params: torch.optim.Adam(params, 0.0001) - config.critic_optimizer_fn = lambda params: torch.optim.Adam(params, 0.001) - config.network_fn = lambda: DisjointActorCriticNet( - lambda: GaussianActorNet(task.state_dim, task.action_dim), - lambda: GaussianCriticNet(task.state_dim)) - config.policy_fn = lambda: GaussianPolicy() - config.worker = ContinuousAdvantageActorCritic - config.discount = 0.99 - config.max_episode_length = 200 - config.num_workers = 8 - config.update_interval = 5 - config.test_interval = 1 - config.test_repetitions = 5 - config.entropy_weight = 0 - config.gradient_clip = 40 - config.logger = Logger('./log', gym.logger) - agent = AsyncAgent(config) - agent.run() - -def a3c_lunar_lander(): - config = Config() - config.task_fn = lambda: ContinuousLunarLander() - task = config.task_fn() - config.actor_optimizer_fn = lambda params: torch.optim.Adam(params, 0.0001) - config.critic_optimizer_fn = lambda params: torch.optim.Adam(params, 0.001) - config.network_fn = lambda: DisjointActorCriticNet( - lambda: GaussianActorNet(task.state_dim, task.action_dim), - lambda: GaussianCriticNet(task.state_dim)) - config.policy_fn = lambda: GaussianPolicy() - config.worker = ContinuousAdvantageActorCritic - config.discount = 0.99 - config.max_episode_length = 1000 - config.num_workers = 8 - config.update_interval = 5 - config.test_interval = 1 - config.test_repetitions = 5 - config.entropy_weight = 0 - config.gradient_clip = 40 - config.logger = Logger('./log', gym.logger) - agent = AsyncAgent(config) - agent.run() - -def a3c_walker(): - config = Config() - config.task_fn = lambda: BipedalWalker() - task = config.task_fn() - config.actor_optimizer_fn = lambda params: torch.optim.Adam(params, 0.0001) - config.critic_optimizer_fn = lambda params: torch.optim.Adam(params, 0.001) - config.network_fn = lambda: DisjointActorCriticNet( - lambda: GaussianActorNet(task.state_dim, task.action_dim), - lambda: GaussianCriticNet(task.state_dim)) - config.policy_fn = lambda: GaussianPolicy() - config.worker = ContinuousAdvantageActorCritic - config.discount = 0.99 - config.max_episode_length = 999 - config.num_workers = 8 - config.update_interval = 20 - config.test_interval = 1 - config.test_repetitions = 5 - config.entropy_weight = 0 - config.gradient_clip = 40 - config.logger = Logger('./log', gym.logger) - agent = AsyncAgent(config) - agent.run() - def dqn_pixel_atari(name): config = Config() config.history_length = 4 @@ -197,88 +128,6 @@ def a3c_pixel_atari(name): agent = AsyncAgent(config) agent.run() -def ddpg_pendulum(): - task_fn = lambda: Pendulum() - task = task_fn() - config = Config() - config.task_fn = task_fn - config.actor_network_fn = lambda: DeterministicActorNet( - task.state_dim, task.action_dim, F.tanh, 2, non_linear=F.relu, batch_norm=False) - config.critic_network_fn = lambda: DeterministicCriticNet( - task.state_dim, task.action_dim, non_linear=F.relu, batch_norm=False) - config.network_fn = lambda: DisjointActorCriticNet(config.actor_network_fn, config.critic_network_fn) - config.actor_optimizer_fn = lambda params: torch.optim.Adam(params, lr=1e-4) - config.critic_optimizer_fn =\ - lambda params: torch.optim.Adam(params, lr=1e-3, weight_decay=0.01) - config.replay_fn = lambda: HighDimActionReplay(memory_size=1000000, batch_size=64) - config.discount = 0.99 - config.max_episode_length = 200 - config.target_network_mix = 0.001 - config.exploration_steps = 100 - config.noise_decay_interval = 10000 - config.random_process_fn = \ - lambda: OrnsteinUhlenbeckProcess(size=task.action_dim, theta=0.15, sigma=0.2) - config.test_interval = 0 - config.test_repetitions = 10 - config.save_interval = 50 - config.logger = Logger('./log', gym.logger) - run_episodes(DDPGAgent(config)) - -def ddpg_lunar_lander(): - task_fn = lambda: ContinuousLunarLander() - task = task_fn() - config = Config() - config.task_fn = task_fn - config.actor_network_fn = lambda: DeterministicActorNet( - task.state_dim, task.action_dim, F.tanh, 1, batch_norm=True) - config.critic_network_fn = lambda: DeterministicCriticNet( - task.state_dim, task.action_dim, batch_norm=True) - config.network_fn = lambda: DisjointActorCriticNet(config.actor_network_fn, config.critic_network_fn) - config.actor_optimizer_fn = lambda params: torch.optim.Adam(params, lr=1e-4) - config.critic_optimizer_fn =\ - lambda params: torch.optim.Adam(params, lr=1e-3, weight_decay=0.01) - config.replay_fn = lambda: HighDimActionReplay(memory_size=1000000, batch_size=64) - config.discount = 0.99 - config.max_episode_length = 1000 - config.target_network_mix = 0.001 - config.exploration_steps = 100 - config.noise_decay_interval = 10000 - config.random_process_fn = \ - lambda: OrnsteinUhlenbeckProcess(size=task.action_dim, theta=0.15, sigma=0.2) - config.test_interval = 0 - config.test_repetitions = 10 - config.save_interval = 50 - config.logger = Logger('./log', gym.logger) - run_episodes(DDPGAgent(config)) - -def ddpg_walker(): - task_fn = lambda: BipedalWalker() - task = task_fn() - config = Config() - config.task_fn = task_fn - config.actor_network_fn = lambda: DeterministicActorNet( - task.state_dim, task.action_dim, F.tanh, 1, gpu=True, batch_norm=False, non_linear=F.tanh) - config.critic_network_fn = lambda: DeterministicCriticNet( - task.state_dim, task.action_dim, gpu=True, batch_norm=False, non_linear=F.tanh) - config.network_fn = lambda: DisjointActorCriticNet(config.actor_network_fn, config.critic_network_fn) - config.actor_optimizer_fn = lambda params: torch.optim.Adam(params, lr=1e-4) - config.critic_optimizer_fn =\ - lambda params: torch.optim.Adam(params, lr=1e-3, weight_decay=0.01) - config.replay_fn = lambda: HighDimActionReplay(memory_size=1000000, batch_size=64) - config.discount = 0.99 - config.min_epsilon = 0.1 - config.max_episode_length = 999 - config.target_network_mix = 0.001 - config.exploration_steps = 10000 - config.noise_decay_interval = 1000000 - config.random_process_fn = \ - lambda: OrnsteinUhlenbeckProcess(size=task.action_dim, theta=0.15, sigma=0.2) - config.test_interval = 0 - config.test_repetitions = 5 - config.save_interval = 50 - config.logger = Logger('./log', gym.logger) - run_episodes(DDPGAgent(config)) - def dqn_fruit(): config = Config() config.task_fn = lambda: Fruit() @@ -350,11 +199,38 @@ def hrmsdqn_fruit(): config.episode_limit = 5000 run_episodes(MSDQNAgent(config)) -def ppo_pendulum(): +def a3c_continuous(): config = Config() - config.task_fn = lambda: Pendulum() + # config.task_fn = lambda: Pendulum() + config.task_fn = lambda: BipedalWalkerHardcore() task = config.task_fn() - config.actor_network_fn = lambda: GaussianActorNet(task.state_dim, task.action_dim, gpu=False) + config.actor_optimizer_fn = lambda params: torch.optim.Adam(params, 0.0001) + config.critic_optimizer_fn = lambda params: torch.optim.Adam(params, 0.001) + config.network_fn = lambda: DisjointActorCriticNet( + # lambda: GaussianActorNet(task.state_dim, task.action_dim, unit_std=False, action_gate=F.tanh, action_scale=2.0), + lambda: GaussianActorNet(task.state_dim, task.action_dim, unit_std=True), + lambda: GaussianCriticNet(task.state_dim)) + config.policy_fn = lambda: GaussianPolicy() + config.worker = ContinuousAdvantageActorCritic + config.discount = 0.99 + config.max_episode_length = task.default_max_episode + config.num_workers = 8 + config.update_interval = 20 + config.test_interval = 1 + config.test_repetitions = 1 + config.entropy_weight = 0 + config.gradient_clip = 40 + config.logger = Logger('./log', gym.logger) + agent = AsyncAgent(config) + agent.run() + +def dppo_continuous(): + config = Config() + # config.task_fn = lambda: Pendulum() + config.task_fn = lambda: BipedalWalkerHardcore() + task = config.task_fn() + config.actor_network_fn = lambda: GaussianActorNet(task.state_dim, task.action_dim, + gpu=False, unit_std=True) config.critic_network_fn = lambda: GaussianCriticNet(task.state_dim, gpu=False) config.network_fn = lambda: DisjointActorCriticNet(config.actor_network_fn, config.critic_network_fn) config.actor_optimizer_fn = lambda params: torch.optim.Adam(params, 0.001) @@ -368,7 +244,7 @@ def ppo_pendulum(): config.num_workers = 8 config.test_interval = 1 config.test_repetitions = 1 - config.max_episode_length = 200 + config.max_episode_length = task.default_max_episode config.entropy_weight = 0 config.gradient_clip = 40 config.rollout_length = 10000 @@ -378,61 +254,32 @@ def ppo_pendulum(): agent = AsyncAgent(config) agent.run() -def ppo_lunar_lander(): +def ddpg_continuous(): + task_fn = lambda: Pendulum() + task = task_fn() config = Config() - config.task_fn = lambda: ContinuousLunarLander() - task = config.task_fn() - config.actor_network_fn = lambda: GaussianActorNet(task.state_dim, task.action_dim, gpu=False) - config.critic_network_fn = lambda: GaussianCriticNet(task.state_dim, gpu=False) + config.task_fn = task_fn + config.actor_network_fn = lambda: DeterministicActorNet( + task.state_dim, task.action_dim, F.tanh, 2, non_linear=F.relu, batch_norm=False) + config.critic_network_fn = lambda: DeterministicCriticNet( + task.state_dim, task.action_dim, non_linear=F.relu, batch_norm=False) config.network_fn = lambda: DisjointActorCriticNet(config.actor_network_fn, config.critic_network_fn) - config.actor_optimizer_fn = lambda params: torch.optim.Adam(params, 0.001) - config.critic_optimizer_fn = lambda params: torch.optim.Adam(params, 0.001) - - config.policy_fn = lambda: GaussianPolicy() - config.replay_fn = lambda: GeneralReplay(memory_size=2048, batch_size=2048) - config.worker = ProximalPolicyOptimization + config.actor_optimizer_fn = lambda params: torch.optim.Adam(params, lr=1e-4) + config.critic_optimizer_fn =\ + lambda params: torch.optim.Adam(params, lr=1e-3, weight_decay=0.01) + config.replay_fn = lambda: HighDimActionReplay(memory_size=1000000, batch_size=64) config.discount = 0.99 - config.gae_tau = 0.97 - config.num_workers = 8 - config.test_interval = 1 - config.test_repetitions = 1 - config.max_episode_length = 1000 - config.entropy_weight = 0 - config.gradient_clip = 40 - config.rollout_length = 10000 - config.optimize_epochs = 1 - config.ppo_ratio_clip = 0.2 + config.max_episode_length = task.default_max_episode + config.target_network_mix = 0.001 + config.exploration_steps = 100 + config.noise_decay_interval = 10000 + config.random_process_fn = \ + lambda: OrnsteinUhlenbeckProcess(size=task.action_dim, theta=0.15, sigma=0.2) + config.test_interval = 0 + config.test_repetitions = 10 + config.save_interval = 50 config.logger = Logger('./log', gym.logger) - agent = AsyncAgent(config) - agent.run() - -def ppo_walker(): - config = Config() - config.task_fn = lambda: BipedalWalker() - task = config.task_fn() - config.actor_network_fn = lambda: GaussianActorNet(task.state_dim, task.action_dim, gpu=False) - config.critic_network_fn = lambda: GaussianCriticNet(task.state_dim, gpu=False) - config.network_fn = lambda: DisjointActorCriticNet(config.actor_network_fn, config.critic_network_fn) - config.actor_optimizer_fn = lambda params: torch.optim.Adam(params, 0.001) - config.critic_optimizer_fn = lambda params: torch.optim.Adam(params, 0.001) - - config.policy_fn = lambda: GaussianPolicy() - config.replay_fn = lambda: GeneralReplay(memory_size=2048, batch_size=2048) - config.worker = ProximalPolicyOptimization - config.discount = 0.99 - config.gae_tau = 0.97 - config.num_workers = 8 - config.test_interval = 1 - config.test_repetitions = 1 - config.max_episode_length = 999 - config.entropy_weight = 0 - config.gradient_clip = 40 - config.rollout_length = 10000 - config.optimize_epochs = 1 - config.ppo_ratio_clip = 0.2 - config.logger = Logger('./log', gym.logger) - agent = AsyncAgent(config) - agent.run() + run_episodes(DDPGAgent(config)) if __name__ == '__main__': # gym.logger.setLevel(logging.DEBUG) @@ -441,15 +288,9 @@ if __name__ == '__main__': # dqn_cart_pole() # async_cart_pole() # a3c_cart_pole() - # a3c_pendulum() - # a3c_lunar_lander() - # a3c_walker() - # ddpg_pendulum() - # ddpg_lunar_lander() - # ddpg_walker() - # ppo_pendulum() - # ppo_lunar_lander() - ppo_walker() + # a3c_continuous() + # dppo_continuous() + ddpg_continuous() # dqn_fruit() # hrdqn_fruit() diff --git a/network/continuous_action_network.py b/network/continuous_action_network.py index ff53b77..83ad11a 100644 --- a/network/continuous_action_network.py +++ b/network/continuous_action_network.py @@ -145,7 +145,7 @@ class GaussianActorNet(nn.Module, BasicNet): log_std = self.action_log_std.expand_as(mean) std = log_std.exp() else: - std = F.softplus(self.fc_std(x) + 1e-5) + std = F.softplus(self.action_std(phi) + 1e-5) log_std = std.log() return mean, std, log_std