点击下方卡片,关注“CVer”公众号
AI/CV重磅干货,第一时间送达
新的任务范式:Program-guided Tasks
推荐一下我们的工作: ProTo: Program-Guided Transformer for Program-Guided Tasks。点击链接可以看到arxiv论文。
https://arxiv.org/abs/2110.00804
我们的贡献有以下几个:
1. 提出了一个新的任务框架,Program-guided tasks,就是学习怎么执行程序来完成任务。
2. 我们提出了基于transformer的ProTo模型,可以同时建模程序的语义信息和结构信息。
3. 我们在视觉推理和策略学习两个广泛的领域内验证了我们提出的Proto模型的有效性。
下面按照QA的方式逐步介绍一下我们的论文。
什么是Program?
要理解什么是program-guided tasks,就必须先理解什么是program。wikipedia对program的解释是“为了达到某个目的,给计算机或其他机器使用的一系列指令“。这里与我们每天在写的程序做个比较。与我们程序员每天在用的程序相比,机器学习领域内程序也可以执行,也具有明确的可解释性。不过区别是,机器学习领域内研究的程序,不一定要借助给定的编译器(机器学习的理念就是万物都可学习),也不一定要做到图灵完备(只要为某些任务设计就行)。
Program有什么好处?为什么要研究program?
Program是图灵留给我们的一大利器,我们每天都在享受着程序带来的好处。在机器学习和人工智能中,程序有以下几个好处:
1、区别于黑盒模型,程序具有很好的可解释性。
2、程序可以作为很好的人与机器交互的工具,比自然语言更干净、更结构化。
3、程序具有很好的泛化性能,在一个领域内适用的程序很可能可以迁移或者拓宽到其他领域。
4、程序可以统一不同的模块,有机会组建成强大的跨界通用的智能体。
这些性质都是机器学习乃至人工智能领域很看重的,所以说这块的研究非常受重视。
什么是Program-guided Tasks?
这里就要讲到我们论文中提出的任务框架了,叫做program-guided tasks。这个任务的要求是给定一个程序+程序的输入(specification),要求得到预期的输出。换句话说,我们需要学习怎么去执行这个程序。注意区别于我们每天用的程序的写死的执行器(hard-coded),我们这个任务中的执行器是学习得到的。我们下面举两个具体的program-guided tasks的例子:
在左边的任务视觉推理中,我们的程序就是一个推理的流程,这张图中程序的含义就是“求女孩左边桌子上薯条是什么颜色“。这里程序的输入就是图片。任务的目标就是需要在这张图片下学习执行程序。
在右边的任务策略学习中,我们的程序就是一个执行策略的过程,这张图中程序的含义就是“在我的世界的游戏中,按照当前看到的条件去挖木头/建桥/挖矿“(这里的程序还包含分支语句if-else,这里就不详细描述了)。这里程序的输入就是当前观察到的地图。任务的目标就是按照程序去执行策略。
我们期望后续工作还能提出更多可以满足program-guided tasks框架的任务。
为什么要学习执行program?
可能很多小伙伴要问了,为什么需要学习怎么执行program呢,我们每天用的hard-coded的编译器不是很好吗?其实通过上面的例子可以看出,很多情况下非学习的程序是难以执行的(比如程序的输入是一个图片),并且非学习的程序是难以保证泛化能力的(比如面对数据集里没有出现的语句以及图片)。Neurips这种机器学习会议的专家非常看重机器学习能解决的任务。按照“万物皆可学习”的理念,学习执行程序是非常有意义的研究方向。
应该怎么解决program-guided tasks?
在论文里我们抛砖引玉,提出了基于transformer的ProTo模型(program-guided transformers)。proto的字典解释就是“第一个,原始的”,也就是说我们希望能有更多的模型提出,来解决program-guided tasks。
这里我们认识到,program同时具有语义和结构信息,所以一个很好的模型需要综合利用这两种信息。
在上图左边,我们把程序的语义信息和结构信息分别进行编码,这里的语义信息就是用一个自然语言处理中的编码模块,结构信息就是表示程序的信息传递规则(比如执行完第一句跳转执行第三句,那么第一句跟第三句是连接的,我们的模型还可以并行执行不同的语句)。
上图的右边基本是基于transformer模型进行了简单修改,同时把语义信息、结构信息和程序输入送进transformer,并迭代更新结果矩阵。
为了适应分支结构和循环结构,我们还提出了指针更新的算法。这部分idea很简单,就是按照我们每天用的程序执行的方式去更新指针:遇到分支就根据条件判断进哪个分支,遇到循环就判断是否要进入循环以及是否完成。虽然idea简单,但是写起来比较麻烦,这里就不详细描述了,大家可以看论文中的算法块进行。
模型搭建好之后,怎么进行学习呢?我们提出了三种学习方式:全监督学习、部分监督学习、无监督学习。全监督学习比较简单,就是算一个预测和ground-truth之间的距离算loss。部分监督学习就是只有最后一步有真值,中间是没有真值的。无监督学习的情况适用于只知道程序是否执行正确,不知道正确的结果是什么。这里需要用到强化学习去完成。
实验结果如何?
由于我们是最先提出program-guided tasks的,我们对之前的方法进行了部分改编,适配到我们的任务进行比较。在两个领域(视觉推理和策略学习)中,都达到了SOTA的水平。
审稿人评价如何?
在rebuttal之前,所有审稿人对我们的评价都给予了高度评价。下面展示四个审稿人的评价:
审稿人1: 应用很有趣,对Neurips社区非常有意思。
审稿人2: 这个方向是有意义的逐渐引起关注的方向。
审稿人3: 学习执行程序是非常重要的课题。
审稿人4: 结合两个领域CV+RL做程序执行的学习非常新颖。
ICCV和CVPR 2021论文和代码下载
后台回复:CVPR2021,即可下载CVPR 2021论文和代码开源的论文合集
后台回复:ICCV2021,即可下载ICCV 2021论文和代码开源的论文合集
后台回复:Transformer综述,即可下载最新的两篇Transformer综述PDF
CVer-Transformer交流群成立
扫码添加CVer助手,可申请加入CVer-Transformer 微信交流群,方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch和TensorFlow等群。
一定要备注:研究方向+地点+学校/公司+昵称(如Transformer+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群
▲长按加小助手微信,进交流群
▲点击上方卡片,关注CVer公众号
整理不易,请点赞和在看