【转载】Transformer vs CNN vs RNN 时间复杂度比较

内容本身来自于《Attention Is All You Need》原论文
以下翻译转载自https://www.cnblogs.com/nxf-rabbit75/p/11945195.html

一、问题限定及结论:

假设输入序列长度为n,每个元素的维度为𝑑:{𝑥1,…,𝑥𝑛},输出序列长度也为n,每个元素的维度也是d:{𝑦1,…,𝑦𝑛},从每层的计算复杂度、并行的操作数量、学习距离长度三个方面比较Transformer、CNN、RNN三个特征提取器:
在这里插入图片描述

二、分析

1.每层的计算复杂度:
  考虑到n个key和n个query两两点乘,因此self-attention每层计算复杂度为𝑂(𝑛2∗𝑑)
  考虑到矩阵(维度为𝑛∗𝑛)和输入向量相乘,因此RNN每层计算复杂度为𝑂(𝑛∗𝑑2)
  对于k个卷积核经过n次一维卷积,因此CNN每层计算复杂度为𝑂(𝑘∗𝑛∗𝑑2),如果考虑深度可分离卷积,则计算复杂度下降为𝑂(𝑘∗𝑛∗𝑑+𝑛∗𝑑2)
因此:

当𝑛<𝑑时,self attention要比RNN和CNN快;

当𝑛>𝑑时,可以使用受限self attention,即:计算attention时仅考虑每个输出位置附近窗口的r个输入。这将带来两个效果:每层计算复杂度降为𝑂(𝑟∗𝑛∗𝑑)
  最长学习距离降低为r,因此需要执行𝑂(𝑛/𝑟)次才能覆盖到所有输入。

2.并行操作数量:
可以通过必须串行的操作数量来描述:

对于self-attention,CNN,其串行操作数量为O(1),并行度最大;

对于RNN,其串行操作数量为O(n),较难并行化。

3.最长计算路径:
覆盖所有输入的操作的数量

对于self-attention,最长计算路径为O(1);对于self-attention stricted,最长计算路径为O(n/r);

对于常规卷积,则需要O(n/k)个卷积才能覆盖所有的输入;对于空洞卷积,则需要𝑂(𝑙𝑜𝑔𝑘𝑛)才能覆盖所有的输入;

对于RNN,最长计算路径为O(n)

4.作为额外收益,self-attention可以产生可解释性的模型:
通过检查模型中的注意力分布,可以展示与句子语法和语义结构相关的信息。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值