OpenAI 重磅发布深度强化学习资源

在项目主页中,OpenAI 提供了非常完整的使用教程,包括 Spinning Up 的详细介绍、各种环境下的安装方法、收录的算法,以及实验实现的教程等。除此之外,OpenAI 也提供了丰厚的学习资料,包括:强化学习的入门基础、结合 Spinning Up 学习 RL 的课程、论文推荐、实验练习和基准结果参考等。给人的第一印象就是,要想在深度强化学习上从 Zero 到 Hero,天天逛这个网站就够了。

DeepMind 开源强化学习库:松露

近日,DeepMind 开源了一个基于 TensorFlow 的强化学习库,名字叫 TRFL(译名:松露)。思路是模块化,强调灵活度:如果把造智能体想象成搭积木,许多关键的、常用的木块都在这里集合了:比如,DQN (深度 Q 网络) 、DDPG (深度确定策略梯度),以及 IMPALA (重要性加权演员学习者架构) ,都是 DeepMind 功勋卓著的组件。库里面的组件,虽然来源各不相同,但都经过严密测试,因而相对可靠;并且只要一个API,对开发者比较友好。即便是 DeepMind 团队自身做研究,也严重依赖这个库。

深度强化学习 (DRL) ,依赖价值网络或策略网络的不断更新。DeepMind 团队发现,比起传统的 RL 更新,损失函数更加模块化,更容易结合到监督/无监督的目标里去。松露里包含了许多损失函数和运算,全部在纯 TensorFlow 里实现。不是完整算法,但是各自经过严密测试,可以用来搭成完整的智能体。

此前,Google 开源了强化学习框架 Dopamine,中文叫多巴胺,也是基于 TensorFlow。名字取自人类大脑奖励机制中的主角物质多巴胺,为了表达神经科学和强化学习之间的缘分联系。多巴胺框架,也是强调灵活性、稳定性和复现性。

GitHub地址项目 GitHub 地址

神经网络架构搜索(NAS)综述

深度学习模型在很多任务上都取得了不错的效果,但调参对于深度模型来说是一项非常苦难的事情,众多的超参数和网络结构参数会产生爆炸性的组合,常规的 random search 和 grid search 效率非常低,因此最近几年神经网络的架构搜索和超参数优化成为一个研究热点。

机器之心的译文,从网络架构搜索的三个方面进行了分类综述,包括:

  • 搜索空间
  • 搜索策略
  • 评价预估

问题定义

网络架构和超参数优化的问题,有以下的特点:

  1. 评价函数未知,是一个黑箱优化问题,因为评价往往是在 unseed dataset 上进行评价;
  2. 非线性;
  3. 非凸;
  4. 混合优化,既有离散空间,又有连续空间;
  5. 一次优化结果的评价非常耗时,大型的深度学习模型参数数以亿计,运行一次结果需要几周时间;
  6. 在某些应用场景中,存在多个目标。比如:移动端的模型结构优化,既希望得到尽量高的准确率,又希望有非常好的模型计算效率。
Neural Architecture Search
Neural Architecture Search

搜索空间

搜索空间定义了优化问题的变量,网络结构和超参数的变量定义有所不同,不同的变量规模对于算法的难度来说也不尽相同。

早期很多工作都是用以遗传算法为代表的进化算法对神经网络的超参数和权重进行优化,因为当时的神经网络只有几层,每层十几个神经元,也不存在复杂的网络架构,参数很有限,可直接进行优化。而深度学习模型一方面有着复杂的网络结构,另一方面权重参数通常都以百万到亿来计,进化算法根本无法优化。

但换个思路,假如我们找到了一组网络架构参数和对应的超参数,深度学习模型的性能其实是由这组参数来控制和决定的,所以只需要对复杂模型的架构参数和对应的超参数进行优化即可。

目前常见的一种网络架构是链状结构,如下图:

N 层序列网络架构
N 层序列网络架构

这种结构相当于一个 N 层的序列,每一层有几种可选的算子,比如卷积、池化等,每种算子包括一些超参数,比如卷积尺寸、卷积步长等。

最近的一些工作受启发于一些人工设计的网络架构,研究带有多分支的网络,如下图:

多分支网络架构
多分支网络架构

很多的深层 RNN 会有类似的结构,很多的网络结构虽然很深,但会有许多重复 cell,将 cell 抽象出来之后,复杂的结构也会变得简单,一方面可以减少优化变量数目,另一方面相同的 cell 在不同任务之间进行迁移,如下图。

深层循环神经网络(RNN)架构
深层循环神经网络(RNN)架构

网络架构搜索问题由于其高维度、连续和离散混合等诸多难点,在搜索空间维度这块如果可以做些降维,将会大大提升效果,Zoph 在 2018 年的工作用了 cell 这种方式相比于 2017 年的工作有 7 倍的加速。

搜索策略

