今天小编分享的科学经验:大模型对语言有自己的理解!MIT论文揭示大模型“思维过程”,欢迎阅读。
大模型对现实世界,可以形成自己的理解!
MIT 的一项研究发现,随着模型能力越强,它对现实的理解可能不仅是简单模仿。
比如大模型没有闻过气味,是否就意味着它不能理解气味?
研究发现,它可以自发模拟一些概念,方便理解。
这项研究意味着,大模型未来有希望更深入理解语言和世界,论文已被顶会 ICML 24 接收。
这篇论文的作者是 MIT 计算机与人工智能实验室(CSAIL)华裔博士生 Charles Jin 和他的导师 Martin Rinard 教授。
研究当中,作者让大模型只学习代码文本,结果发现模型逐渐掌握了其背后的含义。
Rinard 教授表示,这项研究直接针对现代人工智能的一个核心问题——
大模型的能力仅仅是由于大规模的统计相关性,还是对它们要处理的现实问题产生了有意义的理解?
△来源:MIT 官网
同时这项研究也引发了不少讨论。
有网友表示,虽然大模型对语言的理解可能和人类不同,但这项研究至少说明了模型做的绝不仅仅是对训练数据的记忆。
让大模型学习纯代码
为了探究大模型能否产生语义层面的理解,作者构建了一个由程式代码及其对应输入输出组成的合成数据集。
这些代码程式用一种名为Karel的教学语言编写,主要用于实现机器人在 2D 网格世界中导航的任务。
这个网格世界由 8x8 的格子组成,每个格子可以包含障碍物、标记物或空地。机器人可以在格子间移动,并进行放置 / 拾取标记物等操作。
Karel 语言包含 5 个原始操作—— move(前进一步)、turnLeft(左转 90 度)、turnRight(右转 90 度)、pickMarker(拾取标记物)、putMarker(放置标记物),程式就是由这些原始操作的序列组成。
作者随机生成了一个包含 50 万个 Karel 程式的训练集,每个程式长度在 6 到 10 之间。
每个训练样本由三部分组成:5 个输入状态、5 个输出状态和完整的程式代码,输入输出状态以特定格式编码进字元串中。
利用这些数据,作者训练了标准 Transformer 架构的 CodeGen 模型的一个变体。
训练过程中,模型可以访问每个样本中的输入输出信息和程式前缀,但看不到程式执行的完整轨迹和中间状态。
除了训练集,作者还构建了一个包含 1 万个样本的测试集,用于评估模型的泛化性能。
为了研究语言模型是否掌握了代码背后的语义,同时深入了解模型的 " 思维过程 ",作者设计了一套包含线性分类器和单 / 双隐层 MLP 的探测器组合。
探测器的输入是语言模型在生成程式 tokens 过程中的隐藏状态,预测目标则是程式执行的中间状态,具体包括机器人的朝向(direction)、相对于初始位置的偏移量(position)以及是否正面朝向障碍物(obstacle) 这三个特征。
在生成模型的训练过程中,作者每隔 4000 步记录一次上述三个特征,并同时记下生成模型的隐藏状态,形成探测器的训练数据集。
大模型学习的三个阶段
通过观察语言模型产生的程式的多样性、困惑度等指标随训练进程的变化,作者将训练过程分为了三个阶段——
Babbling(胡言乱语)阶段:输出程式重复度高,探测器准确率不稳定。
语法习得阶段:程式多样性迅速提高,生成准确率小幅提升,困惑度下降,说明语言模型习得了程式的句法结构。
语义习得阶段:程式多样性和句法结构掌握程度平稳,但生成准确率和探测器性能大幅提升,说明语言模型习得了程式的语义。
具体来说,Babbling 阶段占据了整个训练过程的前 50%,例如在训练到 20% 左右的时候,无论输入什么规范,模型都只会生成一个固定的程式—— "pickMarker" 重复 9 次。
语法习得阶段处于训练过程的 50% 到 75%,模型在 Karel 程式上的困惑度显著下降,表明语言模型开始更好地适应 Karel 程式的统计特性,但生成程式的准确率提升幅度不大(从 10% 左右提升到 25% 左右),仍然无法准确完成任务。
语义习得阶段是最后的 25%,程式的准确率出现了急剧提升,从 25% 左右提升到 90% 以上,生成的程式能够准确地完成给定的任务。
进一步实验又发现,探测器不仅可以对 t 时刻的同时间步进行预测,还能预测后续时间步的程式执行状态。
举例来说,假设生成模型在 t 时刻生成了 token"move",并将在 t+1 时刻生成 "turnLeft"。
与此同时,t 时刻的程式状态是机器人面向北方,位于坐标 ( 0,0 ) ,而 t+1 时刻机器人将是机器人将面向西方,位置不变。
如果探测器能够从语言模型在 t 时刻的隐藏状态中,成功预测到 t+1 时刻机器人会面向西方,就说明在生成 "turnLeft" 之前,隐藏状态就已经包含了这一操作带来的状态变化信息。
这一现象说明,模型并非只对已生成的程式部分有语义理解,而是在生成每一步时,就已经对接下来要生成的内容有所预期和规划,显现出了初步的面向未来的推理能力。
但这一发现又给这项研究带来了新的问题——
实验中观察到的准确度提升,到底真的是生成模型进步了,还是探测器自己推论的结果呢?
为了解决这个疑惑,作者补充了语义探测干预实验。
实验的基本思路是改变程式操作的语义解释规则,具体又分为 "flip" 和 "adversarial" 两种方式。
"flip" 是强行反转指令含义,如将 "turnRight" 强行解释为 " 左转 " 不过能进行这种反转的也只有 "turnLeft" 和 "turnRight";
"adversarial" 则是将所有指令对应的语义随机打乱,具体方式如下方表格。
如果生成模型的隐藏状态只编码了程式的句法结构,而非语义信息,那么探测器应该仍然能够从隐藏状态中以同等的性能去提取这些被改变的语义信息。
相反,如果探测器性能显著下降,则说明探测器显示出的的性能提升的确是因为生成模型隐藏状态编码了实际语义。
实验结果显示,在两种新语义下,探测器的性能都出现了显著下降。
尤其是在 "adversarial" 模式下更加明显,这也与该模式下的语义与原始语义差异更大的特征相一致。
这些结果有力地排除了探测器 " 自己学会语义映射 " 的可能性,进一步证实了生成模型的确掌握了代码的含义。
论文地址:
https://icml.cc/virtual/2024/poster/34849
参考链接:
[ 1 ] https://news.mit.edu/2024/llms-develop-own-understanding-of-reality-as-language-abilities-improve-0814
[ 2 ] https://www.reddit.com/r/LocalLLaMA/comments/1esxkin/llms_develop_their_own_understanding_of_reality/