softlearning
Softlearning 是一个专为连续控制领域设计的深度强化学习框架,核心目标是训练基于“最大熵”策略的智能体。它包含了著名的软演员 - 评论家(SAC)算法的官方实现,有效解决了传统强化学习在复杂连续动作空间中探索效率低、策略稳定性差的难题,帮助智能体在不确定性环境中做出更鲁棒的决策。
该工具主要面向强化学习研究人员和 AI 开发者,特别适合需要复现前沿算法或进行大规模实验的用户。Softlearning 的技术亮点在于其高效的工程架构:底层基于 TensorFlow 和 tf.keras 构建模型,同时深度集成 Ray 生态系统。通过利用 Ray Tune 和 Autoscaler,用户可以将本地原型代码无缝迁移至云端(如 AWS 或 GCP),实现实验的智能并行化与分布式训练,极大提升了资源利用率和研发效率。虽然配置环境需要一定的技术基础(如安装 MuJoCo 物理引擎),但其清晰的模块化设计为算法研究与验证提供了坚实可靠的基础设施。
使用场景
某机器人实验室的研究团队正在训练一只四足机器人在复杂地形上实现稳定且灵活的奔跑,需要智能体在连续动作空间中探索多样化的运动策略。
没有 softlearning 时
- 算法复现成本高:团队需从零编写最大熵强化学习(如 SAC)的核心代码,极易出现数学公式实现偏差,导致策略收敛困难。
- 实验扩展性差:本地单机训练速度缓慢,缺乏类似 Ray 的原生集成,难以将实验无缝迁移到 AWS 或 GCP 等云端进行大规模并行训练。
- 策略探索不足:传统确定性策略容易陷入局部最优,生成的步态单一僵硬,无法应对突发的地面打滑或不平整干扰。
- 环境配置繁琐:MuJoCo 物理引擎与深度学习框架的依赖关系复杂,手动配置 Docker 或 Conda 环境常因路径问题导致运行失败。
使用 softlearning 后
- 开箱即用官方实现:直接调用内置的 SAC 算法模块,基于 tf.keras 构建策略网络,确保理论实现的准确性,大幅缩短研发周期。
- 弹性分布式训练:利用集成的 Ray Tune 和 Autoscaler,同一套脚本即可在本地原型验证后,自动扩展至云端集群,显著加速迭代过程。
- 鲁棒性显著提升:最大熵策略鼓励智能体在保持高性能的同时最大化行为熵,使机器人学会了更多样化的备用步态,抗干扰能力增强。
- 标准化部署流程:通过提供的 Docker Compose 配置文件,一键解决 MuJoCo 许可证及依赖路径问题,团队成员可快速复用统一的开发环境。
softlearning 通过提供工业级的分布式架构与标准的最大熵算法实现,让研究团队能从繁琐的工程基建中解脱,专注于提升机器人控制策略的鲁棒性与适应性。
运行环境要求
- Linux
- macOS
未说明(支持通过 Ray 分配 GPU 资源,具体取决于实验规模)
未说明

