[阅读笔记28][Pix2Act]From Pixels to UI Actions: Learning to Follow Instructions via Graphical User Inter

这篇是谷歌在23年9月发表的工作,它与之前的agent都有些不同,它的输入完全依赖于图像。

之前的针对gui的agent工作依赖于网页的HTML等文本表示,但是这些信息有时候不好获取到,比如一些使用了大量脚本的web网页、限制访问DOM的沙箱环境、通常不对外暴露底层结构的app,另外即使获取到了底层的结构信息,由于混淆或者与GUI实际显示内容不一致,这些结构信息也很难被正确理解。
这篇论文强调的点在于它希望agent能够模拟人类的观察和行为,对于人类而言,我们执行网页操作时只需要观察网页的ui界面,发送出的操作也仅仅是鼠标操作或者键盘操作这种通用的、与任务无关的操作。
下图是整体的一个流程,模型接受图像输入,然后把需要执行的操作以文本输出。

对于观察空间,这里只使用了一张截图,但是截图会进行一些改动。具体而言有三点,首先截图上方会添加一条自然语言指令,然后在截图上绘制鼠标当前位置,最后绘制一个指示符,表示鼠标是否按下,这对拖动操作很有用。

接下来是动作空间,这篇论文的动作空间也是比较简单通用的,基本就是人类可能执行的动作。分两类,鼠标操作和键盘操作,鼠标包括单击、拖动、滚轮,键盘包括组合键。另外这里的数值都是离散到一个坐标桶里的,下图中坐标就是离散到了32个坐标桶。

作者所使用的agent来自于Pix2Struct这个模型,该模型是基于图像编码器和文本解码器的,然后利用网页截图解析来自监督的预训练。Pix2Struct有两种型号,这里作者选择的是小型的,只有接近3亿参数,由12个编码器和12个解码器构成,隐层维度为768。
模型的输入就是之前提到的截图,作者也考虑过将之前的截图拼接作为历史信息输入进去,但是在MiniWob++上没观察到更好的表现,所以这篇论文中都是取当前时间的截图作为输入的。在MiniWob++上图像分辨率为160*210,在WebShop上则为800*600。得益于Pix2Struct对图像输入进行改进,支持各种分辨率的图像,这里切换图像分辨率不需要额外处理。
模型的输出就是文本形式的动作了,使用beam search输出top-k个操作。

agent训练时首先使用行为克隆来有监督的学习人类的行为。之后分为两种策略,贪心策略直接选择beam search得到的top-k中具有最大近似概率的动作。
树搜索策略采用蒙特卡洛树搜索,这里简单说一下论文中的如何实现。蒙特卡洛树的核心思想就是通过若干次模拟,推断出下一步应该采取的动作是什么,论文中在每个状态做决策时进行了16轮模拟。前期有一些准备工作,对于奖励函数论文中没使用MiniWob++中原始的奖励,而是提出了一个替代奖励,对于一个状态s,它的奖励为原始奖励加上αs,αs是个常量,作者取值为-1/30,这是因为所有任务都能在30步内完成。这样做可以鼓励更简洁的操作。之后需要一个决策网络和一个估值网络,决策网络就是之前行为克隆训练过的那个Pix2Struct,估值网络仍然使用Pix2Struct模型,使用人类的演示来进行训练,这样对于一张截图就能预测出它未来将获得的奖励值了。
之后假设当前状态为St,决策产生了top-k个动作,如果是贪心策略那就直接选概率最大的了,但是树搜索会考虑未来信息来优化当前的策略。一开始搜索树只有一个根节点,在16轮模拟过程中会动态添加节点。每轮模拟都是从根节点开始遍历,在当前节点处根据论文中的公式判断使用哪个动作,也就是用函数Q(S, a)和U(S, a)的加和来选择具体哪个动作,这16轮模拟过程中Q和U都是在动态变化的,每次都会选择Q+U最大的那个动作来执行。按照上面的选择方法不断选择子节点,直到该子节点不存在或者子节点是终止状态。如果子节点是终止状态那就反向传播一下然后退出这轮模拟,如果子节点不存在的话那需要把它创建出来,同样反向传播一下然后退出这轮模拟。在节点创建完以后它的未来预估奖励值就可以计算了,代码中是把这部分计算放在了节点初始化函数里。未来预估奖励值包括两部分,一部分是预演得到的,也就是从当前状态开始直接用贪心策略选择动作,论文中说最多预演20步,这个过程中的状态用之前定义的替代奖励来计算并加和,可以把这个奖励值记为v1。另一部分是估值网络计算得到的,之前训练的估值网络也在这儿派上用场了,输入当前状态到网络中,可以输出预估的未来能获得的奖励值,记为v2。将v1和v2按权相加得到该节点状态未来能获得的预估奖励值。最后就剩反向传播了,这部分其实就是在更新边上的Q值和U值了。对于一个节点s0,设从该节点到根节点的路径为s0->a0->s1->a1->root,其中s0、s1和root表示节点,a0和a1表示连边,那s0位置处的反向传播就是要更新a0和a1的Q和U值,对应论文中的Q(root, a1)、Q(s1, a0)、U(root, a1)和U(s1, a0),根据Q和U的公式我们知道必须记录下来每条边上Q的累加和以及累加了多少次,这样才能计算出来Q这个均值。16轮模拟完以后,选择当前状态s下访问次数最多的动作a来真正执行。

整个蒙特卡洛的过程说起来有点麻烦,但是论文配套的代码写的挺清楚的。整体就是一个大循环套一个小循环,大循环循环的是一个任务的最多30步行动,小循环循环的是当前观察下为了选择最优行动蒙特卡洛树搜索的16次模拟迭代过程。左图为30次大循环,右图为16次小循环。

最后是结果展示,下图中左侧是MiniWob++基准上的性能测试结果,右侧是WebShop基准上的测试结果,可以看到预训练的影响很大,能大概提升50分,目前已经和使用HTML的方法接近了,并且在MiniWob++上超过了人类得分。但是在WebShop上和使用HTML的方法还有差距。
左上是对预训练的影响做了个实验,这里的预训练就是Pix2Struct中截图解析任务。可以看到预训练还提高了zero-shot性能。右上是多轮迭代下的贪心策略和树搜索策略,为什么可以迭代,因为树搜索策略可以发现成功的episode来改进模型,改进后的模型又可以提升树搜索策略。

  • 23
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值