这篇论文是关于Transformer中的稀疏激活,在训练好的Transformers上,激活是稀疏的。
文中通过实验表明,这种稀疏性是普遍的:
-
视觉和NLP任务
-
训练和eval
-
不同的规模
-
不同的配置
-
Transformer中的不同层
这些条件下都是稀疏的。
模型越大,从非零元素占比这个指标上看,越稀疏。
这种稀疏性的来源是什么?
文中提了几个假设并予以否定。
-
稀疏性来源于标签?将训练数据集的标签的一部分(p%)替换成随机标签,然后训练。得出的结果是不论p的大小,训练出来的Transformer仍然是稀疏激活的。
-
稀疏性来源于数据?将图片训练的图片替换成随机像素图,结果是仍然稀疏激活。
-
稀疏性是因为参数数量多于掌握规律所需要的参数量?使用足够多的随机像素图和随机标签训练,结果是仍然稀疏激活。
-
稀疏性来源于动态训练?这个我没怎么看懂,好像是跟梯度下降有关,这样的训练方法使激活趋向于稀疏。文中应该是给出了一定的证明。
根据这种稀疏性,文中提出了一种Top-k Transformer。和普通Transformer的区别是,只取数值最大的前k个激活。文中通过实验发现,使用Top-k的方法,反而有一定的好处。
-
效率提升(减少FLOP)。其中又分为两部分,一个是第二层MLP的效率提升,稀疏的向量跟矩阵乘,只要用非零的乘就行了;一个使第一层MLP的提升,第一层公式是 σ ( K T x ) \sigma(K^Tx) σ(KTx),结果是稀疏的, σ \sigma σ是ReLU激活函数, K T K^T KT的行向量记为 k 1 , . . . , k d f f k_1,...,k_{d_{ff}} k1,...,kdff,我们只需要找和x最接近的k(Top-k的k)个行向量就行了,这是一个nearest neighbor search(NNS)问题或者叫maximum inner product search problem。存在一些近似算法可以达到次线性(相对于 d f f d_{ff} dff)的时间复杂度。这些方法还不一定带来wall clock时间的减少,不过提到了一个论文实现可以减少wall clock时间。
-
更好的稳健性和置信度校准。更稳健了是说对噪音的抗性增强;更好的置信度校准是说,不容易过于自信,比如有个0.8像驴、0.2像骡子的图片,不会很自信地说99%是驴。
文章主要介绍了这种稀疏性,但是个人认为没有给出如何很好地利用这种稀疏性的方法。