搜索策略定义了使用怎样的算法可以快速、准确找到最优的网络结构参数配置。常见的搜索方法包括:随机搜索、贝叶斯优化、进化算法、强化学习、基于梯度的算法。其中,2017 年谷歌大脑的那篇强化学习搜索方法将这一研究带成了研究热点,后来 Uber、Sentient、OpenAI、Deepmind 等公司和研究机构用进化算法对这一问题进行了研究,这个 task 算是进化算法一大热点应用。

强化学习

强化学习是一种非常有意思的范式,几乎只要可以提炼出强化学习四要素,原问题就可以用强化学习来求解。

在 NAS 任务中,将架构的生成看成是一个 agent 在选择 action,reward 是通过一个测试集上的效果预测函数来获得(这个函数类似于工程优化问题中的 surrogate model,即代理模型)。这类工作整体的框架都是基于此,不同的点在于策略表示和优化算法。

一个工作是,用 RNN 来表示策略函数,初始化时先用策略梯度算法赋初值,然后用 PPO 来进行优化。另一个工作是,用简单的 Q-learning 算法来训练策略函数,序列地进行动作选择,即选择 layer 的类型和相关的超参数。

因为在 NAS 任务中,agent 与环境没有交互,可以降阶为无状态的多臂老虎机(MAB)问题。 这里的几个工作都是近两三年的新工作,后面会对这些 paper 进行专门解读。

进化算法

进化算法是一大类算法,大概的框架也基本类似,先随机生成一个种群(N 组解),开始循环以下几个步骤:选择、交叉、变异,直到满足最终条件。最近几年流行一种基于概率模型的进化算法 EDA (Estimation Distribution of Algorithm),基本的思路类似遗传算法,不同的是没有交叉、变异的环节,而是通过 learning 得到一个概率模型,由概率模型来 sample 下一步的种群。

用进化算法对神经网络超参数进行优化是一种很古老、很经典的解决方案,90 年代的学者用进化算法同时优化网络结构参数和各层之间的权重,因为当时的网络规模非常小,所以还能解决,但后续深度学习模型网络规模都非常大,无法直接优化。

进化算法是一种无梯度的优化算法(Derivative Free Optimization Algorithm),优点是可能会得到全局最优解,缺点是效率相对较低,近两年几家高科技企业做 NAS 时都在用进化算法优化网络结构,同时用基于梯度的方法(BP)来优化权值。在 NAS 任务中,进化算法的交叉算子和任务结合比较紧,被定义为一些类似添加、删除层的操作,而非简单的更改某一位编码。

用进化算法解决 NAS 问题,不同的工作可能聚焦在不同的过程中,比如如何 sample 种群,如何 update 种群,如何生成子代种群等。这些工作将会被在后面的文章中进行解读。

贝叶斯优化

贝叶斯优化(Bayesian Optimization)是超参数优化问题的常用手段,尤其是针对一些低维的问题,基于高斯过程(Gaussian Processes)和核方法(kernel trick)。对于高维优化问题,一些工作融合了树模型或者随机森林来解决,取得了不错的效果。

除了常见的三大类方法,一些工作也在研究分层优化的思路,比如将进化算法和基于模型的序列优化方法融合起来,取各种方法的优势。Real 在 2018 年的一个工作对比了强化学习、进化算法和随机搜索三类方法,前两种的效果会更好一些。

评价预估

评价预估类似于工程优化中的代理模型(surrogate model),因为深度学习模型的效果非常依赖于训练数据的规模,大规模数据上的模型训练会非常耗时,对优化结果的评价将会非常耗时,所以需要一些手段去做近似的评估。

一种思路是用一些低保真的训练集来训练模型,低保真在实际应用可以有多种表达,比如训练更少的次数,用原始训练数据的一部分,低分辨率的图片,每一层用更少的滤波器等。用这种低保真的训练集来测试优化算法会大大降低计算时间,但也存在一定的 bias,不过选择最优的架构并不需要绝对数值,只需要有相对值就可以进行排序选优了。

另一种主流思路是借鉴于工程优化中的代理模型,在很多工程优化问题中,每一次优化得到的结果需要经过实验或者高保真仿真(有限元分析)进行评价,实验和仿真的时间非常久,不可能无限制地进行评价尝试,学者们提出了一种叫做代理模型的回归模型,用观测到的点进行插值预测,这类方法中最重要的是在大搜索空间中如何选择尽量少的点预测出最优结果的位置。

第三种主流思路是参数级别的迁移,用之前已经训练好的模型权重参数对target问题进行赋值,从一个高起点的初值开始寻优将会大大地提高效率。在这类问题中,积累了大量的历史寻优数据,对新问题的寻优将会起到很大的帮助,用迁移学习进行求解,是一个很不错的思路。

另一种比较有意思的思路叫做单次(One-Shot)架构搜索,这种方法将所有架构视作一个 one-shot 模型(超图)的子图,子图之间通过超图的边来共享权重。

