四月中旬的北京,中关村理想国际大厦十七层。
    顾屿靠在办公椅上,手里端著一杯已经凉透的美式咖啡。
    墙上的巨大液晶屏幕正显示著加密视频会议的画面。
    画面那头是远在四川雅安的九天ai实验室会议室。
    屏幕里的几个人看起来状態相当惨烈。
    安德烈的金色捲髮已经成了鸡窝,眼眶底下掛著两个巨大的黑眼圈。
    他正用俄语和英语夹杂著小声嘟囔什么。
    旁边的楼天城把脸贴在桌面上,整个人活脱脱是个被抽乾了灵魂的空壳。
    只有任少卿还算精神,手里捏著一罐红牛,正对著屏幕这头的顾屿做本周的项目匯报。
    “顾总,我们在传统的机器翻译任务里加入了您之前提过的注意力机制。实验数据出来了,bleu分数確实有显著提升。模型终於不再像以前那样,把长句子硬塞进一个固定长度的向量里了。”
    顾屿点了点头,这都在他的预料之中。这证明了注意力机制这个东西在理论上是走得通的。
    “但现在我们卡在了一个更底层的架构问题上。”任少卿放下红牛,脸上的表情有些无奈。
    楼天城听到这里,从桌面上抬起头,顶著乱糟糟的头髮开始大倒苦水。
    “简直没法忍受了。我们现在用的底层架构还是rnn循环神经网络。这破玩意儿的计算逻辑是串行的。这就好比食堂打饭,后面的人必须等前面的人打完才能往前走一步。”
    楼天城越说越气愤,直接拍了拍面前的桌子。
    “咱们雅安基地现在配了最顶级的显卡。gpu这种东西天生就是为了做大规模並行矩阵运算的。结果rnn非要让它们排队买票。这简直是对算力的极大侮辱。硬体的性能连十分之一都没榨出来。”
    顾屿喝了一口咖啡,没急著插话。他知道这帮人已经摸到了歷史的边界。
    这时候,全世界的顶尖ai研究员都被困在这个死胡同里。
    大家都知道rnn效率低,但所有人都觉得处理语言这种有先后顺序的东西,必须得用串行的rnn或者lstm。
    “所以你们的想法呢?”顾屿靠在椅背上,看著屏幕那头的三大金刚。
    任少卿嘆了口气:“我们在尝试优化rnn的內部结构,看看能不能勉强实现部分並行。安德烈最近算矩阵算得快吐了。”
    “既然rnn是个阻碍並行的毒瘤,为什么不直接把它整个切掉?”
    顾屿拋出了这个在当时看来极其离经叛道的理论。
    任少卿愣住了。安德烈直接站了起来,连连摇头。
    “这不可能的顾。没有rnn的循环结构,模型怎么知道这句话里哪个词在前面,哪个词在后面?语言是有顺序的,直接切掉它,输入进去的东西就变成了一盘散沙。”
    顾屿笑了笑。这就是他作为“穿越者”带来的认知差距。
    他不需要自己去推导那些复杂的数学公式,他只需要在这些绝顶天才走上岔路口的时候,伸手把他们推上那条名为未来的高速公路。
    “谁规定注意力只能用来让输出端去看输入端?”顾屿敲了敲桌面,拋出了那个价值千金的灵魂拷问。
    “一个句子里面的每个词,为什么不能对这句话里的其他所有词施加注意力?让序列內部自己看自己。”
    会议室里安静得落针可闻。
    安德烈的眼睛瞪大,此刻只觉像遭了高压电击。
    顾屿提出的这个概念,就是后世大模型时代的基石。
    自注意力机制。
    为了让这几个天才彻底打通任督二脉,顾屿开始用最通俗的语言描绘那个恐怖的数学模型。
    “你们把每一个词想像成带著三个不同身份去参加相亲大会。我们管这三个身份叫q、k和v。”
    顾屿竖起三根手指。
    这其实是一个非常直白的查询匹配逻辑。
    q代表query,也就是查询。相当於你带著一个问题去图书馆找书。
    k代表key,也就是键值。相当於书架上每一本书的標籤和简介。
    v代表value,也就是內容。相当於那本书里真正写著的知识。
    “当一个词想要理解自己在句子中的含义时,它就拿著自己的q,去和句子里所有其他词的k进行匹配打分。谁的分数高,就说明谁跟它关係最紧密。然后把高分对应的v提取出来,融合到自己身上。”
    顾屿看著屏幕那头目瞪口呆的三人,做出了最终的总结陈词。
    “不需要排队。所有的词在同一时间,拿著自己的q去和別人的k进行矩阵相乘。这完全是一个可以用gpu暴力加速的並行矩阵运算。”
    安德烈根本没等顾屿把话说完。他直接抄起一支红色的马克笔,转身扑向了背后的白板。
    笔尖在白板上疯狂摩擦,发出一连串刺耳的吱吱声。一串串极其复杂的矩阵变换公式被他写了出来。
    “对。对。矩阵乘法。q的转置乘以k。太优美了。这就解决了並行的计算瓶颈。”
    安德烈一边写一边用俄语大声感嘆。
    但他写著写著,动作突然停住了。
    “等等,有个数学上的漏洞。”安德烈盯著白板上的一个点积运算式,
    “如果序列变长,维度变大。q和k的点积结果会变得极其庞大。这丟进softmax函数里,会导致梯度直接消失。模型根本无法训练。”
    任少卿也看出了这个问题,脸色变得有些凝重。
    这就是新架构在理论推导时最容易死掉的环节。
    顾屿坐在北京的办公室里,极其隨意地掸了掸袖口。
    “那就给它套个韁绳。”顾屿语气平缓,循循善诱,
    “安德烈,既然是向量维度变大导致点积结果的方差变大,作为一个数学家,你通常用什么工具把它的分布重新拉回標准差为1的平滑状態?”
    白板前的安德烈猛地一僵。
    他脑子里灵光乍现,几乎是咆哮著用俄语喊了出来:
    “除以方差的平方根!对!除以维度的平方根!”
    他赶紧用袖子擦掉一半的算式,重新把那个代表缩放因子的分母加了进去。
    他快速心算了几十秒,然后扔掉马克笔,转头看著屏幕里的顾屿,眼神里全是难以置信的震撼。
    “平滑了!数据分布完美平滑了!”安德烈双眼通红地盯著屏幕,
    “顾,你简直是个魔鬼。”
    顾屿当然不会说这是前世无数个禿头算法工程师在论文里写明的现成答案。
    他只是耸了耸肩,保持著那份高深莫测。
    “所以,rnn可以扔进歷史的垃圾堆了吗?”顾屿看向楼天城。
    楼天城这时候已经完全从刚才的萎靡中復活了。
    “绝对可以。但这套玩意的计算复杂度是跟著序列长度的平方增长的。序列越长,显存占用越恐怖。”
    楼天城摸了摸下巴,“要是处理超长文本,一样会爆显存。”
    “算力从来不是你要操心的问题,楼教主。”顾屿非常財大气粗地打断了他,
    “不够用我就让採购部继续去英伟达拿货。五百张不够就买一千张,做成大规模数据並行。”
    说到这里,顾屿语气转为平淡,拋出了一个后世极其经典的工程黑科技:
    “至於单卡显存被打爆的问题,楼教主,你听说过梯度检查点(gradient checkpointing)这种用计算时间换显存空间的底层框架优化思路吗?”
    楼天城愣住了,隨后双眼爆发出狂热的光芒。
    原本萎靡的神经被这句话彻底点燃,他脑子里已经开始飞速构思底层的cuda加速代码和內存管理逻辑了。
    任少卿看著屏幕里的年轻老板,心里涌起难以名状的敬畏。
    从组建九天实验室到现在,他们的研发人员一直在被这个大学生牵著鼻子走。
    最可怕的是,顾屿从来不写一行代码,也不参与具体的公式推导。
    但他就像一个开了全图外掛的先知。每当团队在无数条技术分支前迷茫时,他总能精准地指出那条唯一正確的死胡同避险路线。
    “顾总,那顺序问题怎么解决?不要rnn了,词的先后位置信息用什么填补?”
    任少卿问出了最后一个关键漏洞。
    顾屿知道他们有能力自己解决这个问题,於是乾脆把皮球踢了回去。
    “这就是我要留给你们的课后作业了。把位置信息变成一个绝对的数学坐標,用正弦或者余弦函数强行注入到词向量里。这个工作量不大,安德烈搞得定。”
    顾屿停顿了一下,继续拋出诱饵。
    “另外,刚才的qkv计算只看了一个维度。一个人的相亲条件可不止一面。你们可以试试加入多头机制。把qkv拆分成多个更小的空间,让不同的头去捕捉不同的语义关係。最后再拼接起来。”
    多头自注意力机制。这已经是最终架构的核心拼图了。
    安德烈赶紧把顾屿的话全部记在白板的角落里。
    “顾总,如果您刚才的这些构想全部能在工程上验证通过。”任少卿调匀了呼吸,试图压抑住声音里的兴奋,
    “这就彻底掀翻桌子重塑深度学习的底层框架。”
    “距离把这套庞大的东西组合成一个完整的端到端模型,就只差最后一步的工程代码实现了。”
    任少卿非常清楚手里正在做的东西到底有多可怕。
    眼里满是对未知宝藏的狂热。
    顾屿悠哉地端起咖啡杯,把剩下的冷咖啡一口气喝完。
    他看著屏幕那头干劲十足的顶尖大脑,脸上露出一副精明的资本家笑容。
    “既然距离完工只差最后一步了,那咱们就提前聊聊最实际的问题。”
    顾屿十指交叉垫在下巴下面,语气理直气壮。
    “我砸了这么多钱,又死了这么多脑细胞陪你们想方向排雷。”
    “等到这套架构定型,去发国际顶会论文的时候。”
    顾屿笑得人畜无害。
    “你们三个,去爭你们的共同一作。”
    “最后通讯作者的位置,留给我。这应该很合理吧?”