一个很少受到关注的追求是计算机编程——既包括编写代码的苦差事,也包括试图理解一段已经编写好的代码这一同样令人困惑的任务。麻省理工学院计算机科学与人工智能实验室(CSAIL)的博士生Shashank Srikant说:“考虑到计算机程序在我们日常生活中的重要性,这当然值得研究。现在很多人都在处理代码——阅读、编写、设计、调试——但没有人真正知道当这些事情发生时他们的脑子里在想什么。”
幸运的是,他在本月早些时候在新奥尔良举行的神经信息处理系统会议上发表的一篇论文中,在这个方向上取得了一些“进展”——与麻省理工学院的同事Benjamin Lipkin(论文的另一位主要作者,与Srikant一起),Anna Ivanova, Evelina Fedorenko和Una-May O 'Reilly共同撰写。
这篇新论文建立在2020年由许多相同作者撰写的一项研究的基础上,该研究使用功能磁共振成像来监测程序员“理解”小块或代码片段时的大脑。(在这种情况下,理解意味着查看代码段并正确确定由代码段执行的计算结果。)大脑与认知科学(BCS)教授、早期研究的合著者Fedorenko解释说,2020年的研究表明,代码理解并没有持续激活语言系统,即处理语言处理的大脑区域。“相反,多需求网络——一种与一般推理有关、支持数学和逻辑思维等领域的大脑系统——非常活跃。”她说,目前的工作还利用了对程序员的核磁共振扫描,需要“更深入的研究”,以寻求获得更细粒度的信息。
之前的研究调查了20到30个人,以确定他们平均依赖哪些大脑系统来理解代码,而这项新研究则调查了单个程序员在处理计算机程序的特定元素时的大脑活动。例如,假设有一行代码涉及文字操作,另一段代码涉及数学运算。“我能从我们在大脑中看到的活动,实际的大脑信号,尝试逆向工程,弄清楚程序员具体在看什么吗?”Srikant问道。“这将揭示与程序有关的信息在我们的大脑中是唯一编码的。”他指出,对于神经科学家来说,如果他们可以通过观察某人的大脑信号来推断该物理属性,那么该物理属性就被认为是“编码”的。
举个例子,循环——程序中重复特定操作直到达到预期结果的指令——或者分支——一种不同类型的编程指令,可以使计算机从一个操作切换到另一个操作。根据观察到的大脑活动模式,研究小组可以判断出某人是在评估一段涉及循环还是分支的代码。研究人员还能分辨出这些代码是与单词还是数学符号有关,以及人们阅读的是实际的代码还是仅仅是对该代码的书面描述。
这解决了一个调查员可能会问的第一个问题,即某样东西实际上是否被编码了。如果答案是肯定的,那么下一个问题可能是:它在哪里编码?在上面引用的例子中——循环或分支,单词或数学,代码或其描述——大脑激活水平在语言系统和多需求网络中都是相当的。
然而,当涉及到与所谓的动态分析相关的代码属性时,观察到一个明显的差异。
程序可以具有“静态”属性——例如序列中数字的数量——不随时间变化。“但是程序也可以有动态的方面,比如循环运行的次数,”Srikant说。“我不能总是阅读一段代码,并提前知道该程序的运行时间。”麻省理工学院的研究人员发现,在动态分析中,信息在多需求网络中的编码比在语言处理中心中的编码要好得多。这一发现是他们探索代码理解在大脑中如何分布的线索之一——哪些部分参与其中,哪些部分在任务的某些方面发挥了更大的作用。
该团队进行了第二组实验,其中包含了被称为神经网络的机器学习模型,这些模型是在计算机程序上专门训练的。近年来,这些模型在帮助程序员完成代码段方面取得了成功。研究小组想要弄清楚的是,当参与者检查一段代码时,他们在研究中看到的大脑信号是否与神经网络分析同一段代码时观察到的激活模式相似。他们得到的答案是肯定的。
Srikant说:“如果你把一段代码放入神经网络中,它会生成一系列数字,以某种方式告诉你这个程序是关于什么的。对学习计算机程序的人的大脑扫描同样会产生一系列数字。例如,当一个程序被分支主导时,你会看到一种独特的大脑活动模式,当机器学习模型试图理解同一片段时,你也会看到类似的模式。”
马普软件系统研究所的Mariya Toneva认为这样的发现“特别令人兴奋”。他们提高了使用代码计算模型来更好地理解我们阅读程序时大脑中发生的事情的可能性,”她说。
麻省理工学院的科学家们对他们所发现的联系非常感兴趣,这些联系揭示了计算机程序的离散片段是如何在大脑中编码的。但他们还不知道这些最近收集到的见解能告诉我们人们在现实世界中如何执行更精细的计划。完成这类任务——比如去看电影,这需要检查放映时间、安排交通、买票等等——不能由单个代码单元和单个算法来处理。这样一个计划的成功执行反而需要“组合”——将不同的片段和算法串在一起,形成一个合理的序列,从而产生新的东西,就像将单独的音乐小节组合起来,形成一首歌甚至交响乐一样。CSAIL的首席研究科学家O 'Reilly说,创建代码组合模型“目前超出了我们的能力范围”。
Lipkin是BCS的博士生,他认为这是下一个合乎逻辑的步骤——弄清楚如何“将简单的操作结合起来构建复杂的程序,并使用这些策略有效地解决一般的推理任务。”他进一步认为,到目前为止,该团队在实现这一目标方面取得的一些进展归功于其跨学科的组成。利普金说:“我们能够从程序分析和神经信号处理的个人经验,以及机器学习和自然语言处理的结合工作中汲取经验。随着神经科学家和计算机科学家联手探索理解和构建通用智能,这种类型的合作正变得越来越普遍。”