【论文阅读分享】AndroidEnv- A Reinforcement Learning Platform for Android
AndroidEnv- A Reinforcement Learning Platform for Android
论文阅读分享
https://arxiv.org/pdf/2105.13231.pdf
【背景】
在强化学习里有两个基本的概念,环境(Environment)和智能体(Agent)。智能体通过一套策略输出一个行为(Action)作用到环境,环境则反馈状态(Observation)和奖励值(Reward)到智能体。智能体在每一步的交互中,都会获得对于所处环境状态的观察(有可能只是一部分),然后决定下一步要执行的动作。环境会因为智能体对它的动作而改变,也可能自己改变。如此不断循环,最终找到一个最优的策略,使得智能体可以尽可能多的获得来自环境的奖励。二者关系如下图所示:

【主要工作】
作者搭建了一套基于安卓的仿真环境,命名为AndroidEnv。AndroidEnv具有通用触摸屏界面,可对设计用于处理各种任务的通用RL算法进行经验评估。AndroidEnv中的agent环境交互与用户和真实设备的交互相匹配:屏幕像素构成观察,动作空间由触摸屏手势定义,交互是实时的,动作是异步执行的,而环境以其自身的时间尺度运行。
在本文中,作者首先介绍了该环境的一些特点与技术细节。而后,介绍了如何定义任务,并给出了几个经典实验的测试结果。最后,对比了此环境与现有环境的异同点。
- 环境特性
(1)实时执行:
安卓操作系统,无论是作为仿真器还是在真实设备上运行,都是实时运行的,独立于与之交互的代理。所有观察和操作都是异步的,操作系统在提供观察或执行操作时不会暂停。屏幕刷新率在60Hz和120Hz之间变化,超过该限制的屏幕捕获不会向代理提供更多信息。Android及特定的应用程序处理和解释智能体的操作,平台允许缓冲到设备,也具有版本相关的限制。
(2)动作界面
原始动作空间:
位置:(x,y) in [0,1], [0,1],动作:ActionType:{TOUCH, LIFT, REPEAT}组成,分别对应在指定位置上的触摸、抬起指针和重复最后选择的动作。此原始动作空间的设定在所有任务和应用中相同。

手势操作:
仅依靠原始的动作无法完成复杂的操作,但是可以通过组合形成更加常用的手势操作:按下、长按、滑动、滚动、拖放等。例如图(a),在同一个位置上顺序执行TOUCH、LIFT操作,即可认为是点击;一系列的不同位置的TOUCH可以认为是滚动操作,如图(b)©。

观测相关性:
在AndroidEnv中动作与观测之间存在空间相关性。一个动作执行后,动作执行位置附近的观测值(像素点)可能发生局部变化,或者观测值中某些特定的事物可能提示下一个动作执行的最佳位置。例如,按钮/按键可能暗示点击操作,拖拽的进度条可能暗示拖拽操作。
改变动作空间:
AndroidEnv允许用户给予原始的动作空间定义包装函数。例如,可以将屏幕划分为不同的网格;限定动作类型仅为触摸;组合[LIFT,TOUCH,LIFT]为单个的点击操作。需要注意的是这些操作只会改变智能体可执行的操作,而不会改变原始的动作定义,即(2)中的定义。
(3) 观测
观测空间:
由{像素、时间增量、方向}组成,比较好理解的是像素,对应当前帧的RGB图像矩阵。时间增量为上一次观测后经过的时间,方向可能不会影响RGB图像矩阵,但是依旧带有有效的信息,如屏幕上的文本,其方向对自动化处理有用。
任务附加:
除了上述默认的观测以外,某些特定的任务可能会在每一步后公开结构化信息,如下图。extras在AndroidEnv中帮助理解任务,且在图像信息中无法获取。Extras是安卓APP中的标准机制用于信息交流。任务附加并非必须项,可以依据任务自定义,同时也不作为观测的一部分,需要显式的请求返回。

