“transformer”
“各位院士,各位教授。”陈启明的声音不大,却清晰地回响在每个人的耳边,“欢迎来到大语言模型的新世界。我们首先要学习的,不是算法,不是优化,而是这个模型的‘基本骨架’。”
他开始在白板上书写。
“它的核心,不是cNN,也不是RNN,而是一种全新的东西,叫做‘自注意力机制(Self-Attention)’……”
一群平均年龄超过六十岁、站在龙国科技金字塔顶端的学者们,此刻像一群小学生一样,屏息凝神,围在一个高中生的身边,聆听着一场足以开启新时代的讲座。
他们的面前,摆着厚厚的笔记本,上面画满了各种他们自己都看不懂的失败模型架构。而现在,这些耗费了无数心血的草图,在少年口中那句“全新的东西”面前,显得如此苍白无力。
“自注意力机制……”
严树隆院士喃喃自语,他身旁一位主攻计算机视觉的张院士皱起了眉头,忍不住发问:“陈同学,这个‘注意力机制’我们了解一些,在图像识别里,是让模型关注图片的关键区域。但你说的‘自’注意力,还是用在自然语言处理上……这……这怎么理解?”
这是所有人的疑问。
他们的大脑,还停留在“处理序列问题就用RNN(循环神经网络),处理图像问题就用cNN(卷积神经网络)”的经典教科书时代。他们尝试过魔改RNN,让它的记忆单元更长,但模型变得臃肿不堪,训练起来如同老牛拉车。他们甚至异想天开地尝试用cNN来捕捉词语之间的局部关系,结果造出来的模型只会说胡话,逻辑混乱得像个醉汉。
他们一直在旧的框架里打补丁,却从未想过,或许,整个地基都是错的。
陈启明没有直接回答,而是拿起笔,在白板上写下了一个简单的句子:
“机器人举起了锤子,因为它很重。”
他转过身,看向众人,提问:“请问,这句话里的‘它’,指代的是什么?”
“锤子。”严树隆不假思索地回答。
“那如果句子是‘机器人没有举起锤子,因为它很重’呢?”陈启明又问。
“……指的是机器人。”另一位教授回答,有些不确定。
“完全正确。”陈启明点点头,脸上露出一丝微笑,“各位前辈,你们的大脑在几分之一秒内就完成了这个复杂的指代消歧工作。你们是怎么做到的?你们在读到‘它’这个字的时候,会不自觉地回顾整句话,然后根据上下文的逻辑,给‘机器人’和‘锤子’这两个词,分配不同的‘关注度’权重。在第一句话里,‘锤子’的权重最高;在第二句话里,‘机器人’的权重最高。”
他用笔在“它”和“锤子”、“机器人”之间画上了不同粗细的连线。
“自注意力机制,就是让机器学会做这件事。它在处理序列中的任何一个单词时,都能同时‘看到’序列中所有其他的单词,并计算出每一个单词对于当前单词的重要性,也就是‘注意力得分’。得分越高的,关系越密切。”
一番话,如同一道惊雷,在众人的脑海中炸响!
严树隆院士的眼睛猛地瞪圆,他一拍大腿,声音都有些颤抖:“我明白了!我明白了!RNN是一步一步地看,像个得了健忘症的老头,看到后面就忘了前面!而你这个自注意力机制,是让模型长了一双‘全景眼’,它在看第一个字的时候,就已经把最后一个字是什么都纳入了考量!这不是序列处理,这是……这是全局并行处理!”
“太妙了!这简直是降维打击!”那位张院士也激动得满脸通红,“我们之前所有的尝试,都是在教一个瞎子摸象,摸到腿就说大象是柱子,摸到鼻子就说大象是管子。而你,直接开了一盏探照灯,把整头大象照得清清楚楚!”
他们都是各自领域的顶尖天才,一点就透。陈启明这个简单到极致的比喻,瞬间捅破了那层最关键的窗户纸。
“没错。”陈启明继续在白板上画着,“为了实现这一点,我们需要为每个单词生成三个向量,分别是query(查询)、Key(键)和Value(值)。”
q、K、V三个字母出现在白板上,对这群科学家来说,这像是打开了新世界的大门。
“大家可以把它理解成一个信息检索系统。当前这个单词是‘查询者’(query),它要去问句子里的所有单词(作为Key),‘嘿,你跟我有多相关?’。通过计算query和每个Key的点积,就能得到一个‘相关度’,也就是注意力分数。然后,我们用这个分数,去对所有单词的‘真实信息’(Value)进行加权求和。这样,模型就得到了一个融合了全局上下文信息的新表示。”
逻辑清晰,简单粗暴,又充满了数学上的美感。
整个会议室鸦雀无声,只剩下粗重的呼吸声。他们看着白板上那简洁的qKV模型图,感觉自己过去几个月熬夜画出的那些复杂到堪比迷宫的架构图,简直就是一堆工业垃圾。
“我们……我们简直是在用算盘挑战计算机……”一位老教授捂着脸,发出一声痛苦的呻吟。
严树隆更是哭笑不得,他指着墙角一堆报废的硬盘,对陈启明“诉苦”:“启明同学,你是不知道啊!我们为了解决RNN的梯度消失问题,搞了个十八层的嵌套记忆网络,结果模型跑了三天,显卡烧了两块,最后生成的句子是‘你好你好你好你好……’,它复读机了!”
全场响起一阵善意的哄笑,冲淡了刚才的尴尬。
陈启明也笑了:“严院士,你们的方向没错,只是工具选错了。现在,我们有了正确的工具。”
他后退一步,在白板的最顶端,用马克笔重重地写下了这个即将改变世界的词:
“transformer”
“以自注意力机制为核心,再辅以多头注意力(multi-head Attention)让模型能从不同角度理解上下文,加上位置编码(positional Encoding)告诉模型单词的顺序。把这些模块堆叠起来,就构成了transformer的基本骨架。”
“这就是大语言模型的盘古之躯。”
说完,他看了一眼墙上的时钟,然后走向会议室的主控电脑。
“理论说完了,我给大家演示一下核心代码。不然,今天可能就讲不完了。”
在所有人惊愕的目光中,陈启明坐在了电脑前,十指在键盘上化作了一片幻影。
没有思考,没有停顿,一行行简洁而高效的python代码,如同溪流般在巨大的投影幕布上倾泻而出。
class SelfAttention(nn.module):
……
他甚至用上了爱因斯坦求和约定(einsum)这种最高效、也最晦涩的写法,来处理复杂的张量运算。
在场的博士生和研究员们,看得眼珠子都快掉出来了。他们写一个功能模块,需要反复查阅数学资料和文档,调试半天。而陈启明,像是在写一篇白话文,信手拈来,而且代码优雅得像一首诗。
更离谱的是,陈启明的手速极快,快到出现残影。
不到十分钟。
一个完整的、可运行的、带有掩码功能的多头自注意力模块,赫然出现在屏幕上。
陈启明敲下最后一个回车,从椅子上站起来,拍了拍手。
“好了,这就是大语言模型的‘发动机’。各位前辈,接下来的‘造车’工作,就交给你们了。”
整个会议室,死一般的寂静。
良久。
请大家记得我们的网站:品书中文(m.pinshuzw.com)神系统:从高三开始引领科技革命更新速度全网最快。