小结

网络结构和超参数优化是自动机器学习(AutoML)中关键的一个环节,在上一个人工智能时代,浅层神经网络比较火的时候,自动调参也有很多工作,只不过区别在于不仅仅对超参数进行优化,还对网络的权值一起进行了优化。

在这个人工智能时代来临之后,各种深度模型的效果非常好,重新点燃了这个方向的研究激情,加上强化学习的火热,各种流派百家争鸣。

GitHub地址项目 GitHub 地址

Google 发布『多巴胺』开源强化学习框架

强化学习是一种非常重要 AI 技术,它能使用奖励(或惩罚)来驱动智能体(Agents)朝着特定目标前进,比如它训练的 AI 系统 AlphaGo 击败了顶尖围棋选手,它也是 DeepMind 的深度 Q 网络(DQN)的核心部分,它可以在多个 Workers 之间分步学习,例如,在 Atari 2600 游戏中实现『超人』性能。麻烦的是,强化学习框架需要花费大量时间来掌握一个目标,而且框架往往是不灵活和不总是稳定的。

但不用担心,Google 近日发布了一个替代方案:基于 TensorFlow 的开源强化学习框架 Dopamine(多巴胺)。 Google 的博文中提到,这个基于 TensorFlow 的强化学习框架,旨在为 RL 的研究人员提供灵活性,稳定性和可重复性的研究。受到大脑中奖励动机行为的主要成分的启发,以及反映神经科学与强化学习研究之间强烈的历史联系,该平台旨在实现可推动激进发现的思辨研究(Speculative Research)。此版本还包括一组阐明如何使用整个框架的 Colabs。

除了强化学习框架的发布,谷歌还推出了一个 Baseline plots 网站,允许开发人员快速可视化多个智能体的训练运行情况。他们希望,这一框架的灵活性和易用性将使研究人员能积极尝试新的想法,不管是渐进式还是激进式的想法。

GitHub地址项目 GitHub 地址

强化学习环境 Gym Retro

Gym 是 OpenAI 发布的用于开发和比较强化学习算法的工具包。使用它我们可以让 AI 智能体做很多事情,比如行走、跑动,以及进行多种游戏。目前,它运行在支持 Python 3.5 和 3.6 的 Linux、MacOS 和 Windows 系统上。

OpenAI 近日发布了完整版游戏强化学习研究平台 —— Gym Retro。在本次发布之后,OpenAI 公开发布的游戏数量将从大约 70 个雅达利和 30 个世嘉游戏增加到了 1,000 多个游戏,其中包括对任天堂 Game boy 等各种模拟器的支持。此外,OpenAI 还将发布用于向 Gym 平台添加新游戏的工具。

OpenAI 利用 Gym Retro 对强化学习算法及学习能力的泛化进行了研究。RL 领域之前的研究主要集中在优化智能体以完成单个任务上。Gym Retro 可以帮助研究在概念相似但外观不同的游戏之间进行泛化的能力。OpenAI 还将发布用于集成新游戏的工具。如果你有游戏 ROM,此工具可以帮你轻松创建储存状态、寻找内存位置以及设计强化学习智能体可以实施的方案。OpenAI 已经为希望增加新游戏支持的人编写了一个《集成器指南》。

此前,OpenAI 通过举办迁移学习竞赛:评估强化学习算法表现

GitHub地址项目 GitHub 地址

UC Berkeley 深度强化学习开放课程

UC Berkeley 最近发布了 CS 294: Deep Reinforcement Learning, Fall 2017 —— 深度强化学习的开放课程资源(中文翻译),这个课适合已经有一定机器学习基础的同学学习。同时,该课程主题选择深度增强学习,即紧跟当前人工智能研究的热点,又可作为深度学习的后续方向,值得推荐。

深度强化学习可以说是人工智能领域现在最热门的方向,吸引了众多该领域优秀的科学家去发掘其能力极限。而深度强化学习本身也由于其通用性备受各个应用领域推崇,从端对端游戏控制、机器人手臂控制、推荐系统,甚至也来到了自然语言对话系统。然而如何在日新月异,几乎每日都在更新迭代的深度强化学习的进展中保持好节奏,那是这篇文章带给大家的建议和思考。

开源强化学习环境:Control Suite

DeepMind 最近开源的强化学习环境 Control Suite,相比 OpenAI Gym,它拥有更多的环境,更易于阅读的代码文档,同时更加专注于持续控制任务。Control Suite 基于 Python,由 MuJoCo 模拟物理引擎提供支持。

完整的 DeepMind Control Suite + MuJoCo 套件,既是一套面向科研强大的强化学习(Reinforcement Learning)智能体性能评估基准;同时,又是一套完整的机器人模拟全仿真教学 Python 库。

GitHub地址项目GitHub地址