APP下载

自动语音识别模型压缩算法综述

2024-01-15时小虎袁宇平吕贵林常志勇邹元君

吉林大学学报(理学版) 2024年1期
关键词:剪枝语音权重

时小虎, 袁宇平, 吕贵林, 常志勇, 邹元君

(1. 吉林大学 计算机科学与技术学院, 长春 130012; 2. 吉林大学 大数据和网络管理中心, 长春 130012;3. 中国第一汽车集团有限公司研发总院 智能网联开发院, 长春 130011; 4. 吉林大学 生物与农业工程学院, 长春 130022; 5. 长春中医药大学 医药信息学院, 长春 130117)

近年来, 随着人机智能交互的快速发展, 自动语音识别(automatic speech recognition, ASR)作为智能交互应用的一种关键技术, 已经在各种应用场景下凸显重要作用, 如在语音搜索、 语音助手、 会议记录、 智能服务、 机器人等方面均应用广泛. 随着深度学习的发展, 基于深度学习的方法表现出了比传统的如高斯混合模型、 隐Markov模型等方法更优越的性能. 但基于深度学习的语音识别网络, 特别是端到端模型, 通常有具有数百万甚至高达数十亿的参数, 占用大量内存, 在运行时也需要较大的计算资源, 仅适用于部署在专业服务器上. 例如, QuartzNet模型包含1.89×107的参数[1], Conformer Transducer语音识别模型包含1.188×108的参数[2], 基于Transformer的声学模型包含2.70×108以上的参数[3].

随着移动、 家居、 车载等智能设备的广泛使用, 产生了巨大的资源受限设备智能交互需求. 而语音作为人们日常交流最自然的方式, 在智能交互中扮演着重要角色. 通常语音识别模型在设备端的部署无需与服务器进行数据传输, 将模型部署在本地设备上具有更好的实时性、 安全性和隐私保护能力. 但由于资源受限设备的存储空间有限, 同时计算能力较弱, 无法将庞大的深度学习语音识别模型在资源受限的环境中实际部署. 如何在尽量保持性能的同时, 减小模型的大小、 降低运行延迟成为自动语音识别的重要课题. 本文对近年来关于自动语音识别模型的压缩算法进行总结和综述, 将其归纳为知识蒸馏、 模型量化、 网络剪枝、 矩阵分解、 参数共享以及组合模型几类方法, 并进行了系统综述, 为模型在不同条件和场景下的部署提供可选的解决方案.

1 基于知识蒸馏的方法

知识蒸馏, 主要通过模仿高延迟、 高精度的大型神经网络行为, 训练得到低延迟的轻量神经网络. 其中, 高延迟、 高精度的大型网络称为教师模型, 低延迟的轻量网络称为学生模型. 在知识蒸馏过程中, 教师模型的知识迁移到学生模型, 从而提高学生模型的性能, 以获得低延迟、 低内存、 高性能的学生模型. 一般的知识蒸馏过程如图1所示. 首先, 训练一个教师模型, 根据输入特征输出软标签的概率分布; 然后, 学生模型通过软标签模仿教师模型的行为. 软标签不仅包含了正确的类别分布, 也反应了类似类别之间的关系, 通常比独热编码的真实标签包含更丰富的信息. 真实标签的使用通常对训练有益, 因此可以将根据真实标签训练的语音识别损失与知识蒸馏损失相结合, 共同进行学生模型的优化.

图1 知识蒸馏的一般过程Fig.1 General process of knowledge distillation

传统的混合ASR系统需要首先进行帧的对齐, 然后再进行识别, 而目前的主流方法已经发展到端到端模型, 不再需要进行帧对齐, 而是直接将输入语音转换为对应文本. 端到端模型主要可分为连接时序分类方法(connectionist temporal classification, CTC)[4]、 循环神经网络转换器(recurrent neural network transducer, RNN-T)[5]、 基于注意力的编码器-解码器(attention-based encoder-decoder, AED)[6]3类. 因此按照被压缩的原始ASR系统划分, 基于知识蒸馏技术的压缩模型主要分为传统的混合ASR压缩模型和端到端压缩模型, 后者又包括CTC压缩模型、 RNN-T压缩模型和AED压缩模型, 主要方法如图2所示. 下面将依次介绍这几类方法, 最后介绍多个教师的知识蒸馏方法.

