avatar

Wav2Vec2结构优化理论:对Transformer的优化总是有效吗?

Wav2Vec2.:语音领域的预训练模型中,笔者对wav2vec2.0进行了简单介绍,并在文章的结尾部分指出了该模型的一个落地限制因素——。在深度学习中,当我们描述一个模型“重”时,指的是它在进行训练与推断时计算量的庞大,那么问题来了——是什么导致了wav2vec2计算量如此庞大呢

想要搞清楚这个问题其实很简单,我们只需要计算wav2vec2在进行前向传播时各个组件的耗时即可。笔者在huggingface/transformer的wav2vec2上进行了一个简单测试,各组件的耗时为

显然,占比最多的组件为Encoder,即Transformer部分;其次是FeatureEncoder,即代码中的feature_extractor+feature_projection部分。由于Encoder部分的耗时是FeatureEncoder部分的4倍,且占整体耗时的80\%,因此要对wav2vec2进行结构优化,自然会想到先从Transformer入手。首先我们先回顾一下Transformer的结构

可以看到,理论上Transformer中的计算量主要集中在Multi-Head Self-Attention(SA)Feed Forward Network(FFN)中。而目前对于Transformer的优化工作,绝大部分都是针对SA进行优化,这样的优化思路是否能够用于对wav2vec2进行结构优化从而实现模型加速呢?

设n是序列长度,d是head_size(BERT中是64),h是head的数目,则hd就是我们常说的hidden_size,则根据苏剑林.科学空间中的线性Transformer应该不是你要等的那个模型一文中的评估计算量一节中的推算,SA总的计算量为$4nh^{2}d^{2}+2n^{2}hd$,FFN总的计算量是$8nh^{2}d^{2}$,当

时,SA的计算量大于FFN。

这意味着什么呢?苏神在文章中用base版的BERT举了个例子——当n>1536时,SA的计算量才大于FFN,在这之前,都是FFN占主导

而对于wav2vec2,它的head数量为16,理论上当序列长度$n>2\times 16\times 64=2048$时,SA的耗时才会明显高于FFN。

实际是否符合理论呢?对于采样率为16kHz的音频,10s的音频通过FeatureEncoder后被转成长度为518的序列,53s的音频则被转为长度为2633的序列,下面两张图分别为wav2vec2的Transformer层在10s和53s语音上的实测耗时

可以看到,实际是符合理论推断的。因此,企图通过优化Attention来对wav2vec2进行结构化优化的思路仅适用于几十秒甚至更长时间的语音场景

Author: Qin Yue
Link: https://qinyuenlp.com/article/81032307407e/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.

Comment