四月中旬的北京,中关村理想国际大厦十七层。
顾屿靠在办公椅上,手里端著一杯已经凉透的美式咖啡。
墙上的巨大液晶屏幕正显示著加密视频会议的画面。
画面那头是远在四川雅安的九天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函数里,会导致梯度直接消失。模型根本无法训练。”