在深度强化学习领域,算法的选择对于学习效果至关重要。本文将重点介绍一种名为Soft Actor-Critic (SAC) 的算法,并探讨其在复杂环境中的表现。SAC算法是一种离策略优化算法,与传统的在线策略优化算法如Proximal Policy Optimisation (PPO) 不同,SAC能够利用存储的经验缓冲区进行学习,从而优化随机策略。
SAC算法的一个关键特性是熵正则化。熵正则化的目标是在策略中引入一定的随机性,以增加探索的广度。这种策略不仅追求最大化预期回报,还试图在执行任务时尽可能地随机化行为。这种平衡探索与利用的方法,特别适用于那些复杂且难以预测的环境。
在本系列文章中,将专注于使用SAC算法进行实验。尽管SAC算法表现出了良好的学习能力,但也有可能其他算法,如PPO,可能会有更好的表现。如果有足够的时间和资源,可以尝试不同的算法,并与SAC算法的性能进行比较。
以下是使用SAC算法学习Humanoid环境的代码示例。具体的学习参数基于GitHub上的一个开源项目。
import pyvirtualdisplay
_display = pyvirtualdisplay.Display(visible=False, size=(1400, 900))
_ = _display.start()
import gym
import ray
from ray import tune
from ray.rllib.agents.sac import SACTrainer
from ray.tune.registry import register_env
ray.shutdown()
ray.init(include_webui=False, ignore_reinit_error=True)
ENV = 'HumanoidBulletEnv-v0'
def make_env(env_config):
import pybullet_envs
env = gym.make(ENV)
return env
register_env(ENV, make_env)
TARGET_REWARD = 6000
TRAINER = SACTrainer
tune.run(
TRAINER,
stop={
"episode_reward_mean": TARGET_REWARD},
config={
"env": ENV,
"num_workers": 11,
"num_gpus": 1,
"monitor": True,
"evaluation_num_episodes": 50,
"optimization": {
"actor_learning_rate": 1e-3,
"critic_learning_rate": 1e-3,
"entropy_learning_rate": 3e-4,
},
"train_batch_size": 128,
"target_network_update_freq": 1,
"learning_starts": 1000,
"buffer_size": 1_000_000,
"observation_filter": "MeanStdFilter",
}
)
在上述代码中,定义了多个学习参数,包括策略学习率、价值函数学习率、熵学习率、训练批次大小、目标网络更新频率、学习开始步数、经验缓冲区大小以及观测值过滤器等。
训练进度图显示了在12个CPU核心上运行46小时的训练过程。可能会发现自己可以通过将目标结果设置为1200,在不到一半的时间内获得同样好的结果。