图2 基于知识蒸馏的方法Fig.2 Methods based on knowledge distillation

传统的混合ASR系统包括基于高斯混合和隐Markov的混合模型(Gaussian mixed model-hidden Markov model, GMM-HMM)[7], 基于深度神经网络和隐Markov的混合模型(deep neural networks-hidden Markov model, DNN-HMM)[8]等. 已有学者应用知识蒸馏技术对传统的ASR系统进行了模型压缩. 如Li等[9]首先尝试应用教师-学生学习方法对DNN-HMM混合系统实现了语音识别蒸馏. DNN-HMM混合系统的训练需要每个输入声学帧的输出标签, 即进行帧对齐, 所以帧级知识蒸馏是教师用来指导学生模型非常自然的方式. 因此, 文献[9]和文献[10]都是通过最大限度地减少教师和学生的帧级输出分布之间的Kullback-Leibler(KL)散度进行帧级知识蒸馏. 在训练中, 只需优化学生模型的参数, 最小化KL散度即等价于最小化交叉熵. 但帧级训练未考虑语音数据的顺序性质, 因此ASR模型的序列训练会比帧级训练产生更好的性能[11]. 针对DNN-HMM混合模型, Wong等[12]通过最小化最大互信息(maximum mutual information, MMI)损失与学生和教师假设级后验概率之间的KL散度的加权平均值, 并将假设后验分解为语言模型和声学模型, 以调整混合ASR架构中后验分布的动态范围, 更好地进行序列训练, 实现了序列级的知识蒸馏.

CTC损失函数的目标是最大化正确标签的后验概率, 不执行严格的时间对齐. CTC模型的后验概率分布是尖锐的, 多数帧发出高概率的空白标签, 只有少数发出非空白目标标签概率较高的帧可以有效地训练学生模型, 因此将帧级知识蒸馏应用于基于CTC的ASR系统会降低性能[13]. 此外, 由于CTC无帧对齐的特点, 因此即使对相同样本, 出现尖峰的时间也不相同, 使帧级知识蒸馏在优化时难以收敛[14]. Takashima等[14]提出使用教师模型的N-best假设在CTC框架中进行序列级知识蒸馏, 将N-best假设的CTC损失进行加权求和作为训练学生模型的蒸馏损失. 这种方法能有效提升学生模型的性能, 但需要对每个N-best假设计算CTC损失, 训练成本较高. 文献[15]提出了基于格的序列级知识蒸馏方法, 相比基于N-best的方法能抑制训练时间的增加. 针对CTC峰值时间的分歧, Kurata等[16]通过在教师模型双向长短期记忆网络(bi-directional long short-term memory, BiLSTM)的帧窗口中, 选择匹配学生模型单向长短期记忆网络(uni-directional long short-term memory, UniLSTM)当前帧的分布, 放松帧对齐的严格假设. 但基于BiLSTM CTC模型中的峰值通常早于UniLSTM CTC的情况, 不具有普适性. 因此, Kurata等[17]进一步提出了引导CTC训练, 能明确地引导学生模型的峰值时间与教师模型对齐, 在输出符号集合相同的情况下, 可用于不同的架构. Tian等[18]设计了一种空白帧消除机制解决KL散度应用于CTC后验分布的困难, 引入两阶段知识蒸馏过程, 第一阶段利用余弦相似性执行特征级知识蒸馏, 第二阶段利用提出的一致声学表示学习方法和空白帧消除机制执行Softmax级知识蒸馏. Yoon等[19]深入探索了异构教师和学生之间的知识蒸馏, 首先使用表示级知识蒸馏初始化学生模型参数, 利用帧加权选择教师模型关注的帧; 然后用Softmax级知识蒸馏传输Softmax预测. 文献[19]研究表明, 在CTC框架下蒸馏帧级后验概率分布, 使用L2损失比传统的KL散度更合适, 原因在于两个分布之间的L2距离总是有界的, 所以可提高蒸馏损失的数值稳定性. 进一步, Yoon等[20]又在学生网络中添加多个中间CTC层, 采用文献[19]提出的Softmax级蒸馏将教师的知识迁移到中间的CTC层.

