他的研究目标很明确——
设计一种全新的神经网络架构,这种架构要能够保留Transformer的并行计算能力和全局建模能力,同时大幅降低计算复杂度。
具体来说,就是要把Transformer的O(N²·d)复杂度,降低到O(N·d·log N)甚至更低。
要实现这个目标,就必须对self-attention机制进行根本性的改造。
传统的self-attention,是对序列中的每一个token,都计算它和其他所有token之间的注意力权重。
这就导致了N²的复杂度。
那么,有没有可能,不计算所有token之间的注意力,而是只计算一部分?
或者说,能不能用某种更高效的方式,来近似self-attention的效果?
陈林的脑海中,开始浮现出各种各样的想法。
线性attention、局部attention、稀疏attention......
这些都是业界已经提出过的方案。
但它们要么效果不够好,要么实现起来太复杂。
陈林需要找到一种更优雅、更高效的方法。
想到这里,他睁开眼睛,拿起笔,开始在纸上写写画画。
【小小数学家】的能力,悄然启动。
陈林的思维,仿佛进入了一种奇妙的状态。
他能感觉到,脑海中的想法,正在以一种前所未有的速度涌现出来。
各种数学工具,各种理论框架,仿佛都在自动组合、排列、优化......
陈林的笔,在纸上飞快地移动着。
一行行公式,从笔尖流淌出来。
首先,他从Fourier变换的角度,重新审视了self-attention机制。
Fourier变换可以将时域信号转换到频域,这样就能用频域的乘法,来代替时域的卷积。
那么,self-attention能不能也用类似的方法,进行加速呢?
陈林继续推导。
他发现,如果把self-attention的计算过程,用矩阵的形式表达出来,然后对矩阵进行特征分解......
诶,有戏!
陈林的眼睛越来越亮。
他发现,通过引入一种特殊的核函数,可以把self-attention的计算,转化为一种线性形式。
而这种线性形式,可以通过递推的方式进行计算,从而将复杂度降低到O(N·d)!
不过,这种方法也有代价——
它会损失一部分全局建模能力。
怎么办?
陈林继续思考。
他忽然想到,可以引入一种分层的注意力机制。
在局部范围内,使用传统的self-attention,保证精度。
在全局范围内,使用线性attention,降低复杂度。
然后,通过一种巧妙的信息融合机制,把两者结合起来......
陈林的笔越写越快。
公式越来越复杂。
他完全沉浸在了数学推导的世界里,完全忘记了时间的流逝。
不知不觉中,两个多小时过去了。
当陈林终于停下笔的时候,他面前的A4纸,已经写满了密密麻麻的公式。
整整十几页纸。
陈林靠在椅背上,长长地舒了一口气。
他能感觉到,脑子里有些昏昏沉沉的,精神有些疲惫。
不过,这种疲惫感,远没有达到“睡死“的程度。
陈林低头,看着面前那十几页纸上的公式,嘴角勾起一丝满意的笑容。
虽然还只是初步的框架,但他已经找到了方向。