基于以上特性,使得AndroidEnv成为开发和测试RL算法的更接近真实环境的平台,智能体性能可以与人类的表现进行直观的比较。同时,接近真实世界的特点也有助于生产部署。
2.任务定义
原始的安卓系统不包含强化学习所需的任务与回合,AndroidEnv中提供了一个简单的机制来定义任务。在任务中获取回合结束条件、奖励或者是智能体可交互的APP等信息。基于上述信息为智能体定义特定的RL任务。
(1)任务结构。如何初始化环境:例如在设备上安装特定的APP。何时重置回合:例如从应用中收到特定消息或达到时间限制后。如何确定奖励:例如这可能取决于从安卓中发出的不同的信号,如安卓可访问服务或应用程序中的日志消息。
(2)可获得的任务。作者提供了一组初始的直接可使用任务,包含大约30个不同应用程序中的100多个任务,既包括目标简单的基础任务也包括需要长期推理的复杂任务。如时间敏感任务(catch)、基于物理的环境(vector_pinball)等。
3.技术细节
(1)Android Debug Bridge(ADB)提供了一种安卓设备的通信方式,允许用户项设备发送命令。AndroidEnv使用ADB进行控制操作,如启动应用程序、查询当前活动、重置事件等。
(2)AndroidEnv使用Android Emulator3,它是Android Studio提供的默认模拟器。为了运行模拟器,用户需要指定安卓虚拟设备(AVD)。可以使用Android Studio创建具有特定屏幕分辨率和操作系统版本的AVD,因此用户可以选择基于RL模拟的设备类型。模拟器可以为智能体提供一个安全的运行环境,不会有任何实际的影响。
(3)实时交互,这一点是比较重要的一点。在实时环境中需要考虑在给定观察的情况下,智能体可能需要一些时间来生成下一个动作。在传统的lockstep环境中,环境会生成一个观察,然后暂停等待代理响应下一个动作,然后再向前推进模拟,如上图所示。为了防止这些问题,AndroidEnv可以选择在请求观察之前插入等待时间,以便每一步都更接近固定的交互速率,同时为代理提供最新观察。如下图所示,给定所需的max_steps_per_second,AndroidEnv等待\Delta t=1/max_steps_per_second,实现尽可能接近的交互速率。

【实验结果】
作者基于一些强化学习算法在AndroidEnv中的一些任务上进行实验测试。强化学习算法包括连续控制的DDPG以及分布式版本D4PG、最大后验策略MPO。上述智能体需要为动作类型提供一个[0,1]之间的连续值,而后AndroidEnv将四舍五入为离散值发送给模拟器。
同时,作者测试了DQN、IMPALA、R2D2等为有限动作界面设计的智能体。此时,将屏幕离散化为6\times9的网格,组合成108种动作,即每个单元格选择TOUCH或LIFT。为了帮助无记忆智能体,作者通过ONE-HOT编码了上一个动作的执行位置来增强观测,可以为训练提供更多特征。
作者共测试了6个任务上的表现,分别对应简单到困难catch,rocket sleigh,press button,appleflinger,2048,blockinger。

由于这些任务不依赖于高分辨率输入解决,本文将观测图像下采样为80x120像素。使用128个分布式表演者生成训练数据,并且每次使用不同的随机数种子的实验中4次结果取平均。
本文将人类表现的平均值标准化为1作为参考。从实验结果上看,大多数智能体在具有简单动作界面和密集奖励的任务上表现良好,而具有高度结构化界面、时间敏感性和稀疏奖励的任务难以解决。

【不同仿真环境异同点】

【个人总结】
本文中介绍了Deepmind针对安卓生态构建的强化学习仿真环境 AndroidEnv。AndroidEnv 是一个开源 Python 库,将安卓设备封装为一个统一接口的强化学习环境,供智能体与设备服务与应用程序进行交互。在 AndroidEnv中,智能体根据屏幕上显示的图像做出决策,并像人类一样通过触屏动作和手势与屏幕进行交互。
