分享
SqueezeBERT
输入“/”快速插入内容
SqueezeBERT
飞书用户7782
飞书用户5993
2024年7月9日修改
•
论文:SqueezeBERT: What can computer vision teach NLP about efficient neural networks?
•
地址:
https://arxiv.org/abs/2006.11316
•
源码:
https://github.com/huggingface/transformers/
核心思想:把全连接全部替换为卷积的 BERT。
背景动机
依然是对 BERT 系列模型架构的优化,出发点是提升运行速度。只不过本文是基于对图像领域技术的迁移,比如 grouped convolutions。具体来说,就是将 Self-Attention 的一些操作替换成卷积。最终达到比 BERT-base 快 4.3 倍的效果。
已有 CV 迁移 NLP 的技术
主要代表是 MobileBERT,使用了两个技术:
•
Bottleneck layers(见下图)
•
High-information flow residual connections,主要是针对 feed-forward layer,Self-Attention 本来就有。
!
图片来自:
https://paperswithcode.com/method/bottleneck-residual-block
CV 还有哪些高效网络可以用到 NLP
•
Convolutions
•
Grouped convolutions
算法模型
Self-Attention + Convolutions
首先看一下 BERT 各个组件的耗时:
!
接下来就是要将 Encoder 中的 FC 替换为卷积。FC 如下:
p 是 position,也就是 sequence length,Cin 和 Cout 表示输入和输出的通道。用卷积替换:
k=1 时,两者是等价的。代码更加直观:
代码块
Python
# code from transformers
class FC(nn.Module):
def __init__(self, cin, cout, groups, act):
super().__init__()
self.conv1d = nn.Conv1d(
in_channels=cin, out_channels=cout, kernel_size=1, groups=groups)
self.act = ACT2FN[act]
def forward(self, x):
output = self.conv1d(x)
return self.act(output)