桑江坤 努爾麥麥提·尤魯瓦斯
(1.新疆大學(xué)信息科學(xué)與工程學(xué)院,新疆烏魯木齊 830046;2.新疆多語(yǔ)種信息技術(shù)實(shí)驗(yàn)室,新疆烏魯木齊 830046)
最近,Conformer[1]架構(gòu)在語(yǔ)音識(shí)別任務(wù)中表現(xiàn)出優(yōu)異的性能。無(wú)論是在較小的數(shù)據(jù)集Aishell 上,還是將近1000 小時(shí)的Librispeech 數(shù)據(jù)集上,相比之前 的Transformer[2],Transformer-XL[3],Conformer 都表現(xiàn)出較好的結(jié)果?;贑onformer框架的提出,使得端到端ASR 模型的準(zhǔn)確率得到進(jìn)一步的提升,同時(shí)在語(yǔ)音識(shí)別領(lǐng)域也得到了廣泛的應(yīng)用。
然而,雖然Conformer 模型的準(zhǔn)確率得到了提高,但隨之而來(lái)的是越來(lái)越大的模型參數(shù)量?;贑onformer的預(yù)訓(xùn)練模型已經(jīng)達(dá)到幾千萬(wàn)的參數(shù),甚至有時(shí)達(dá)到了上億的參數(shù)。因此,這也使得模型在資源受限的設(shè)備上部署時(shí)成為一個(gè)重要的問(wèn)題,因?yàn)樗哂休^高的延遲,而且內(nèi)存占用和計(jì)算量都非常大。
為了解決上述存在的問(wèn)題,本文采用了三種壓縮策略:基于模型量化的改進(jìn),基于權(quán)重通道的結(jié)構(gòu)化剪枝[4-6],通過(guò)奇異值分解進(jìn)行低秩近似[7-8]。首先,量化是模型壓縮中較常用的一種壓縮方式,它通過(guò)以低精度存儲(chǔ)權(quán)重來(lái)減少內(nèi)存占用,同時(shí)也可以通過(guò)專(zhuān)用硬件進(jìn)行低精度運(yùn)算來(lái)減少推理時(shí)間,降低功耗[9-11]。以往的量化操作中,大多采用的量化方式是動(dòng)態(tài)范圍內(nèi)的量化操作。這種量化方式在前期的模型訓(xùn)練過(guò)程中不進(jìn)行任何額外的操作,模型訓(xùn)練好后直接對(duì)其量化,在量化操作之前需要先對(duì)數(shù)據(jù)流進(jìn)行統(tǒng)計(jì),找到最大值和最小值,然后再將其線(xiàn)性變換到(-1,1)范圍內(nèi)。然后后續(xù)再進(jìn)行量化和反量化操作。這種方式在前期的整個(gè)統(tǒng)計(jì)和變換過(guò)程,會(huì)造成一定的耗時(shí)。此外,量化所造成的精度損失容易受到數(shù)據(jù)流范圍的影響,也就是說(shuō)由于數(shù)據(jù)流不可控,當(dāng)數(shù)據(jù)流的范圍較大時(shí),造成的精度的損失也會(huì)較大。本文,基于Int8模型量化并對(duì)其進(jìn)行了改進(jìn)。其主要操作是,在模型訓(xùn)練過(guò)程中對(duì)其進(jìn)行干預(yù),對(duì)輸入流和權(quán)重進(jìn)行一個(gè)范圍限制,以此來(lái)探究其范圍限制對(duì)模型精度損失的影響。這樣做的好處是,在對(duì)模型量化時(shí),可以人為控制模型量化過(guò)程中所造成的精度損失,避免在量化實(shí)現(xiàn)過(guò)程中,輸入流范圍的差異對(duì)模型精度影響較大,同時(shí)可以簡(jiǎn)化量化操作的過(guò)程。
此外,結(jié)合模型結(jié)構(gòu)的特點(diǎn)還進(jìn)行了網(wǎng)絡(luò)剪枝和奇異值分解操作。對(duì)于剪枝操作而言,其操作方式有非結(jié)構(gòu)化剪枝和結(jié)構(gòu)化剪枝。非結(jié)構(gòu)化剪枝相比于結(jié)構(gòu)化剪枝雖然可以取得更高的稀疏度,但是需要特定的軟硬件支持才可以取得加速效果。而結(jié)構(gòu)化剪枝雖然做不到極限的壓縮效果,但由于保留的子結(jié)構(gòu)規(guī)整,更容易取得加速效果,擁有廣泛的應(yīng)用場(chǎng)景。這也是本文采用這種方式的一個(gè)重要原因。通過(guò)網(wǎng)絡(luò)剪枝操作,可以刪除模型中存在的冗余結(jié)構(gòu)和參數(shù),從而減少推理過(guò)程的計(jì)算代價(jià)。奇異值分解方法其主要作用是可以將大規(guī)模的矩陣分解為小規(guī)模的運(yùn)算,以此減少模型尺寸,降低模型所占內(nèi)存空間,減少推理時(shí)間。雖然網(wǎng)絡(luò)剪枝和奇異值分解都可以有效地壓縮模型的大小,但如何在保證模型精度不受損失的情況下來(lái)盡可能地壓縮模型的大小是本文所探究的一個(gè)重點(diǎn)。
為減少端到端語(yǔ)音識(shí)別模型的大小,保證其精度損失不受到較大影響,本文設(shè)計(jì)基于Int8 模型的量化方法并對(duì)其進(jìn)行改進(jìn)。結(jié)合模型結(jié)構(gòu)特點(diǎn),從不同角度來(lái)對(duì)模型進(jìn)一步壓縮。最后探究如何結(jié)合使用來(lái)保證模型的性能。
Conformer 是當(dāng)下最先進(jìn)的ASR 編碼器架構(gòu)。由于Transformer 模型擅長(zhǎng)捕捉基于內(nèi)容的全局交互,卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)則可以有效地捕捉基于相對(duì)偏移的局部相關(guān)信息。所以研究者通過(guò)利用二者的特性,將Trans?former 和CNN 結(jié)合起來(lái)。通過(guò)對(duì)Transformer 進(jìn)行卷積增強(qiáng),以參數(shù)有效的方式對(duì)音頻序列的局部和全局依賴(lài)性進(jìn)行建模,使得端到端模型的性能得到進(jìn)一步的提升。這也使得Conformer 在語(yǔ)音識(shí)別領(lǐng)域得到廣泛的應(yīng)用。
Conformer 模型結(jié)構(gòu)如圖1 所示,由兩個(gè)前饋網(wǎng)絡(luò)模塊,一個(gè)自注意力模塊和一個(gè)卷積網(wǎng)絡(luò)模塊組成。前饋網(wǎng)絡(luò)模塊中使用了兩個(gè)線(xiàn)性變換層和Swish 激活函數(shù),此外還用了Dropout 層和批歸一化層。在多頭自注意力模塊中,Conformer 集成了Transformer-XL 中的相對(duì)正弦位置編碼方案。相對(duì)正弦位置編碼可以讓自注意力模塊在不同的輸入長(zhǎng)度上更好的泛化。卷積模塊內(nèi)部包含了逐點(diǎn)卷積網(wǎng)絡(luò),門(mén)控線(xiàn)性單元(GLU)激活函數(shù),1-D 深度卷積網(wǎng)絡(luò)。Conformer 模型主要特點(diǎn)就是在Trans?former模型上加入了深度可分離卷積。
圖1 Conformer模型結(jié)構(gòu)示意圖Fig.1 Schematic diagram of the Conformer model structure
Conformer 模塊參考Macaron-Net[12]結(jié)構(gòu)使用兩個(gè)前饋網(wǎng)絡(luò)將多頭注意力和卷積網(wǎng)絡(luò)模塊包圍其中,并在各模塊之間做殘差連接。
其中,F(xiàn)FN 代表前饋網(wǎng)絡(luò)模塊,MHSA 表示多頭注意力模塊,Conv 表示卷積網(wǎng)絡(luò)模塊。Layernorm 表示層歸一化。研究者經(jīng)過(guò)試驗(yàn)發(fā)現(xiàn),相比于在Con?former 中使用單個(gè)前饋網(wǎng)絡(luò)模塊,使用兩個(gè)前饋網(wǎng)絡(luò)模塊將多頭注意力模塊和卷積網(wǎng)絡(luò)模塊放在其中,可以有效地提高模型的性能。
聯(lián)合CTC-注意力機(jī)制模型[13]的思想是使用連接時(shí)序分類(lèi)(Connectionist Temporal Classification,CTC)[14]目標(biāo)函數(shù)作為輔助任務(wù),在多任務(wù)學(xué)習(xí)框架內(nèi)訓(xùn)練Attention 模型的Encoder。CTC 目標(biāo)函數(shù)作為輔助任務(wù)附加到共享編碼器。該結(jié)構(gòu)有一個(gè)共享的編碼器網(wǎng)絡(luò),由CTC 和Attention 模型共享。CTC 的前后向算法可以實(shí)現(xiàn)語(yǔ)音序列和標(biāo)簽序列之間的單調(diào)對(duì)齊,這有助于減少基于注意力機(jī)制編碼-解碼(Attention-based Encoder-Decoder,AED)模型[15-17]的不規(guī)則對(duì)齊,從而獲得更好的性能。聯(lián)合CTC-注意力機(jī)制模型的訓(xùn)練過(guò)程是多任務(wù)學(xué)習(xí),將CTC 與基于A(yíng)ttention 機(jī)制的交叉熵L(CTC)和L(ATT)相結(jié)合,聯(lián)合訓(xùn)練損失函數(shù)可定義如下:
其中,λ是一個(gè)可調(diào)參數(shù):0 ≤λ≤1,由于CTC,一般作為輔助任務(wù),λ一般取值為0.3。
本文將采用基于Conformer 的聯(lián)合CTC-注意力模型進(jìn)行訓(xùn)練,其模型結(jié)構(gòu)如圖2所示。
圖2 基于Conformer的CTC-注意力模型結(jié)構(gòu)圖Fig.2 CTC-Attention Model Structure Diagram Based on Conformer
這個(gè)結(jié)構(gòu)的主要特點(diǎn)是在CTC-注意力機(jī)制的基礎(chǔ)上,在Encoder 部分使用了多個(gè)Conformer 層,Decoder 部分使用了多個(gè)Transformer 解碼層。從圖中可以看到模型結(jié)構(gòu)中存在多個(gè)多頭自注意力模塊,不同的是,在Encoder 部分,采用的是具有相對(duì)位置嵌入的多頭自注意力,通過(guò)使用相對(duì)位置的正弦編碼方式可以允許自注意力模塊更好地對(duì)輸入序列的長(zhǎng)度進(jìn)行泛化,并且使得整個(gè)模塊可以更好地在長(zhǎng)度不一致的輸入音頻上有更強(qiáng)的魯棒性。而在Decoder 部分則采用的是標(biāo)準(zhǔn)的多頭自注意力模塊。
通過(guò)采用這種模型結(jié)構(gòu),一方面可以加快整個(gè)模型訓(xùn)練過(guò)程,另一方面充分利用訓(xùn)練數(shù)據(jù)來(lái)提高學(xué)習(xí)能力,以便更好地提升模型的性能。
對(duì)于端到端語(yǔ)音識(shí)別模型而言,里面存在較多的計(jì)算,這些計(jì)算通常是一些數(shù)據(jù)流乘以權(quán)重的計(jì)算。簡(jiǎn)單的來(lái)說(shuō),就是矩陣之間的運(yùn)算,對(duì)于矩陣運(yùn)算而言實(shí)際上就是矩陣中的某一行與另一個(gè)矩陣的某一列相乘,實(shí)際上就是兩個(gè)向量之間的點(diǎn)積。用正常的浮點(diǎn)類(lèi)型模型進(jìn)行運(yùn)算,不做任何加速操作,其過(guò)程可描述為:
對(duì)于模型來(lái)說(shuō),如果不做任何壓縮操作,這個(gè)參數(shù)量和計(jì)算量是巨大的,很難部署在資源受限的設(shè)備上。而量化是模型壓縮中較常用的一種方法。工業(yè)部署中常用的兩個(gè)模型量化方法有量化感知訓(xùn)練(Quantization-Aware-Training,QAT)和訓(xùn)練后量化(Post-Training Quantization,PTQ)。量化感知訓(xùn)練是在量化的過(guò)程中,對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,通過(guò)模擬量化的效果進(jìn)行參數(shù)更新和優(yōu)化。標(biāo)準(zhǔn)的量化感知訓(xùn)練包含的是一個(gè)離散的函數(shù),如圖3(a)所示,它是一個(gè)階梯函數(shù),也即是不可導(dǎo)的,所以帶來(lái)的問(wèn)題就是沒(méi)有辦法用一個(gè)標(biāo)準(zhǔn)的反向傳播的梯度下降方法進(jìn)行優(yōu)化。而一般的做法是做一個(gè)梯度的近似,如圖3(b)所示,利用一個(gè)直通估計(jì)器在反向傳播的過(guò)程中忽略掉量化的影響。這樣帶來(lái)的問(wèn)題就是計(jì)算出來(lái)的梯度是有誤差的,是一種不精確的訓(xùn)練。雖然量化感知訓(xùn)練靈活性比較高,但整個(gè)訓(xùn)練過(guò)程比較慢,而且操作也極為不便,時(shí)間成本,人力成本都是比較大的。
圖3 標(biāo)準(zhǔn)量化感知訓(xùn)練Fig.3 Standard quantization-aware-training
訓(xùn)練后量化是指在模型長(zhǎng)時(shí)間的訓(xùn)練后,模型達(dá)到收斂狀態(tài)后再進(jìn)行量化的一種方法。本文中的量化方式也是基于這種訓(xùn)練后的量化策略。后量化的流程如圖4 所示,這種量化方式在前期的模型訓(xùn)練過(guò)程中不進(jìn)行任何額外操作,模型訓(xùn)練好后然后對(duì)其量化。不過(guò)在量化之前需要做一些預(yù)處理,首先需要先對(duì)數(shù)據(jù)流進(jìn)行統(tǒng)計(jì),找到最大值和最小值,然后再將其線(xiàn)性變換到-1到1范圍內(nèi)。
圖4 訓(xùn)練后量化Fig.4 Post-training quantization
這種量化方式存在的問(wèn)題:一是前期的整個(gè)統(tǒng)計(jì)和變換過(guò)程,會(huì)造成一定的耗時(shí)。二是量化所造成的精度損失容易受到數(shù)據(jù)流范圍的影響,也就是說(shuō)由于數(shù)據(jù)流不可控,當(dāng)數(shù)據(jù)流的范圍較大時(shí),造成的精度的損失也會(huì)較大。
基于這種量化方式,有人提出了一種在量化之前運(yùn)用小批量數(shù)據(jù)來(lái)統(tǒng)計(jì)最小值和最大值,雖然一定程度上減少了計(jì)算量,但會(huì)造成額外的精度損失,因?yàn)樾∨繑?shù)據(jù)統(tǒng)計(jì)得到的最小值和最大值不足以反映所有的數(shù)據(jù)。
基于以上問(wèn)題,本文對(duì)訓(xùn)練后量化策略進(jìn)行了改進(jìn),以此來(lái)解決上述后量化方式的不足。本文做出的改進(jìn)是通過(guò)對(duì)模型進(jìn)行訓(xùn)練干預(yù),對(duì)輸入流和相關(guān)權(quán)重進(jìn)行一個(gè)范圍限制。在訓(xùn)練過(guò)程中,將輸入流X限制到[-R,R]范圍內(nèi),權(quán)重W限制到[-Q,Q]內(nèi)。整體流程如圖5所示。
圖5 訓(xùn)練后量化改進(jìn)Fig.5 Improvements to Post-training quantization
通過(guò)這種方式量化和反量化可得到簡(jiǎn)化,本文的操作是基于Int8的量化,量化和反量化過(guò)程可表示為:
進(jìn)一步化簡(jiǎn)得:
假設(shè)有2m=27/R,2n=27/Q,則有:
對(duì)于Int8 量化過(guò)程而言,是將Xi和Wi進(jìn)行近似。將其轉(zhuǎn)換為-128 到127 這個(gè)區(qū)間內(nèi)的值來(lái)表示,也就是說(shuō),需要對(duì)它們乘以一個(gè)較大的整數(shù),來(lái)使其轉(zhuǎn)移到量化的范圍內(nèi)。
其量化過(guò)程的損失會(huì)在round(Xi?2m)和round(Wi?2n)取整中體現(xiàn),round(Xi?2m)的最大損失為0.5,round(Wi?2n)的最大損失也是0.5。所以Xi整體的損失是≤1/(2m+1),Wi整體的損失是≤1/(2n+1)。
由2m=27/R,2n=27/Q可知:
在一定范圍內(nèi),當(dāng)[-R,R]和[-Q,Q]范圍較小時(shí),m和n取值就越大,Xi和Wi整體的損失就越小,所以通過(guò)這種方式在對(duì)模型量化時(shí),可以較大程度上控制量化過(guò)程中所造成的精度損失,避免在量化實(shí)現(xiàn)過(guò)程中,輸入流范圍的差異對(duì)模型精度影響較大。
而對(duì)于輸入流和權(quán)重的限制范圍是不同的,因?yàn)閷?duì)于數(shù)據(jù)流,它的范圍相對(duì)來(lái)說(shuō)是比較大的,如果直接將輸入流限制到一個(gè)較小的范圍內(nèi),會(huì)對(duì)模型的精度造成較大影響。所以對(duì)于輸入流和權(quán)重范圍限制是相對(duì)的,也即是在一定范圍內(nèi)R和Q取值較小時(shí),量化過(guò)程所造成的精度損失越小。本文對(duì)輸入流限制的范圍為(-2,2),(-4,4),(-8,8),權(quán)重則為(-0.5,0.5),(-1,1),(-2,2)。
此外,關(guān)鍵的一點(diǎn)是每個(gè)量化過(guò)程還要做一個(gè)反量化操作,在進(jìn)行反量化操作時(shí),如果后面跟著的還是一個(gè)矩陣乘法,本文提出的量化操作會(huì)在這個(gè)過(guò)程減少一定的運(yùn)算。通過(guò)神經(jīng)網(wǎng)絡(luò)訓(xùn)練得到的模型,一般是包含很多層的,比如說(shuō)有兩個(gè)全連接層連接在一起。如下所示:
本文實(shí)現(xiàn)的量化方式,對(duì)于任何一個(gè)輸入X,比如我們將其限制到(-4,4),這樣再做量化只需要乘以25,然后再取整即可,不再需要繁瑣的統(tǒng)計(jì)過(guò)程。而權(quán)重限制到(-2,2)之間,只需要乘以26,進(jìn)而四舍五入取整即可。而在反量化的過(guò)程需要把輸入和權(quán)重相乘后的結(jié)果除以25和26,即211。其除以211得到的輸出,又是下一層網(wǎng)絡(luò)的輸入,若下一層還是一個(gè)矩陣乘法,即兩個(gè)全連接層連接在一起的情況,本文改進(jìn)后的量化不需要再除以211,而僅除以26就完成了上一層的反量化和下一層的量化操作。相當(dāng)于把上一層的反量化和下一層的量化過(guò)程合并在一起,這樣一定程度上減少了矩陣乘法的計(jì)算時(shí)間。如圖6 和圖7 為兩個(gè)全連接層連接在一起時(shí)不同量化方式的比較示例圖。
圖6 標(biāo)準(zhǔn)后量化方式線(xiàn)性層示例圖Fig.6 Standard quantization-aware-training linear layer example diagram
圖7 后量化改進(jìn)線(xiàn)性層示例圖Fig.7 Improvements to Post-training quantization linear layer example diagram
本文主要是通過(guò)對(duì)模型進(jìn)行訓(xùn)練干預(yù),對(duì)輸入流和相關(guān)權(quán)重進(jìn)行一個(gè)范圍限制,探究如何能實(shí)現(xiàn)最小化精度損失??偟膩?lái)說(shuō),改進(jìn)后的量化方式去除了前期范圍統(tǒng)計(jì)和變換這一耗時(shí)的過(guò)程,簡(jiǎn)化了整體的量化過(guò)程,減少了一定的運(yùn)算時(shí)間。此外,較大程度上可以控制模型量化過(guò)程中所造成的精度損失,避免在量化操作過(guò)程中,輸入流范圍的差異對(duì)模型精度影響較大。
本文采用的端到端模型結(jié)構(gòu)中包含了多個(gè)全連接前饋網(wǎng)絡(luò)模塊,它是由兩個(gè)線(xiàn)性變換和一個(gè)激活函數(shù)組成,其中激活函數(shù)放在線(xiàn)性變換的中間。不同的是,在Encoder 部分中,前饋網(wǎng)絡(luò)模塊使用了Swish[18]激活函數(shù),而在Decoder區(qū)域則是用了Relu[19]激活函數(shù)。此外,這些前饋網(wǎng)絡(luò)模塊,都在激活后使用了Dropout,以此來(lái)進(jìn)一步規(guī)范模型網(wǎng)絡(luò)。其過(guò)程可定義為:
前饋網(wǎng)絡(luò)模塊中,每層都包含著一定的線(xiàn)性單元數(shù),其單元數(shù)一般較大。而模型中又存在多個(gè)前饋網(wǎng)絡(luò)模塊,整個(gè)前饋網(wǎng)絡(luò)模塊中的線(xiàn)性變換過(guò)程存在著較大的運(yùn)算。
因此,本文對(duì)模型中的前饋網(wǎng)絡(luò)模塊進(jìn)行基于權(quán)重通道的結(jié)構(gòu)化剪枝。其操作過(guò)程如圖8 所示。主要操作是:在模型訓(xùn)練過(guò)程中使用了未做任何操作的基線(xiàn)模型,即在迭代訓(xùn)練幾輪后的模型基礎(chǔ)上進(jìn)行剪枝操作,通過(guò)L2范式來(lái)得到每個(gè)權(quán)重通道的重要性,然后裁剪相應(yīng)比例不重要的通道數(shù)。
圖8 前饋網(wǎng)絡(luò)模塊通道剪枝Fig.8 Feed-forward network module channel pruning
此外,在端到端模型中也存在著多個(gè)多頭自注意力模塊。多頭自注意力的機(jī)制是由Virwani 等人在2017年發(fā)表的一篇論文《Attention is all you need》所提出來(lái)的。文中提出將自注意力機(jī)制分為多個(gè)頭,形成多個(gè)子空間,以此可以注意到不同子空間的信息,捕捉到更加豐富的特征信息。多頭自注意力機(jī)制是通過(guò)線(xiàn)性變換對(duì)Q,K,V,進(jìn)行映射,然后把輸出結(jié)果拼接起來(lái)。多頭自注意力機(jī)制的公式如下:
由多頭自注意力模塊的結(jié)構(gòu)來(lái)看,該模塊中也存在多個(gè)矩陣線(xiàn)性變換,而這些線(xiàn)性變換的主要特點(diǎn)是行列相同的方陣。其特點(diǎn)很適合奇異值分解操作,因此本文對(duì)這一模塊進(jìn)行了奇異值分解操作,將大規(guī)模的矩陣分解為小規(guī)模的矩陣運(yùn)算,從而降低模型中的參數(shù)量。
其中,S是除對(duì)角元素不為0,其余元素均為0 的矩陣,U和V都為酉矩陣。為了減少模型的參數(shù)量,又將矩陣S分為兩個(gè)相同的矩陣E,即有E=從而我們可以將W變?yōu)閮蓚€(gè)矩陣相乘,用公式表示為:
圖9 多頭自注意力模塊奇異值分解Fig.9 The bulls decompose from the singular value of the attention module
本文在公開(kāi)的英語(yǔ)Librispeech[20]數(shù)據(jù)集上進(jìn)行了相關(guān)實(shí)驗(yàn),約包含1000 小時(shí)帶標(biāo)簽的數(shù)據(jù),其中訓(xùn)練數(shù)據(jù)約有960小時(shí)。有test-clean和test-other兩種測(cè)試集,時(shí)長(zhǎng)分別為5.4 和5.1 小時(shí)。驗(yàn)證集分為dev-clean 和dev-other,時(shí) 長(zhǎng)分別為5.4 和5.3 小時(shí)。數(shù)據(jù)均為16 kHz采樣率,單聲道格式。
實(shí)驗(yàn)中使用了80維的fbank進(jìn)行特征提取。幀長(zhǎng)設(shè)置為25 ms,幀移10 ms。訓(xùn)練過(guò)程使用了Adam 優(yōu)化器,量化和剪枝實(shí)驗(yàn)的學(xué)習(xí)率設(shè)置為了0.004,奇異值分解實(shí)驗(yàn)的學(xué)習(xí)率設(shè)置為0.0004。實(shí)驗(yàn)中均使用了12 層編碼器,6 層解碼器,每層包含2048個(gè)單元,注意力數(shù)目設(shè)置為4。卷積網(wǎng)絡(luò)中卷積核數(shù)目設(shè)置為15。此外,還使用了標(biāo)簽平滑和Drop?out 正則化設(shè)為0.1,以防止過(guò)擬合。CTC 的權(quán)重設(shè)置為0.3。所有模型都是在2 塊 NVIDIATESLA V100 GPUs 32GB上使用Wenet[21]工具進(jìn)行訓(xùn)練。epoch 次數(shù)為25。此外,文中所有實(shí)驗(yàn)的模型是采用BPE[22-23]算法進(jìn)行建模,生成了一種介于字和詞之間的半字(Word Piece)建模單元,輸出節(jié)點(diǎn)數(shù)為5002。
本文中主要采用詞錯(cuò)誤率(Word Error Rate,WER)和實(shí)時(shí)率(Real Time Factor,RTF)作為模型的評(píng)價(jià)指標(biāo)。
其中,S表示被替換的單詞數(shù)目,D表示被刪除的單詞數(shù)目,I表示被插入的字符數(shù)目,N表示標(biāo)簽序列中的總單詞數(shù)目。
本文的量化實(shí)驗(yàn),均是對(duì)模型做的Int8 量化。對(duì)整個(gè)模型的線(xiàn)性層和卷積層做權(quán)重量化,未涉及偏置的量化。本文所采取的clip范圍主要是通過(guò)自適應(yīng)的方法來(lái)獲取的,我們?cè)赾lip之前,對(duì)float32模型的相關(guān)權(quán)重進(jìn)行了統(tǒng)計(jì)。模型中線(xiàn)性層和卷積層的權(quán)重分布大多如圖10所示。
從圖10 可以看出他們的權(quán)重分布主要集中在(-2,2)范圍內(nèi)。為了實(shí)驗(yàn)驗(yàn)證,權(quán)重(W)選取的clip 范圍有(-0.5,0.5),(-1,1),(-2,2)。同時(shí)也對(duì)輸入數(shù)據(jù)流進(jìn)行了統(tǒng)計(jì),通過(guò)選取了一部分測(cè)試數(shù)據(jù)在float32 模型進(jìn)行推理,從而獲得輸入流的大概范圍,統(tǒng)計(jì)發(fā)現(xiàn)相比于權(quán)重的分布,數(shù)據(jù)流的分布范圍主要集中在一個(gè)較大的范圍內(nèi)。因此對(duì)輸入流(Input)驗(yàn)證的clip 范圍有(-2,2),(-4,4),(-8,8)。然后在此基礎(chǔ)上進(jìn)行量化實(shí)驗(yàn)。
圖10 模型中線(xiàn)性層與卷積層的權(quán)重分布Fig.10 The distribution of weights between linear and convolutional layers in the model
首先是只進(jìn)行clip 操作對(duì)模型精度損失的影響,其結(jié)果如表1所示。
通過(guò)觀(guān)察表1 可以看出,輸入的數(shù)據(jù)流和權(quán)重在進(jìn)行不同的clip 時(shí),精度的損失差別有所不同。由于權(quán)重的數(shù)據(jù)分布大多在-2 到2 這個(gè)范圍內(nèi),將權(quán)重clip到(-0.5,0.5)范圍內(nèi)會(huì)對(duì)模型性能造成較大影響。而因?yàn)檩斎肓鞯臄?shù)據(jù)分布范圍較大,若強(qiáng)制將輸入流clip到(-2,2)這個(gè)過(guò)小的范圍內(nèi)同樣會(huì)對(duì)模型的性能造成較大影響。當(dāng)輸入流和權(quán)重clip到較小范圍時(shí),對(duì)模型精度影響較大,因此后面的量化操作也就無(wú)需繼續(xù)進(jìn)行。
表1 clip操作結(jié)果Tab.1 The result of the clip operation
在上述clip 操作的基礎(chǔ)上,對(duì)其精度損失影響不是很大的情況下進(jìn)行量化操作。具體結(jié)果如表2所示。
表2 量化操作結(jié)果Tab.2 Quantify the results of the operation
通過(guò)觀(guān)察表2 可以看出,當(dāng)對(duì)模型進(jìn)行int8 量化時(shí),模型大小顯著的減少了。模型參數(shù)量從原來(lái)的191 MB 減少了到了49 MB,RTF 降低了3.8 倍。上文提到為了較大程度上控制量化過(guò)程中所造成的精度損失,在一定范圍內(nèi)當(dāng)[-R,R]和[-Q,Q]范圍較小時(shí),Xi和Wi整體的損失就越小。所以權(quán)重clip 到(-2,2)范圍和輸入流clip 到(-4,4)范圍內(nèi)對(duì)模型的性能造成較小的影響。從量化結(jié)果可以看到,在test-clean 測(cè)試集的詞錯(cuò)誤率幾乎沒(méi)有造成影響,而在test-other測(cè)試集上也僅造成0.28的詞錯(cuò)誤率。這說(shuō)明了我們改進(jìn)后的量化方式,可以較大程度上的控制模型量化過(guò)程中所造成的精度損失,避免在量化實(shí)現(xiàn)過(guò)程中,輸入流范圍的差異對(duì)模型精度影響較大。
其次,根據(jù)模型結(jié)構(gòu)的特點(diǎn),對(duì)模型中的前饋神經(jīng)網(wǎng)絡(luò)進(jìn)行了基于權(quán)重通道的結(jié)構(gòu)化剪枝。為了得到每個(gè)權(quán)重通道的重要性,在進(jìn)行剪枝操作時(shí),首先使用了沒(méi)做任何操作的基線(xiàn)模型。在訓(xùn)練5 輪后的模型的基礎(chǔ)上進(jìn)行剪枝操作,然后又經(jīng)過(guò)20 輪的迭代訓(xùn)練,作為最終模型。通過(guò)L2 范式來(lái)得到每個(gè)權(quán)重通道的重要性,然后裁剪相應(yīng)比例不重要的通道數(shù)。分別對(duì)前饋神經(jīng)網(wǎng)絡(luò)進(jìn)行了10%,20%,25%,30%的剪枝。剪枝操作相關(guān)結(jié)果如表3所示。
表3 剪枝操作結(jié)果(學(xué)習(xí)率0.004)Tab.3 The result of the pruning operation(learning rate 0.004)
觀(guān)察表可以看出,對(duì)模型的前饋神經(jīng)網(wǎng)絡(luò)模塊進(jìn)行一定比例的剪枝操作后,不會(huì)影響模型的性能。因?yàn)楸疚闹饕ㄟ^(guò)L2 范式來(lái)獲得每個(gè)權(quán)重通道的重要性,然后對(duì)其進(jìn)行排列,從而裁剪掉這些不重要的通道數(shù),由于裁剪掉的這些通道數(shù)對(duì)整個(gè)模型起到的作用較小,所以不會(huì)對(duì)模型的性能造成較大的影響。但如果剪枝超過(guò)一定比例后,裁剪掉的通道數(shù)對(duì)整個(gè)模型起到的作用較大,這會(huì)嚴(yán)重影響模型的性能。由表也可以看出,當(dāng)剪枝率超過(guò)25%時(shí),對(duì)模型的性能影響較大。
此外,實(shí)驗(yàn)中發(fā)現(xiàn),在對(duì)前饋網(wǎng)絡(luò)進(jìn)行剪枝操作時(shí),學(xué)習(xí)率設(shè)置過(guò)小時(shí)對(duì)模型的性能影響較大。結(jié)果如表4所示。
表4 剪枝操作結(jié)果(學(xué)習(xí)率0.0004)Tab.4 The result of the pruning operation(learning rate 0.0004)
當(dāng)學(xué)習(xí)率設(shè)置0.0004 時(shí),在剪枝10%時(shí),對(duì)模型的性能就造成很大的影響,這就使得無(wú)法再繼續(xù)增加剪枝率。所以在進(jìn)行剪枝操作學(xué)習(xí)率不宜設(shè)置過(guò)小。
在實(shí)驗(yàn)中發(fā)現(xiàn),如果直接對(duì)網(wǎng)絡(luò)層的所有線(xiàn)性變換進(jìn)行奇異值分解,會(huì)對(duì)模型精度造成較大的影響,嚴(yán)重影響了模型的性能。因此我們根據(jù)多頭自注意力模塊的特點(diǎn),對(duì)其進(jìn)行奇異值分解。
由于,直接在原學(xué)習(xí)率的基礎(chǔ)上進(jìn)行學(xué)習(xí),導(dǎo)致了模型的loss越來(lái)越大,導(dǎo)致訓(xùn)練無(wú)法繼續(xù)進(jìn)行。所以,在實(shí)驗(yàn)中將學(xué)習(xí)率在原學(xué)習(xí)率的基礎(chǔ)上減小10 倍,即設(shè)為0.0004。然后,在基線(xiàn)的第5 輪模型上進(jìn)行奇異值分解操作,進(jìn)行了20 輪的迭代訓(xùn)練。因?yàn)樵谀P椭械亩囝^注意力模塊,其維度采用的是256,故將分解時(shí),將中間維度分別設(shè)為64,48,32。
通過(guò)觀(guān)察表5 可以看出,由于模型中存在的多頭注意力模塊有限,在進(jìn)行奇異值分解時(shí),模型大小雖然有所減少,但不是很大。隨著中間維度的減小,模型大小也隨之減少,但準(zhǔn)確率有所下降。所以對(duì)模型的多頭自注意力模塊進(jìn)行奇異值分解操作,中間維度不宜設(shè)置過(guò)小。
經(jīng)過(guò)以上實(shí)驗(yàn),又對(duì)它們的結(jié)合進(jìn)行了探究,從而使得模型大小進(jìn)一步減少。其具體操作結(jié)果如表6所示。
通過(guò)表6 可以發(fā)現(xiàn),不同的結(jié)合策略對(duì)模型性能的影響有所不同,模型大小也有所差異。剪枝,奇異值分解分別單獨(dú)和量化結(jié)合,雖然壓縮后的大小基本相同,但奇異值分解和量化結(jié)合造成的詞錯(cuò)誤率低一些。在將量化、剪枝、奇異值分解結(jié)合在一起后,原模型的大小由191M 減小到42M,實(shí)時(shí)率RTF 也很大程度得到了降低,而此時(shí)壓縮后模型的詞錯(cuò)誤率相比于原模型僅有2.92%的誤差,可見(jiàn)壓縮后的模型并沒(méi)對(duì)其性能造成較大的影響。
表6 三種策略融合操作結(jié)果Tab.6 Three strategies fuse the results of the operation
為了驗(yàn)證改進(jìn)后的量化結(jié)合其他壓縮策略可以有效提高模型的推理速度。本文又設(shè)計(jì)一個(gè)參數(shù)較小的模型,分別在X86 服務(wù)器和Android 端進(jìn)行了推理測(cè)試。Android 設(shè)備采用的是運(yùn)行內(nèi)存為8 GB,處理器為高通驍龍855Plus 8 核的Android 手機(jī)。其結(jié)果如表7所示。
表7 不同設(shè)備上的推理測(cè)試Tab.7 Inference testing on different devices
觀(guān)察表可以發(fā)現(xiàn),在X86 服務(wù)器上結(jié)合壓縮策略的模型其RTF 降低了3.85 倍,Android 端其RTF降低了3.46 倍。所以本文使用的模型壓縮策略在不同的設(shè)備上都可以有效提高模型的推理速度。
最近在語(yǔ)音識(shí)別領(lǐng)域中,基于Conformer模型做int8量化的工作并不多。本文參考了最新在語(yǔ)音領(lǐng)域中提出的Integer-Only zero-shot量化[24]方式進(jìn)行了對(duì)比。該方法在Jasper模型[25]和QuartzNet模型[26]有著不錯(cuò)的壓縮性能,且對(duì)模型的準(zhǔn)確率沒(méi)有較大影響。而在Conformer 模型上對(duì)詞錯(cuò)誤率造成了較大的影響。如表8 所示是zero-shot 量化與本文改進(jìn)后的量化針對(duì)Conformer模型進(jìn)行量化的結(jié)果對(duì)比。
通過(guò)觀(guān)察表8 可以看出,相比Integer-Only zeroshot 量化,本文改進(jìn)后的量化對(duì)模型所造成的精度損失較小且模型壓縮倍數(shù)也較為顯著。經(jīng)測(cè)試其推理速度也有著不錯(cuò)的提升。
表8 基于Conformer模型不同量化方式的對(duì)比Tab.8 Comparison of different quantization methods based on the Conformer model
本文,根據(jù)端到端語(yǔ)音識(shí)別模型參數(shù)較多的問(wèn)題進(jìn)行了分析探究。為保證模型精度損失不受到較大影響的情況下,盡可能地壓縮模型的大小,探究了三種壓縮策略。首先對(duì)模型量化進(jìn)行了改進(jìn),改進(jìn)優(yōu)勢(shì)在于一方面去除了一般量化方式中前期范圍統(tǒng)計(jì)和變換的這一耗時(shí)的過(guò)程,簡(jiǎn)化了整體的量化操作過(guò)程。另一方面較大程度上控制模型量化過(guò)程中所造成的精度損失。此外,根據(jù)模型結(jié)構(gòu)的特點(diǎn),對(duì)模型的前饋網(wǎng)絡(luò)模塊進(jìn)行基于權(quán)重通道的結(jié)構(gòu)化剪枝,針對(duì)多頭自注意力模塊通過(guò)奇異值分解來(lái)實(shí)現(xiàn)低秩近似,將大規(guī)模的矩陣分解為小規(guī)模的矩陣運(yùn)算,來(lái)進(jìn)一步降低模型中的參數(shù)量。并根據(jù)這些策略進(jìn)行了相關(guān)實(shí)驗(yàn),探究了在保證精度損失不受到較大影響情況下,盡可能地降低模型的大小,提高模型的推理速度。通過(guò)在不同設(shè)備上對(duì)模型的識(shí)別速度進(jìn)行了測(cè)試,結(jié)果表明相比于基線(xiàn)在其字錯(cuò)誤率上升小于3%的情況下,模型推理識(shí)別的速度約提升3~4倍。驗(yàn)證了我們改進(jìn)后的量化結(jié)合其他壓縮策略可以有效提高端到端語(yǔ)音識(shí)別模型的推理識(shí)別速度。