快速开始
软学习
软学习是一个用于在连续域中训练最大熵策略的深度强化学习工具箱。该实现较为精简,主要为我们自身的开发目的而优化。它使用 tf.keras 模块来实现大多数模型类(例如策略和价值函数)。我们使用 Ray 进行实验编排。Ray Tune 和 Autoscaler 实现了多项便捷功能,使我们能够无缝地将本地原型设计时使用的实验脚本部署到任何选定的云服务(如 GCP 或 AWS)上,以运行大规模实验,并智能地并行化和分布式训练,从而实现高效的资源分配。
此实现使用 TensorFlow。若需 PyTorch 版本的软演员-评论家算法,请参阅 rlkit。
入门指南
前置条件
该环境既可以在本地通过 Conda 运行,也可以在 Docker 容器内运行。对于 Conda 安装,您需要先安装 Conda。对于 Docker 安装,您需要安装 Docker 和 Docker Compose。此外,目前我们的大多数环境都需要 MuJoCo 许可证。
Conda 安装
从 MuJoCo 官网 下载 并安装 MuJoCo 1.50 和 2.00。我们假设 MuJoCo 文件已解压到默认位置(
~/.mujoco/mjpro150和~/.mujoco/mujoco200_{platform})。遗憾的是,gym和dm_control对 MuJoCo 2.00 的安装路径要求不同,因此您需要同时将其安装在~/.mujoco/mujoco200_{platform}和~/.mujoco/mujoco200目录下。最简单的方法是创建一个符号链接:ln -s ~/.mujoco/mujoco200_{plaftorm} ~/.mujoco/mujoco200。将您的 MuJoCo 许可证密钥文件(mjkey.txt)复制到
~/.mujoco/mjkey.txt:克隆
softlearning:
git clone https://github.com/rail-berkeley/softlearning.git ${SOFTLEARNING_PATH}
- 创建并激活 Conda 环境,安装 softlearning 以启用命令行界面。
cd ${SOFTLEARNING_PATH}
conda env create -f environment.yml
conda activate softlearning
pip install -e ${SOFTLEARNING_PATH}
至此,环境应已准备就绪。请参阅“示例”部分,了解如何训练和模拟智能体的示例。
最后,要停用并移除 Conda 环境:
conda deactivate
conda remove --name softlearning --all
Docker 安装
docker-compose
构建镜像并运行容器:
export MJKEY="$(cat ~/.mujoco/mjkey.txt)" \
&& docker-compose \
-f ./docker/docker-compose.dev.cpu.yml \
up \
-d \
--force-recreate
您可以使用标准的 Docker exec 命令进入容器,例如:
docker exec -it softlearning bash
请参阅“示例”部分,了解如何训练和模拟智能体的示例。
最后,清理 Docker 设置:
docker-compose \
-f ./docker/docker-compose.dev.cpu.yml \
down \
--rmi all \
--volumes
示例
训练与模拟智能体
- 训练智能体:
softlearning run_example_local examples.development \
--algorithm SAC \
--universe gym \
--domain HalfCheetah \
--task v3 \
--exp-name my-sac-experiment-1 \
--checkpoint-frequency 1000 # 每1000步保存一次检查点,以便后续恢复训练
- 模拟得到的策略:
首先,找到检查点保存的绝对路径。默认情况下(即未指定
log-dir参数时),数据会保存在~/ray_results/<universe>/<domain>/<task>/<datatimestamp>-<exp-name>/<trial-id>/<checkpoint-id>目录下。例如:~/ray_results/gym/HalfCheetah/v3/2018-12-12T16-48-37-my-sac-experiment-1-0/mujoco-runner_0_seed=7585_2018-12-12_16-48-37xuadh9vd/checkpoint_1000/。接下来的命令假设该路径已通过环境变量${SAC_CHECKPOINT_DIR}获取。
python -m examples.development.simulate_policy \
${SAC_CHECKPOINT_DIR} \
--max-path-length 1000 \
--num-rollouts 1 \
--render-kwargs '{"mode": "human"}'
examples.development.main 包含多个不同的环境,并且 /examples 文件夹中还有更多示例脚本。如需了解更多关于智能体和配置的信息,可在运行脚本时添加 --help 标志:python ./examples/development/main.py --help。
可选参数:
-h, --help 显示帮助信息并退出
--universe {robosuite,dm_control,gym}
--domain DOMAIN
--task TASK
--checkpoint-replay-pool CHECKPOINT_REPLAY_POOL
是否将回放缓冲区一同保存为检查点。若设置,则优先于 variant['run_params']['checkpoint_replay_pool']。请注意,回放缓冲区是逐步保存(并构建)的,因此每条经验仅被保存一次。
--algorithm ALGORITHM
--policy {gaussian}
--exp-name EXP_NAME
--mode MODE
--run-eagerly RUN_EAGERLY
是否以 eager 模式运行 TensorFlow。
--local-dir LOCAL_DIR
用于保存训练结果的本地目标文件夹。
--confirm-remote [CONFIRM_REMOTE]
远程运行时是否提示确认。
--video-save-frequency VIDEO_SAVE_FREQUENCY
视频保存频率。
--cpus CPUS 分配给 Ray 进程的 CPU 数量。传递给 `ray.init`。
--gpus GPUS 分配给 Ray 进程的 GPU 数量。传递给 `ray.init`。
--resources RESOURCES
分配给 Ray 进程的资源。传递给 `ray.init`。
--include-webui INCLUDE_WEBUI
布尔标志,指示是否启动 Web UI(即 Jupyter Notebook)。传递给 `ray.init`。
--temp-dir TEMP_DIR 若提供,则指定 Ray 进程的根临时目录。传递给 `ray.init`。
--resources-per-trial RESOURCES_PER_TRIAL
每次试验分配的资源。传递给 `tune.run`。
--trial-cpus TRIAL_CPUS
每次试验分配的 CPU 数量。注意:这仅用于 Ray 的内部调度管理,而非实际的 CPU 硬性限制。传递给 `tune.run`。
--trial-gpus TRIAL_GPUS
每次试验分配的 GPU 数量。同样,这仅用于 Ray 的内部调度管理,而非实际的 GPU 硬性限制。传递给 `tune.run`。
--trial-extra-cpus TRIAL_EXTRA_CPUS
预留的额外 CPU,以备试验需要启动使用 CPU 的其他 Ray Actor 时使用。
--trial-extra-gpus TRIAL_EXTRA_GPUS
预留的额外 GPU,以备试验需要启动使用 GPU 的其他 Ray Actor 时使用。
--num-samples NUM_SAMPLES
每次试验重复执行的次数。传递给 `tune.run`。
--upload-dir UPLOAD_DIR
可选的 URI 地址,用于将训练结果同步到远程存储(例如 s3://<bucket> 或 gs://<bucket>)。传递给 `tune.run`。
--trial-name-template TRIAL_NAME_TEMPLATE
试验名称的可选模板字符串。例如:'{trial.trial_id}-seed={trial.config[run_params][seed]}'。传递给 `tune.run`。
--checkpoint-frequency CHECKPOINT_FREQUENCY
检查点之间的训练迭代次数。值为 0(默认)时表示禁用检查点保存。若设置,则优先于 variant['run_params']['checkpoint_frequency']。传递给 `tune.run`。
--checkpoint-at-end CHECKPOINT_AT_END
是否在实验结束时保存检查点。若设置,则优先于 variant['run_params']['checkpoint_at_end']。传递给 `tune.run`。
--max-failures MAX_FAILURES
尝试从上次检查点恢复试验的最大次数。仅在启用检查点保存时生效。传递给 `tune.run`。
--restore RESTORE 检查点路径。仅在运行单个试验时有意义。默认为 None。传递给 `tune.run`。
--server-port SERVER_PORT
用于启动 TuneServer 的端口号。传递给 `tune.run`。
从已保存的检查点恢复训练
此功能目前存在缺陷!
要从之前的检查点恢复训练,需运行原始示例主脚本,并添加 --restore 标志。例如,可以按如下方式恢复之前的示例:
softlearning run_example_local examples.development \
--algorithm SAC \
--universe gym \
--domain HalfCheetah \
--task v3 \
--exp-name my-sac-experiment-1 \
--checkpoint-frequency 1000 \
--restore ${SAC_CHECKPOINT_PATH}
参考文献
这些算法基于以下论文:
软演员-评论家算法及其应用。 图奥马斯·哈尔诺亚*、奥里克·周*、克里斯蒂安·哈蒂凯宁*、乔治·塔克尔、世勋·哈、杰·谭、维卡什·库马尔、亨利·朱、阿比谢克·古普塔、皮特·阿贝尔和谢尔盖·列文。 arXiv 预印本,2018年。 论文 | 视频
用于层次强化学习的潜在空间策略。 图奥马斯·哈尔诺亚*、克里斯蒂安·哈蒂凯宁*、皮特·阿贝尔和谢尔盖·列文。 国际机器学习会议(ICML),2018年。 论文 | 视频
软演员-评论家:带有随机演员的离策略最大熵深度强化学习。 图奥马斯·哈尔诺亚、奥里克·周、皮特·阿贝尔和谢尔盖·列文。 国际机器学习会议(ICML),2018年。 论文 | 视频
用于机器人操作的可组合深度强化学习。 图奥马斯·哈尔诺亚、维奇尔·庞格、奥里克·周、穆尔塔扎·达拉尔、皮特·阿贝尔、谢尔盖·列文。 国际机器人与自动化会议(ICRA),2018年。 论文 | 视频
基于深度能量函数策略的强化学习。 图奥马斯·哈尔诺亚*、唐浩然*、皮特·阿贝尔、谢尔盖·列文。 国际机器学习会议(ICML),2017年。 论文 | 视频
如果 Softlearning 对您的学术研究有所帮助,请您引用我们的论文。以下是一个 BibTeX 示例:
@techreport{haarnoja2018sacapps,
title={Soft Actor-Critic Algorithms and Applications},
author={Tuomas Haarnoja and Aurick Zhou and Kristian Hartikainen and George Tucker and Sehoon Ha and Jie Tan and Vikash Kumar and Henry Zhu and Abhishek Gupta and Pieter Abbeel and Sergey Levine},
journal={arXiv preprint arXiv:1812.05905},
year={2018}
}
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器