“大家可以把它理解成一个信息检索系统。当前这个单词是‘查询者’(query),它要去问句子里的所有单词(作为Key),‘嘿,你跟我有多相关?’。通过计算query和每个Key的点积,就能得到一个‘相关度’,也就是注意力分数。然后,我们用这个分数,去对所有单词的‘真实信息’(Vae)进行加权求和。这样,模型就得到了一个融合了全局上下文信息的新表示。”
逻辑清晰,简单粗暴,又充满了数学上的美感。
整个会议室鸦雀无声,只剩下粗重的呼吸声。他们看着白板上那简洁的qKV模型图,感觉自己过去几个月熬夜画出的那些复杂到堪比迷宫的架构图,简直就是一堆工业垃圾。
“我们……我们简直是在用算盘挑战计算机……”一位老教授捂着脸,发出一声痛苦的呻吟。
严树隆更是哭笑不得,他指着墙角一堆报废的硬盘,对陈启明“诉苦”:“启明同学,你是不知道啊!我们为了解决RNN的梯度消失问题,搞了个十八层的嵌套记忆网络,结果模型跑了三天,显卡烧了两块,最后生成的句子是‘你好你好你好你好……’,它复读机了!”
全场响起一阵善意的哄笑,冲淡了刚才的尴尬。
陈启明也笑了:“严院士,你们的方向没错,只是工具选错了。现在,我们有了正确的工具。”
他后退一步,在白板的最顶端,用马克笔重重地写下了这个即将改变世界的词:
“transforr”
“以自注意力机制为核心,再辅以多头注意力(ulti-head Attention)让模型能从不同角度理解上下文,加上位置编码(positional Eng)告诉模型单词的顺序。把这些模块堆叠起来,就构成了transforr的基本骨架。”
“这就是大语言模型的盘古之躯。”
说完,他看了一眼墙上的时钟,然后走向会议室的主控电脑。
“理论说完了,我给大家演示一下核心代码。不然,今天可能就讲不完了。”
在所有人惊愕的目光中,陈启明坐在了电脑前,十指在键盘上化作了一片幻影。
没有思考,没有停顿,一行行简洁而高效的python代码,如同溪流般在巨大的投影幕布上倾泻而出。
css SelfAttention(nn.odule):
……
他甚至用上了爱因斯坦求和约定(esu)这种最高效、也最晦涩的写法,来处理复杂的张量运算。
在场的博士生和研究员们,看得眼珠子都快掉出来了。他们写一个功能模块,需要反复查阅数学资料和文档,调试半天。而陈启明,像是在写一篇白话文,信手拈来,而且代码优雅得像一首诗。
更离谱的是,陈启明的手速极快,快到出现残影。
不到十分钟。
一个完整的、可运行的、带有掩码功能的多头自注意力模块,赫然出现在屏幕上。
陈启明敲下最后一个回车,从椅子上站起来,拍了拍手。
“好了,这就是大语言模型的‘发动机’。各位前辈,接下来的‘造车’工作,就交给你们了。”
整个会议室,死一般的寂静。
良久。