在RNN-T模型中, 由于其损失由编码器生成的特征和输出符号的所有可能对齐求和获得的负对数条件概率给出, 所以需要更精妙地设计蒸馏损失才能实现这类模型的知识蒸馏. Panchapagesan等[21]提出了一种基于格的蒸馏损失, 该损失由教师和学生条件概率在整个RNN-T输出概率格上的KL散度之和给出. 为提升效率, 损失被计算为粗粒度条件概率之间的KL散度之和, 粗粒度条件概率指仅跟踪“y”(在特定输出步骤的正确标签)、 “空白”标签(用于在时间方向上改变对齐)和其余标签的条件概率, 将维度从输出词典大小粗粒度到三维. Zhao等[22]提出了一种基于对数课程模块替换的知识蒸馏方法, 应用模块替换压缩教师模型, 将包含较多层的教师模型替换为包含较少层的学生模型. 该方法可以使学生和教师在梯度级别进行互动, 能更有效地传播知识. 此外, 由于它只使用RNN-T损失作为训练损失, 没有额外的蒸馏损失, 所以不需要调整多个损失项之间的权重. Vignesh等[23]探索教师和学生编码器的共同学习以对RNN-T语音识别模型进行压缩, 共享共同解码器的同时协同训练, 并指出其优于预先训练的静态教师. Transducer的编码器输出具有很高的熵, 并包含有关声学上相似的词片混淆的丰富信息, 当与低熵解码器输出相结合以产生联合网络输出时, 这种丰富的信息被抑制. 因此引入辅助损失, 以从教师Transducer的编码器中提取编码器信息. Rathod等[24]提出了对Conformer Transducer的多级渐近式压缩方法, 将前一阶段获得的学生模型作为当前阶段的教师模型, 为该阶段蒸馏出一个新的学生模型, 重复上述过程直到达到理想尺寸.

由于AED语音识别模型的解码相对更简单, 所以知识蒸馏方法较容易推广到AED模型. Wu等[25]通过将mixup数据增强方法与Softmax级知识蒸馏相结合, 对Speech-Transformer语音识别模型进行压缩, 从数据角度优化蒸馏, 使学生模型在更真实的数据分布上训练. Mun’im等[26]研究了对于AED模型的序列级蒸馏, 通过beam search为每个样本生成多个假设, 然后将教师生成的假设作为伪标签在同一数据集上训练学生模型. LÜ等[27]认为目前流行的知识蒸馏方法只蒸馏了教师模型中有限数量的块, 未能充分利用教师模型的信息, 因此提出了一种基于特征的多层次蒸馏方法, 以学习教师模型所有块总结出的特征表示. 此外, 还将任务驱动的损失函数集成到解码器的中间块中以提高学生模型的性能.

多个不同的ASR系统通常会产生给定音频样本的不同转录, 对多个教师模型进行集成可以包含更多的补充信息, 给学生模型提供多样的可学习分布, 常具有更好的性能. Chebotar等[28]通过平均单独训练的神经网络模型的上下文相关状态后验概率构建高精度的教师模型, 然后使用标准交叉熵训练学生模型. Gao 等[29]遵循交叉熵损失和CTC损失与错误率没有直接关系的事实, 考虑序列级错误率定义了3种蒸馏策略, 将错误率指标集成到教师选择中, 直接面向语音识别的相关评价指标蒸馏和优化学生模型. Yang等[30]提出将集成教师模型的精髓知识传播到学生模型, 只保留教师模型的前k个输出, 并且以多任务的方式使用教师模型产生的软标签和真实标签训练学生模型.

2 基于模型量化的方法

