本帖最后由 yeslab官方 于 2017-10-18 16:49 编辑
近期微软研究院发布了一篇题材新颖的论文《Neural Program Meta-Induction》,研究团队是由 Google,Google-DeepMind,Oxford,Microsoft Research 等多人组成的,旨在证明多项人工智能任务的相关性 (Meta-Induction) 能够用来提高人工智能程序处理全新任务时的经验。
该项研究是建立在 Karel 这种编程语言的,因为 Karel 机器人任务为自学习类程序打造了更艰巨的挑战:大量复杂的操作流(图1)。 Karel编程语言是由Richard E. Pattis在他的书《Karel The Robot: A Gentle Introduction to the Art of Programming》中提出,最早发布是在 1981 年。目前 Pattis 在他斯坦福大学的课堂上使用这门语言。
图1:图中I_1,O_1是对应的一对IO,IO下标1与2都是训练数据,而ÎÔ是测试数据,Underlying Program则是数据的示例(操作流)
可以看到交叉任务(cross-task)是很可能对 Karel 机器人程序中的操作流产生学习效果的,类似于自然语言处理中 Seq2Seq 的形式。
此类任务在目前的学习类算法中通常需要使用大量的 IO,例如为程序输入“左转-前进-抓取-右转-右转-前进-停止”这样的操作序列,然后与实际产生的效果做匹配(机器人抓回了指定货物),此为一条IO数据。如果我们使用Reinforcement learning(Alphgo核心学习技术),则需要几乎遍历所有操作流步骤的单项任务 IO 数据,所以就需要巨量的 IO 数据来进行训练,例如“星际争霸”游戏AI不经过再次训练的话,并不适合玩“魔兽争霸”,如何利用任务的相关性以及在限制IO数量的条件下提升人工智能对同类任务的“类化”学习能力,是本文的研究重点。
本文使用了4种技术进行对比:
• Plain Program Induction (PLAIN) 不能处理交叉任务(cross-task)
• Portfolio-Adapted Program Induction (PLAIN+ADAPT) 处理交叉任务效果不佳
• Meta Program Induction (META) 适合处理交叉任务
• Adapted Meta Program Induction (META+ADAPT) 适合处理交叉任务
单任务学习与多任务学习具有不同的网络结构(图2),单任务学习直接由传统的Encoder-Decoder 模型构成,而多任务学习的 Encoder 则由两部分构成:本任务的Input 和来自相关任务的Task Encoder。
图2:左侧为单任务学习,右侧为多任务交叉学习
本文使用的神经网络系统结构:
• Input Encoder: 输入数据(本任务输入数据)>> 3-layer CNN >> FC+relu
• Output Decoder: 1-layer LSTM >> 输出值
• Task Encoder: 输入数据(旁路任务输入数据+旁路任务输出数据)>> 1-layer CNN >> 变成一个单任务single example >> 6-layer CNN >> FC+relu >> 所有旁路任务汇聚 >> Max-Pooling
其中一些超参如下:
• CNN均使用3x3 kernel with 64-dim feature map
• 全连接层为1024 dim
• LSTM为1024 dim
• Dropout, Learning rate, batch size通过grid search 优化,这种优化是针对每一个n值(选择测试数据数量,论文Section5,6中有描述)
• 优化方法为SGD + momentum
详细实验系统组成与过程如图3,训练结果(测试集准确率)如图4,可以看到 Meta和 Meta+Adapt 在训练数据较少的时候处于领先地位,随着训练数据的增多,Meta+Adapt 仍然表现不俗,且论文中明确说明了,Meta 开始训练时,本任务训练数据仅 5 个,但会具备大量相关任务。
图3:行项为使用的技术,列项为不同的训练任务
图4:测试结果
在此实验后,该团队又对上面几种技术的结合形式进行了测试,从而得到了以下指引性结果(图5)
该结果论证了怎样的数据、应用场景应该选用哪种技术。人工智能系统的自学习任务应当面向更少数据与更复杂的任务类型,毕竟人工智能的目的是创造类似人类的智能机器,完成对人类造成困扰与危险的社会工作,使人类的生存环境更加舒适,而不是只有饱读数据的机器人才能完成简单的仓库搬运工作。
(论文来源是arXiv)
|