作为计算语言学家和NLP老司机,本篇是写给我的语言学老师和同学,以及符号NLP同行的,分享自己的心路历程,希望对大家有所启发。
如果语言学家以前觉得大模型烧脑和不解,那是因为窗户纸没有捅破,存在不同体系下的术语与机制细节的理解障碍,但底层逻辑并不乏不少共同的东西。本篇聚焦在大模型Transformer架构中的核心注意力机制的理解。
我出身计算语言学,这几年又一直在追踪大模型,可以“翻译”一下自注意力机制的核心设计多头的 QKV。
我们做符号文法的 早就该知道 Query 就是 Subcat,主导词为潜在结构“挖坑”用的,例如及物动词 (vt)就挖了两个坑:一个「名词」主语,一个「名词」宾语。主语、宾语是句法结构的角色要求,「名词」是对所要求对象的限制条件(更细致地,Subcat 还有其他限制条件,例如主语在vt前,宾语在 vt后,等)。具体到概念谓词“eat”,逻辑语义上也相应地挖了两个坑:一个是「动物」施事,一个是「食物」受事。「动物」(包括「人」)是逻辑语义结构中对施事角色的语义限制条件,「食物」是逻辑语义结构中对受事角色的语义限制条件。这些都是我们语言学家践行多年、耳熟能详的概念体系。
Key 就是本体特征, 例如,名词、物体、食物、动作、状态、修饰、时间等,Value 就是填坑的“萝卜”。可惜,初读论文「Attention is all you need」 ,被 QKV弄得晕头转向的时候,没有人指点迷津。
为什么LLM大模型吃透了语言,说话那么顺溜,原来各个层级的坑与萝卜,都是那么相配,天赐良缘。为什么每一个单词都有QKV信息,道理也简单,每一个词都可能在“求偶”,追求别人,也都可能被追求。追与被追发现非常谈得来的时候, QK相配,注意力权重大,于是结合,就是把身子(Value)献上;然后生子 ,就是创造下一层的 Token 表示。
有意思的是,上下文窗口里的 Tokens 是群婚制,不是一夫一妻制生孩子。一个 Token 与周围所有 tokens 谈恋爱 q k(i)点积,其他tokens(包括该 Token自己)都与该Token 有一腿,但关系强度不同(谈吹的tokens,权重为0)。该 Token与这种多边关系“杂交”生出的孩子是怎样的呢?加权求和。就是说孩子继承了母亲的很多特征,同时也继承了周围众父亲的特征。谁的特征在子代最彰显或较弱,完全决定于交情的深浅、关系的强度。每个token都是这样推陈出新,一代一代传下去。最后发现,这种群婚制对于信息压缩(理解、解析、生成)特别有效。真有意思。
QKV这些概念显然是从数据库技术拿来的,对于软件界一点都不陌生。但当年理解注意力机制的时候,还是遭遇很大的困惑,想不明白 语言解析与数据库啥关系。当时觉得扯上数据库,最多就是查词典相关,而查词典早就在词嵌入(embedding)编码阶段就完成了。自注意力的核心不是静态的查词典,而是动态的上下文理解。 当年因为想不明白为什么要套用数据库的信息查询和匹配的说法,只能把注意力机制泛泛理解为关注上下文。这也没错,但看不到 insights,也理解不了为什么这东西这么厉害,成就了大模型的超人语言能力。
经过很久终于豁然开朗:原来我们做了一辈子的 subcat-based bottom up parsing,跟 attention+feedforward 做的完全是一回事,一个原理,殊途同归(见下图:这是我在大模型GPT3 playground刚冒头时候做的一个对比,illustrate 当年意识到两条路线殊途同归时候的震撼)。只不过我们符号文法处理完全打不过它。一个是颗粒度没法比,人家的家底是几百上千维度的实数向量,加上各种投射以及非线性转换,我们才有最多几千个强行结构化的符号特征(one hot features)。另外,人家的泛化可以从文字解析,推广到任何模态信号的压缩和理解,我们的文法不具有任何的模态可推广性、可移植性,最多只是跨过了语言壁垒,文法追求可以适用于任何语言的 universal grammar。
我的主流弄潮儿的一位老友吕正东说:
在attention 的发展史上(so far),我看到多次颠覆式的创新, 从最早的 seq2seq (Google Brain) → auto alignment (Mila) → Tranformer (Google again) → pre-trained language model (?) → LLM (openAI )→ ...
我苦笑道:你是真正业内前沿,一路发展轨迹自然一目了然。你可能想象不出我们这些符号出身的人,突然被逼去研读这种经典论文(Attention is all you need)时候的困境。因为缺乏历史演进的知识垫底,一下子就被这些概念砸晕了。不知道经过多少次嘀咕、查阅,才慢慢明白:天下大势,冥冥之中,有万变不离其宗。原来,我们在符号文法摸索了一辈子的被证明最有效的谓词Subcat框架和自底而上的结构解析算法,底层逻辑与 transformer 及其自注意力机制不谋而合。 虽然符号技术过时了,也确实笨拙,除了符号逻辑的透明性外,没有多少其他长处,但现在理解深度学习大模型的原理和框架,由此骤然变得亲切了很多。只不过现在眼界开阔了,与信息论和计算理论更加靠近。(计算)语言学家一辈子的追求就是跨语言,而AI的追求更高一筹,是跨模态,无论音频、视频还是文字。
【后记】
大模型经典论文 Attention is all you need 不好读也有时代的原因,它提出的框架是直接应对RNN的短板和机器翻译的需求和验证。这就让它的核心部分被这些因素干扰而模糊了。框架看上去太复杂,encoder decoder 两大部分,还必须在encoder 到 decoder 之间做一种交叉对齐 ,但其实内核组块没有任何区别。这些对于理解 transformer 的通用性和原理,都是“噪音”。
transformer 主体简单极了,不过就是多层感知器,在每一层加了个自注意力而已。 到了GPT 发现 ntp(下一词预测)是打开通用智能的钥匙的时候,从框架角度就更简单了,decoder-only 足矣(说明:decoder 并不是名字所说的那样只做解码,它一样做分析和理解,这是由其核心组块决定的)。
老友看了我的transformer博客解说(Transformer 和注意力机制简介),说你这个太简陋了,连篇幅都比原论文短。
原文中有一些细节舍去了。 作者: 立委 (*) 日期: 2025/02/21 12:23:37 包括: 原架构是两大块:encoder + decoder 但实际上这两大块里面的组快都是完全一样的。而且,主流已经抛弃了 encoder,GPT 采用的就是 decoder-only 架构。 另外,位置编码是序列的一个因素,与处理过程解耦以后,位置编码有一套说法,怕干扰了主旨的理解,就点到为止了。 再有就是一些数学公式和实现细节,包括归一化、残差等。舍弃不影响对于 “注意力+神经网络” 这个核心主旨的理解。
所以通篇实际上就是一个理解重点:自注意力机制怎么work的,因为多层感知器是个 given,不是 transformer 的创新。
顺便一提,所谓 自注意力,国人喜欢顾名思义,以为是自己注意自己,感觉很蹊跷。其实自注意力是针对跨序列的交叉注意力而言的,自注意力是在同一层序列的上下文中注意所有的相关tokens(确实也包括它自己),是单层序列之内的事儿,这个“自”回指的不是token自己,而是token自己所在的那个窗口序列。交叉注意力说的是跨序列层的注意力,例如传统的神经机器翻译中,目标语序列针对源语序列的注意力。到了 GPT 的通用生成式AI(gen-AI)主流,没有跨序列的必要了,因为所有的 input 序列 和 output 序列,都被自回归“挤压”到同一层的序列去了。仅有的 output 就是 next token,其余一切tokens都连成一串了作为input的条件:everything is ntp。
以“中译英:我爱你” 的机器翻译为例,GPT自回归生成的序列是这样的:
Input Output 中译英:我爱你 I 中译英:我爱你 I love 中译英:我爱你 I love you
屠可伟老师的研究进一步验证了parsing与transfromer的可对齐性:
李老师,关于transformer自注意力机制和语言学的关系,我们前年有个工作,之前也和您提过:我们发现transformer自注意力机制与概率依存句法模型的近似推理计算图极为相似,局部几乎一模一样: Probabilistic Transformer: A Probabilistic Dependency Model for Contextual Word Representation
白硕老师说:
我对这个问题的观点: 1、语言处理的符号主义本身并没有一个基于第一性原理的强有力理论体系,最牛的乔姆斯基也没做到。 2、语言处理的完整方案必须包含一个词法、句法、语义、语用、常识、事理、逻辑各方面“角力”因素能够以可以“统一度量衡”的表达-竞争-筛选机制,这点,目前只有多层神经网络可以做到,虽然只是“概率性的”。 3、语言处理和知识处理的共性是滑动上下文内的key-value填充,也就是我们俗称的“哪些萝卜填哪些坑”,这个共性的需求,被一个共性的机制——注意力机制在很大程度上解决了。再单独、分别做语言层面的填充机制(什么成分做什么角色)或是知识层面的填充机制(什么槽位取什么值)已经失去意义。要么不做,要么统一做而且比注意力机制做得更好。没有其他的出路。
白老师所言极是。白老师说的“统一的度量衡”就是自注意力。
【相关】