将模型权重和激活量化为低精度, 能达到压缩神经网络、 减少内存占用、 降低计算成本的目的. 量化方案按阶段不同可划分为后训练量化(post-training quantization, PTQ)和量化感知训练(quantization-aware training, QAT)两种. 后训练量化将已经训练好的浮点模型转换成低精度模型, 在不重新训练网络的前提下获取网络的量化参数, 通常会导致模型性能下降, 其量化过程如图3(A)所示. 量化感知训练在量化的过程中, 对网络进行训练, 从而使网络参数能更好地适应量化带来的影响, 减轻性能损失, 其量化过程如图3(B)所示. 量化感知训练会向全精度模型中插入伪量化节点, 伪量化节点先对权重或激活进行量化得到真实值对应的整数值, 然后反量化回浮点表示, 模拟量化产生的误差, 使模型在训练时适应量化操作. 在伪量化过程中产生的量化权重/激活, 无法进行梯度计算, 一般通过直通估计器(straight through estimator, STE)将梯度传回伪量化前的权重/激活上. 无论是后训练量化, 还是量化感知训练, 其主要目的是为了确定缩放因子和零点两个参数, 以用于对全精度(32-bit)模型的量化.

图3 模型量化流程Fig.3 Flow chart of model quantization

线性量化一般可表示为

(1)

其中:r表示32-bit浮点值;q表示量化值;S为缩放因子, 表示浮点数和整数之间的比例关系;Z表示零点, 即FP32浮点数r=0对应的量化值; round为四舍五入取整操作. 反量化公式为

(2)

其中S和Z的计算方法为

(3)

(4)

rmax和rmin分别为r的最大值和最小值,qmax和qmin分别为q的最大值和最小值.

如上所述, 基于模型量化的语音识别模型压缩方法也分为后训练量化方法和量化感知训练方法. 后训练量化一般使用部分真实数据作为校准数据集对全精度模型进行前向传播, 获得网络各层权重和激活的数据分布特性(如最大、 最小值), 用于后续量化参数的计算. McGraw等[31]将模型参数量化为8-bit整型表示, 采用均匀线性量化器, 假设给定范围内的值均匀分布. 首先找到原始参数的最小值和最大值, 然后使用一个简单的映射公式确定一个比例因子, 当乘以参数时, 该比例因子在较小的精度尺度上均匀地扩展值, 从而获得原始参数的量化版本. He等[32]使用一种更简单的量化方法, 不再有明确的零点偏移, 因此可假设值分布在浮点零的周围, 避免了在执行较低精度的运算(如乘法)前必须应用零点偏移, 从而加快了执行速度. 不同于一般的后训练量化方法, Kim等[33]提出了一种仅整数zero-shot量化方法, 先生成合成数据再进行校准, 将合成数据输入到目标模型中以确定激活的截断范围, 即使无法访问训练和/或验证数据, 也能达到较好的性能. 后训练量化无需微调模型, 相对更简便; 而量化感知训练通过微调网络学习得到量化参数, 通常能保证量化损失精度更小, 因此量化感知训练成为量化研究的主流.

下面介绍采用量化感知训练对语音识别模型进行压缩的方法. 针对伪量化方法在量化下计算权重梯度较难, 从而忽略了反向传播过程中梯度计算的量化损失问题, Nguyen等[34]提出了一种基于绝对余弦正则化的新的量化感知训练方法, 在模型权重上施加一个与量化模型相似的分布, 将权重值驱动到量化水平. 针对伪量化在训练时和推理时会产生数值差异的缺点(在训练时执行浮点运算, 推理时执行整数运算), Ding等[35]用原生量化感知训练得到了4-bit的Conformer ASR模型, 原生量化感知训练使用整数运算执行量化操作(如矩阵乘法), 使训练和推理时的准确性没有任何区别. Fasoli等[36]研究表明, 对基于LSTM的大规模语音识别模型进行4-bit量化常会伴随严重的性能下降, 为此提出了一种新的量化器边界感知裁剪(bound aware clipping, BAC), 可根据dropout设置对称边界, 选择性地将不同的量化策略应用于不同的层. Zhen等[37]针对现有的量化感知训练方法需要预先确定和固定量化质心的缺点, 提出了一种无正则化、 模型无关的通用量化方案, 能在训练期间确定合适的量化质心. 上述研究都将模型量化为4-bit或8-bit, Xiang等[38]提出了二进制的深度神经网络(DNN)模型用于语音识别, 并实现了高效的二进制矩阵乘法, 使得量化结果能在真实的硬件平台上实现加速效果.

3 基于低秩分解的方法

