序列模型与Transformer
前馈块(feed-forward block)
/ feed-FOR-werd blok /
前馈块,是每个 Transformer 层的后半段,是注意力那位沉默的搭档。在注意力让各词元彼此分享过信息之后,前馈块把每个词元单独拿出来——各自为政、不许左顾右盼——推它过一个小小的两层神经网络。如果说注意力是词元交谈的那部分,那么前馈块就是每个词元独自坐下、私下琢磨它刚才听到了什么的那部分。
它的形状简单却刻意:扩张、激活、收缩。词元的向量先被投影到大得多的宽度(常是四倍大),过一道非线性激活,让它能表示更精巧的函数,再投影回原来的尺寸。对每个位置施加的,都是同一个这样的小网络,因此它有时被称作「逐位置的」。看着朴素,这个块却占了模型全部参数中惊人的一大份——常在三分之二上下。
为何要在意这么个不起眼的部件?因为有证据表明,模型学到的大量知识,其实就住在这些前馈块里。注意力把信息搬来搬去;前馈层则似乎在存储与变换信息,多少像一大套学出来的查找规则。这也是为何混合专家设计恰恰瞄准这个块——它们用许多更小、更专精的网络替换掉一个大前馈网络,每个词元只激活其中少数几个,从而在不成比例地增加计算量的前提下,获得更多容量。
在一个宽度为 512 的层里,前馈块把每个词元扩张到 2048 维,施加一道激活,再挤回 512 维。同一个网络在每个词元上分别运行——在这个块内,第 5 个词元绝看不到第 6 个。
扩张、激活、收缩——分别施加于每个词元。
很容易以为注意力包揽了所有真活儿,但前馈块占了 Transformer 大多数参数,也似乎存着它学到的大部分知识。注意力负责路由信息;而大量信息实际被存放的地方,是前馈层。
又称
另见