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