通过近似分解矩阵或张量也是神经网络压缩的一种重要方法. 主要思想是将原来大的权重矩阵或张量分解为多个小的权重矩阵或张量, 用低秩矩阵或张量近似原有的权重矩阵或张量. 如图4所示, 将m×n大小的权重矩阵A, 分解为m×r大小的权重矩阵B和r×n大小的权重矩阵C的乘积.一般要求r远小于m和n, 因此参数量由m×n大幅度缩减到r×(m+n).

图4 矩阵分解Fig.4 Matrix decomposition

一些学者采用低秩分解的方法进行了ASR模型的压缩. 如Sainath等[39]认为由于网络经过大量输出目标的训练以实现良好性能, 因此网络参数大多数位于最终的权重层, 所以对DNN网络最后的权重层使用低秩矩阵分解, 将大小为m×n、 秩为r的矩阵A分解为A=B×C, 其中B是大小为m×r的满秩矩阵,C是大小为r×n的满秩矩阵.Mori等[40]在端到端ASR框架中对门控循环单元的权重矩阵进行Tensor-Train分解, 能用多个低秩张量表示循环神经网络(RNN)层内的密集权重矩阵. 按照Tensor-Train格式, 如果对每个k∈{1,2,…,d}和k维索引jk∈{1,2,…,nk}, 存在一个矩阵Gk[jk], 则k维张量W中的每个元素可表示为

W(j1,j2,…,jd-1,jd)=G1[j1]·G2[j2]·…·Gd-1[jd-1]·Gd[jd].

(5)

4 基于网络剪枝的方法

网络剪枝是对深度学习模型进行修剪的一种常见技术, 其通过衡量权重的贡献确定保留或舍弃权重. 剪枝方法可分为非结构化和结构化两类: 非结构化剪枝去除单个权重; 结构化剪枝按结构单元(如神经元节点、 卷积核、 通道等)对权重进行修剪. 图5为网络剪枝的示意图, 其中图5(C)以神经元节点剪枝为例对结构化剪枝进行了描述, 相当于删除权重矩阵的整行或整列. 剪枝由3个步骤组成: 第一步是从预训练的完整神经网络进行初始化; 第二步根据一定标准对某些权重连接进行删除, 将网络逐步稀疏化; 第三步微调得到的稀疏网络, 一般将修剪过的权重及其梯度设置为零. 交替执行第二步和第三步, 直到达到预定的稀疏水平. 基于网络剪枝的语音识别模型压缩方法也分为非结构化和结构化两类.

图5 网络剪枝示意图Fig.5 Schematic diagram of network pruning

非结构化剪枝也称为稀疏剪枝, 因为其会导致稀疏的矩阵. Yu等[43]利用非结构化剪枝对上下文相关的DNN-HMM语音识别模型进行压缩, 将执行减少DNN连接数量的任务作为软正则化和凸约束优化问题的目标, 并进一步提出了新的数据结构利用随机稀疏模式节省存储且加快解码. Wu等[44]提出了动态稀疏神经网络, 无需单独训练就能获得不同稀疏度级别的模型, 以满足不同规格的硬件和不同延迟的要求, 该方法使用基于梯度的剪枝修剪权重, 以权重×梯度的L1范数作为修剪标准. 非结构化剪枝通常会产生具有竞争力的性能, 但由于其不规则的稀疏性通常只有在特定的硬件上才能产生加速效果, 而结构化剪枝的部署相对更容易. He等[45]提出了一种节点剪枝方法对DNN语音识别模型进行压缩, 提出了几种节点重要性函数对DNN的隐层节点按分数排序, 删除那些不重要节点的同时, 将其对应的输入和输出连接同时删除. Ochiai等[46]利用Group Lasso正则化对DNN-HMM语音识别系统中的DNN隐层节点进行选择, 测试了两种类型的Group Lasso正则化, 一种用于输入权重向量, 另一种用于输出权重向量. Takeda等[47]集成了权重和节点活动的熵, 提出了衡量节点重要性的分数函数, 以用于不重要节点的选择, 每个节点的权重熵考虑节点的权重数量及其模式, 每个节点活动的熵用于查找输出完全不变的节点. Liu等[48]通过剪枝学习一个双模式的语音识别模型, 即剪枝、 稀疏的流式模型和未剪枝、 密集的非流式模型. 在训练过程中两个模型共同学习, 除作用在流式模型上的剪枝掩码, 两种模式共享参数, 使用Group Lasso正则化进行结构化剪枝分组变量的选择.

