RNN 和 Transformer 复杂度比较

发布时间:2024年01月09日

这里假设BatchSize为 1,就是单样本的情况。

原始 RNN 块:

(1)单步计算 H,包含两个矩阵向量乘法,和一个激活,复杂度HidSize2

(2)一共有SeqLen步,所以整体复杂度SeqLen * HidSize2

LSTM 块:

(1)单步计算 F I C_hat O,包含八个矩阵向量乘法,和四个激活:HidSize2

(2)单步计算 C,包含两个逐元素乘法,和一个加法;HidSize2

(3)单步计算 H,包含一个逐元素乘法和一个激活;HidSize2

(4)一共有SeqLen步,所以整体复杂度SeqLen * HidSize2

TF 块:

(1)计算 QKV,包含三个矩阵乘法,SeqLen * HidSize2

(2)计算注意力矩阵,包含 HeadCount 个 矩阵乘法,HeadCount * HeadSize * SeqLen2

由于HidSize = HeadCount * HeadSize,实际上是HidSize * SeqLen2

(3)Softmax 激活,HeadCount * SeqLen2 << HidSize * SeqLen2

(4)计算 O,包含HeadCount个矩阵乘法,HeadCount * HeadSize * SeqLen2 = HidSize * SeqLen2

(5)计算输出向量,包含一个矩阵乘法SeqLen * HidSize2

(6)FFN ,两个矩阵乘法,SeqLen * HidSize2

(6)整体复杂度,SeqLen * HidSize2 + HidSize * SeqLen2

HidSize是每层之间传输的嵌入向量的维度,大概几百维。

聊天的时候SeqLen大概几十到一百,明显低于HidSize,这个时候二者是差不多的。

长文本翻译的时候SeqLen是几千,那么 RNN 明显比 Transformer 快。

等于说,Transformer 的高复杂度缺点被并行掩盖了。在单机单卡这种不能并行的环境,效率远不如 RNN。这就是很多人一定要搞线性注意力的原因。

文章来源:https://blog.csdn.net/wizardforcel/article/details/135476629
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。