OpenAI发布新强化学习算法:近端策略优化
允中 编译自 blog.openai.com 量子位 出品 | 公众号 QbitAI
OpenAI今天发布一类新的强化学习算法:近端策略优化(Proximal Policy Optimization,PPO)。因为易于使用和表现良好,PPO已经成为OpenAI默认的强化学习算法。
PPO让我们在根据挑战性的环境中训练AI策略,例如上面所示的Roboschool训练场中,智能体(agent)的任务是追逐粉红色的球体,并在期间学习走路、跑步、转向以及被击倒时如何站起来。
代码在此:
https://github.com/openai/baselines
Paper在此:
https://openai-public.s3-us-west-2.amazonaws.com/blog/2017-07/ppo/ppo-arxiv.pdf
最近在使用深度神经网络控制视频游戏等领域取得的突破中,策略梯度方法扮演了基础的角色。但策略梯度方法想要获得良好的结果非常困难,因为它对步长的选择比较敏感——太小。而且过程慢得让人绝望。样本效率通常也不好。
通过监督学习,我们可以轻松实现成本函数,运行梯度下降,而且很有信心能通过相对较小的超参数调优获得出色的结果。强化算法的成功路径并不明显,算法里有很多难以调试的部分。PPO则在样本复杂性和易于调优之间取得平衡,试图在每一步最小化成本函数计算更新时,确保与先前策略的偏差相对较小。
我们详细说明了使用自适应KL惩罚来控制每次迭代策略变化的PPO变体。新的变体使用其他算法中通常没有的新目标函数:
该目标实现了一种与随机梯度下降兼容的信赖域修正方法,并通过消除KL损失来简化算法,以及减小适应性修正的需求。在测试中,这一算法在连续控制任务上显示出最佳性能,几乎与ACER在Atari上的性能相匹配,而且实现起来更为简单。
OpenAI还使用PPO来教导复杂的模拟机器人。
例如波士顿动力的Atlas。这个模型具有30个不同的关节,普通的双足机器人只有17个左右。研究人员利用PPO训练模拟机器人,在越过障碍物时表现出跑酷的感觉。(不过在这个演示视频中,没有感觉出来……)
基线:PPO和TRPO
这一次放出的基线版本包括PPO和TRPO的可扩展并行实现,它们都是用MPI进行数据传递。两者都是用Python3和TensorFlow。
OpenAI基线是一套强化学习算法的高质量实现。地址在:https://github.com/openai/baselines
可以直接输入下面这个命令安装:
pip install baselines
- Golang语言社区--Go语言基础第三节常量
- 干货 | 进化策略入门:最优化问题的另一种视角
- 【Golang语言社区】Golang语言面试题
- PHP面向对象核心(一)——序列化与魔术方法
- PHP面向对象核心(二)——继承、多态、接口
- PHP面向对象核心(三)——反射、异常处理
- 理解jquery的$.extend & $.fn.extend用法
- PHP数据结构(一)——顺序结构线性表
- PHP数据结构(二)——链式结构线性表
- 微信小程序防止重复点击,该如何处理?
- CSS常用实例,web前端开发者不知道这些就太low了
- PHP数据结构(三)——运用栈实现括号匹配
- python抓取头条文章
- PHP数据结构(四) ——队列
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JavaScript 错误处理大全【建议收藏】
- Java8 用 Stream 快速实现List转Map 、分组、过滤等操作
- swoole框架异常处理
- 使用composer本地开发项目
- GDAL数据集写入空间坐标参考
- html & CSS & JavaScript的学习
- 打卡群刷题总结0824——电话号码的字母组合
- 打卡群刷题总结0825——括号生成
- Ajax与Json的学习
- pytest文档48-切换环境(pytest-base-url)
- 打卡群刷题总结0826——组合总和
- 排序之简单排序
- 打卡群刷题总结0827——组合总和 II
- 快速学习-Gateway--服务网关
- 用Python写一个身份证号码校验系统