5 基于参数共享的方法

除上述常用的压缩方法, 还有利用参数共享压缩语音识别模型的研究, 其主要思路是使多个结构相同的网络层共享参数, 从而达到降低模型参数的作用. 其方法框架如图6所示, 编码器由n个结构完全相同的编码器层构成, 所有编码器层共享参数, 因此编码器的参数量从n×Q压缩到Q,Q为每个编码器层的参数量. Transformer模型的编码器和解码器各自堆叠了多个块, 更深的堆叠结构可获得更好的识别结果, 但它会显著增加模型大小, 也会增加解码延迟. Li等[49]在堆叠结构中共享参数, 而不是在每层引入新的参数, 以压缩Transformer语音识别模型的参数, 先创建第一个编码器块和解码器块的参数, 其他块重用第一个块的参数. 共享参数方法不会减少计算量, 只减少了参数量, 但缓存交换的减少也可以加快训练和解码过程. 为减轻参数数量减少导致的性能下降, 该方法中还引入了语音属性以增强训练数据.

图6 编码器参数共享Fig.6 Encoder parameter sharing

6 组合模型

上述各方法从不同方面压缩模型: 知识蒸馏通过改变模型结构压缩模型; 模型量化通过将权重由全精度转换为低精度表示缩小模型大小, 对激活量化能提高计算效率, 达到进一步的加速; 分解方法通过对权重分解压缩模型; 网络剪枝通过丢弃不必要的权重压缩模型; 参数共享通过重用参数压缩模型. 这些方法都起到了缩小内存占用、 降低计算成本、 减少推理延迟的作用. 一些研究人员尝试组合以上几种不同类型的方法, 以获得更好的效果. 如Li等[50]通过联合知识蒸馏和剪枝两种技术对DNN模型进行压缩, 通过优化交叉熵损失进行知识蒸馏, 在剪枝过程中对所有参数进行排序, 然后修剪低于全局阈值的权重. Yuan等[51]结合剪枝和量化方法压缩语音识别模型, 与大多数逐步将权重矩阵置零的方法不同, 剪枝过程中保持修剪权重的值, 通过掩码控制剪枝的元素, 修剪的权重元素可在稍后的训练阶段恢复; 这项工作探索了两种量化方案: 混合量化和整数量化, 两种方案都以后训练量化的形式出现. Gao等[52]利用跨层权重共享、 非结构化剪枝和后训练量化压缩模型, 通过对称量化将权重和激活映射到8位整数. Letaifa等[53]探索剪枝和量化方法的组合压缩Transformer模型, 分3个步骤完成: 首先设置剪枝率, 然后剪枝模型, 最后量化模型.

综上所述, 深度学习由于具有强大的表示能力在语音识别方面取得了显著成果, 增加模型容量和使用大数据集被证明是提高性能的有效方式. 随着物联网的迅速发展, 在资源受限设备上部署基于深度学习的语音识别系统有越来越多的需求, 在许多场景都需要借助语音识别进行便捷、 智能的交互, 如智能家电、 智能客服等. 而面对设备内存、 计算能力和功耗的资源受限, 需要对模型进行压缩才能实现部署. 本文对现有的自动语音识别模型压缩方法进行了全面的综述, 根据所使用的压缩技术将其分为知识蒸馏、 模型量化、 矩阵分解、 网络剪枝、 参数共享和组合模型几种类型, 并对不同类型方法进行了系统综述, 可为语音识别模型的许多实际应用场景中如何在资源受限设备上实现压缩和部署提供有益的指导.

猜你喜欢

剪枝语音权重
人到晚年宜“剪枝”
基于YOLOv4-Tiny模型剪枝算法
权重常思“浮名轻”
魔力语音
基于MATLAB的语音信号处理
基于MQ3与MP3的价廉物美的酒驾语音提醒器
对方正在输入……
为党督政勤履职 代民行权重担当
基于公约式权重的截短线性分组码盲识别方法
剪枝