新的任务范式:Program-guided Tasks

关注深度学习自然语言处理公众号,每天给你送来NLP技术干货!


来自:Smarter

推荐一下我们的工作: ProTo: Program-Guided Transformer for Program-Guided Tasks(https://arxiv.org/abs/2110.00804)。点击链接可以看到arxiv论文。

我们的贡献有以下几个。

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的例子:

新的任务范式:Program-guided Tasks_第1张图片

在左边的任务视觉推理中,我们的程序就是一个推理的流程,这张图中程序的含义就是“求女孩左边桌子上薯条是什么颜色“。这里程序的输入就是图片。任务的目标就是需要在这张图片下学习执行程序。

在右边的任务策略学习中,我们的程序就是一个执行策略的过程,这张图中程序的含义就是“在我的世界的游戏中,按照当前看到的条件去挖木头/建桥/挖矿“(这里的程序还包含分支语句if-else,这里就不详细描述了)。这里程序的输入就是当前观察到的地图。任务的目标就是按照程序去执行策略。

我们期望后续工作还能提出更多可以满足program-guided tasks框架的任务。

为什么要学习执行program?

可能很多小伙伴要问了,为什么需要学习怎么执行program呢,我们每天用的hard-coded的编译器不是很好吗?其实通过上面的例子可以看出,很多情况下非学习的程序是难以执行的(比如程序的输入是一个图片),并且非学习的程序是难以保证泛化能力的(比如面对数据集里没有出现的语句以及图片)。Neurips这种机器学习会议的专家非常看重机器学习能解决的任务。按照“万物皆可学习”的理念,学习执行程序是非常有意义的研究方向。

应该怎么解决program-guided tasks?

在论文里我们抛砖引玉,提出了基于transformer的ProTo模型(program-guided transformers)。proto的字典解释就是“第一个,原始的”,也就是说我们希望能有更多的模型提出,来解决program-guided tasks。

这里我们认识到,program同时具有语义和结构信息,所以一个很好的模型需要综合利用这两种信息

新的任务范式:Program-guided Tasks_第2张图片

在上图左边,我们把程序的语义信息和结构信息分别进行编码,这里的语义信息就是用一个自然语言处理中的编码模块,结构信息就是表示程序的信息传递规则(比如执行完第一句跳转执行第三句,那么第一句跟第三句是连接的,我们的模型还可以并行执行不同的语句)。

上图的右边基本是基于transformer模型进行了简单修改,同时把语义信息、结构信息和程序输入送进transformer,并迭代更新结果矩阵。

为了适应分支结构和循环结构,我们还提出了指针更新的算法。这部分idea很简单,就是按照我们每天用的程序执行的方式去更新指针:遇到分支就根据条件判断进哪个分支,遇到循环就判断是否要进入循环以及是否完成。虽然idea简单,但是写起来比较麻烦,这里就不详细描述了,大家可以看论文中的算法块进行。

模型搭建好之后,怎么进行学习呢?我们提出了三种学习方式:全监督学习、部分监督学习、无监督学习。全监督学习比较简单,就是算一个预测和ground-truth之间的距离算loss。部分监督学习就是只有最后一步有真值,中间是没有真值的。无监督学习的情况适用于只知道程序是否执行正确,不知道正确的结果是什么。这里需要用到强化学习去完成。

实验结果如何?

由于我们是最先提出program-guided tasks的,我们对之前的方法进行了部分改编,适配到我们的任务进行比较。在两个领域(视觉推理和策略学习)中,都达到了SOTA的水平。

新的任务范式:Program-guided Tasks_第3张图片 视觉推理任务结果 新的任务范式:Program-guided Tasks_第4张图片 策略学习任务结果

审稿人评价如何?

在rebuttal之前,所有审稿人对我们的评价都给予了高度评价。下面展示四个审稿人的评价:

审稿人1: 应用很有趣,对Neurips社区非常有意思。

3fab82b7f805d571e4039861127d7476.png

审稿人2: 这个方向是有意义的逐渐引起关注的方向。

0a6771061a7ddd526ed8b2965ffd2915.png

审稿人3: 学习执行程序是非常重要的课题。

ea2825814c26b617148367c092007dc1.png

审稿人4: 结合两个领域CV+RL做程序执行的学习非常新颖。

新的任务范式:Program-guided Tasks_第5张图片

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

新的任务范式:Program-guided Tasks_第6张图片

记得备注呦

整理不易,还望给个在看!

你可能感兴趣的:(python,机器学习,人工智能,深度学习,java)