時(shí)小虎, 袁宇平, 呂貴林, 常志勇, 鄒元君
(1. 吉林大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 長春 130012; 2. 吉林大學(xué) 大數(shù)據(jù)和網(wǎng)絡(luò)管理中心, 長春 130012;3. 中國第一汽車集團(tuán)有限公司研發(fā)總院 智能網(wǎng)聯(lián)開發(fā)院, 長春 130011; 4. 吉林大學(xué) 生物與農(nóng)業(yè)工程學(xué)院, 長春 130022; 5. 長春中醫(yī)藥大學(xué) 醫(yī)藥信息學(xué)院, 長春 130117)
近年來, 隨著人機(jī)智能交互的快速發(fā)展, 自動(dòng)語音識別(automatic speech recognition, ASR)作為智能交互應(yīng)用的一種關(guān)鍵技術(shù), 已經(jīng)在各種應(yīng)用場景下凸顯重要作用, 如在語音搜索、 語音助手、 會議記錄、 智能服務(wù)、 機(jī)器人等方面均應(yīng)用廣泛. 隨著深度學(xué)習(xí)的發(fā)展, 基于深度學(xué)習(xí)的方法表現(xiàn)出了比傳統(tǒng)的如高斯混合模型、 隱Markov模型等方法更優(yōu)越的性能. 但基于深度學(xué)習(xí)的語音識別網(wǎng)絡(luò), 特別是端到端模型, 通常有具有數(shù)百萬甚至高達(dá)數(shù)十億的參數(shù), 占用大量內(nèi)存, 在運(yùn)行時(shí)也需要較大的計(jì)算資源, 僅適用于部署在專業(yè)服務(wù)器上. 例如, QuartzNet模型包含1.89×107的參數(shù)[1], Conformer Transducer語音識別模型包含1.188×108的參數(shù)[2], 基于Transformer的聲學(xué)模型包含2.70×108以上的參數(shù)[3].
隨著移動(dòng)、 家居、 車載等智能設(shè)備的廣泛使用, 產(chǎn)生了巨大的資源受限設(shè)備智能交互需求. 而語音作為人們?nèi)粘=涣髯钭匀坏姆绞? 在智能交互中扮演著重要角色. 通常語音識別模型在設(shè)備端的部署無需與服務(wù)器進(jìn)行數(shù)據(jù)傳輸, 將模型部署在本地設(shè)備上具有更好的實(shí)時(shí)性、 安全性和隱私保護(hù)能力. 但由于資源受限設(shè)備的存儲空間有限, 同時(shí)計(jì)算能力較弱, 無法將龐大的深度學(xué)習(xí)語音識別模型在資源受限的環(huán)境中實(shí)際部署. 如何在盡量保持性能的同時(shí), 減小模型的大小、 降低運(yùn)行延遲成為自動(dòng)語音識別的重要課題. 本文對近年來關(guān)于自動(dòng)語音識別模型的壓縮算法進(jìn)行總結(jié)和綜述, 將其歸納為知識蒸餾、 模型量化、 網(wǎng)絡(luò)剪枝、 矩陣分解、 參數(shù)共享以及組合模型幾類方法, 并進(jìn)行了系統(tǒng)綜述, 為模型在不同條件和場景下的部署提供可選的解決方案.
知識蒸餾, 主要通過模仿高延遲、 高精度的大型神經(jīng)網(wǎng)絡(luò)行為, 訓(xùn)練得到低延遲的輕量神經(jīng)網(wǎng)絡(luò). 其中, 高延遲、 高精度的大型網(wǎng)絡(luò)稱為教師模型, 低延遲的輕量網(wǎng)絡(luò)稱為學(xué)生模型. 在知識蒸餾過程中, 教師模型的知識遷移到學(xué)生模型, 從而提高學(xué)生模型的性能, 以獲得低延遲、 低內(nèi)存、 高性能的學(xué)生模型. 一般的知識蒸餾過程如圖1所示. 首先, 訓(xùn)練一個(gè)教師模型, 根據(jù)輸入特征輸出軟標(biāo)簽的概率分布; 然后, 學(xué)生模型通過軟標(biāo)簽?zāi)7陆處熌P偷男袨? 軟標(biāo)簽不僅包含了正確的類別分布, 也反應(yīng)了類似類別之間的關(guān)系, 通常比獨(dú)熱編碼的真實(shí)標(biāo)簽包含更豐富的信息. 真實(shí)標(biāo)簽的使用通常對訓(xùn)練有益, 因此可以將根據(jù)真實(shí)標(biāo)簽訓(xùn)練的語音識別損失與知識蒸餾損失相結(jié)合, 共同進(jìn)行學(xué)生模型的優(yōu)化.
圖1 知識蒸餾的一般過程Fig.1 General process of knowledge distillation
傳統(tǒng)的混合ASR系統(tǒng)需要首先進(jìn)行幀的對齊, 然后再進(jìn)行識別, 而目前的主流方法已經(jīng)發(fā)展到端到端模型, 不再需要進(jìn)行幀對齊, 而是直接將輸入語音轉(zhuǎn)換為對應(yīng)文本. 端到端模型主要可分為連接時(shí)序分類方法(connectionist temporal classification, CTC)[4]、 循環(huán)神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)換器(recurrent neural network transducer, RNN-T)[5]、 基于注意力的編碼器-解碼器(attention-based encoder-decoder, AED)[6]3類. 因此按照被壓縮的原始ASR系統(tǒng)劃分, 基于知識蒸餾技術(shù)的壓縮模型主要分為傳統(tǒng)的混合ASR壓縮模型和端到端壓縮模型, 后者又包括CTC壓縮模型、 RNN-T壓縮模型和AED壓縮模型, 主要方法如圖2所示. 下面將依次介紹這幾類方法, 最后介紹多個(gè)教師的知識蒸餾方法.
圖2 基于知識蒸餾的方法Fig.2 Methods based on knowledge distillation
傳統(tǒng)的混合ASR系統(tǒng)包括基于高斯混合和隱Markov的混合模型(Gaussian mixed model-hidden Markov model, GMM-HMM)[7], 基于深度神經(jīng)網(wǎng)絡(luò)和隱Markov的混合模型(deep neural networks-hidden Markov model, DNN-HMM)[8]等. 已有學(xué)者應(yīng)用知識蒸餾技術(shù)對傳統(tǒng)的ASR系統(tǒng)進(jìn)行了模型壓縮. 如Li等[9]首先嘗試應(yīng)用教師-學(xué)生學(xué)習(xí)方法對DNN-HMM混合系統(tǒng)實(shí)現(xiàn)了語音識別蒸餾. DNN-HMM混合系統(tǒng)的訓(xùn)練需要每個(gè)輸入聲學(xué)幀的輸出標(biāo)簽, 即進(jìn)行幀對齊, 所以幀級知識蒸餾是教師用來指導(dǎo)學(xué)生模型非常自然的方式. 因此, 文獻(xiàn)[9]和文獻(xiàn)[10]都是通過最大限度地減少教師和學(xué)生的幀級輸出分布之間的Kullback-Leibler(KL)散度進(jìn)行幀級知識蒸餾. 在訓(xùn)練中, 只需優(yōu)化學(xué)生模型的參數(shù), 最小化KL散度即等價(jià)于最小化交叉熵. 但幀級訓(xùn)練未考慮語音數(shù)據(jù)的順序性質(zhì), 因此ASR模型的序列訓(xùn)練會比幀級訓(xùn)練產(chǎn)生更好的性能[11]. 針對DNN-HMM混合模型, Wong等[12]通過最小化最大互信息(maximum mutual information, MMI)損失與學(xué)生和教師假設(shè)級后驗(yàn)概率之間的KL散度的加權(quán)平均值, 并將假設(shè)后驗(yàn)分解為語言模型和聲學(xué)模型, 以調(diào)整混合ASR架構(gòu)中后驗(yàn)分布的動(dòng)態(tài)范圍, 更好地進(jìn)行序列訓(xùn)練, 實(shí)現(xiàn)了序列級的知識蒸餾.
CTC損失函數(shù)的目標(biāo)是最大化正確標(biāo)簽的后驗(yàn)概率, 不執(zhí)行嚴(yán)格的時(shí)間對齊. CTC模型的后驗(yàn)概率分布是尖銳的, 多數(shù)幀發(fā)出高概率的空白標(biāo)簽, 只有少數(shù)發(fā)出非空白目標(biāo)標(biāo)簽概率較高的幀可以有效地訓(xùn)練學(xué)生模型, 因此將幀級知識蒸餾應(yīng)用于基于CTC的ASR系統(tǒng)會降低性能[13]. 此外, 由于CTC無幀對齊的特點(diǎn), 因此即使對相同樣本, 出現(xiàn)尖峰的時(shí)間也不相同, 使幀級知識蒸餾在優(yōu)化時(shí)難以收斂[14]. Takashima等[14]提出使用教師模型的N-best假設(shè)在CTC框架中進(jìn)行序列級知識蒸餾, 將N-best假設(shè)的CTC損失進(jìn)行加權(quán)求和作為訓(xùn)練學(xué)生模型的蒸餾損失. 這種方法能有效提升學(xué)生模型的性能, 但需要對每個(gè)N-best假設(shè)計(jì)算CTC損失, 訓(xùn)練成本較高. 文獻(xiàn)[15]提出了基于格的序列級知識蒸餾方法, 相比基于N-best的方法能抑制訓(xùn)練時(shí)間的增加. 針對CTC峰值時(shí)間的分歧, Kurata等[16]通過在教師模型雙向長短期記憶網(wǎng)絡(luò)(bi-directional long short-term memory, BiLSTM)的幀窗口中, 選擇匹配學(xué)生模型單向長短期記憶網(wǎng)絡(luò)(uni-directional long short-term memory, UniLSTM)當(dāng)前幀的分布, 放松幀對齊的嚴(yán)格假設(shè). 但基于BiLSTM CTC模型中的峰值通常早于UniLSTM CTC的情況, 不具有普適性. 因此, Kurata等[17]進(jìn)一步提出了引導(dǎo)CTC訓(xùn)練, 能明確地引導(dǎo)學(xué)生模型的峰值時(shí)間與教師模型對齊, 在輸出符號集合相同的情況下, 可用于不同的架構(gòu). Tian等[18]設(shè)計(jì)了一種空白幀消除機(jī)制解決KL散度應(yīng)用于CTC后驗(yàn)分布的困難, 引入兩階段知識蒸餾過程, 第一階段利用余弦相似性執(zhí)行特征級知識蒸餾, 第二階段利用提出的一致聲學(xué)表示學(xué)習(xí)方法和空白幀消除機(jī)制執(zhí)行Softmax級知識蒸餾. Yoon等[19]深入探索了異構(gòu)教師和學(xué)生之間的知識蒸餾, 首先使用表示級知識蒸餾初始化學(xué)生模型參數(shù), 利用幀加權(quán)選擇教師模型關(guān)注的幀; 然后用Softmax級知識蒸餾傳輸Softmax預(yù)測. 文獻(xiàn)[19]研究表明, 在CTC框架下蒸餾幀級后驗(yàn)概率分布, 使用L2損失比傳統(tǒng)的KL散度更合適, 原因在于兩個(gè)分布之間的L2距離總是有界的, 所以可提高蒸餾損失的數(shù)值穩(wěn)定性. 進(jìn)一步, Yoon等[20]又在學(xué)生網(wǎng)絡(luò)中添加多個(gè)中間CTC層, 采用文獻(xiàn)[19]提出的Softmax級蒸餾將教師的知識遷移到中間的CTC層.
在RNN-T模型中, 由于其損失由編碼器生成的特征和輸出符號的所有可能對齊求和獲得的負(fù)對數(shù)條件概率給出, 所以需要更精妙地設(shè)計(jì)蒸餾損失才能實(shí)現(xiàn)這類模型的知識蒸餾. Panchapagesan等[21]提出了一種基于格的蒸餾損失, 該損失由教師和學(xué)生條件概率在整個(gè)RNN-T輸出概率格上的KL散度之和給出. 為提升效率, 損失被計(jì)算為粗粒度條件概率之間的KL散度之和, 粗粒度條件概率指僅跟蹤“y”(在特定輸出步驟的正確標(biāo)簽)、 “空白”標(biāo)簽(用于在時(shí)間方向上改變對齊)和其余標(biāo)簽的條件概率, 將維度從輸出詞典大小粗粒度到三維. Zhao等[22]提出了一種基于對數(shù)課程模塊替換的知識蒸餾方法, 應(yīng)用模塊替換壓縮教師模型, 將包含較多層的教師模型替換為包含較少層的學(xué)生模型. 該方法可以使學(xué)生和教師在梯度級別進(jìn)行互動(dòng), 能更有效地傳播知識. 此外, 由于它只使用RNN-T損失作為訓(xùn)練損失, 沒有額外的蒸餾損失, 所以不需要調(diào)整多個(gè)損失項(xiàng)之間的權(quán)重. Vignesh等[23]探索教師和學(xué)生編碼器的共同學(xué)習(xí)以對RNN-T語音識別模型進(jìn)行壓縮, 共享共同解碼器的同時(shí)協(xié)同訓(xùn)練, 并指出其優(yōu)于預(yù)先訓(xùn)練的靜態(tài)教師. Transducer的編碼器輸出具有很高的熵, 并包含有關(guān)聲學(xué)上相似的詞片混淆的豐富信息, 當(dāng)與低熵解碼器輸出相結(jié)合以產(chǎn)生聯(lián)合網(wǎng)絡(luò)輸出時(shí), 這種豐富的信息被抑制. 因此引入輔助損失, 以從教師Transducer的編碼器中提取編碼器信息. Rathod等[24]提出了對Conformer Transducer的多級漸近式壓縮方法, 將前一階段獲得的學(xué)生模型作為當(dāng)前階段的教師模型, 為該階段蒸餾出一個(gè)新的學(xué)生模型, 重復(fù)上述過程直到達(dá)到理想尺寸.
由于AED語音識別模型的解碼相對更簡單, 所以知識蒸餾方法較容易推廣到AED模型. Wu等[25]通過將mixup數(shù)據(jù)增強(qiáng)方法與Softmax級知識蒸餾相結(jié)合, 對Speech-Transformer語音識別模型進(jìn)行壓縮, 從數(shù)據(jù)角度優(yōu)化蒸餾, 使學(xué)生模型在更真實(shí)的數(shù)據(jù)分布上訓(xùn)練. Mun’im等[26]研究了對于AED模型的序列級蒸餾, 通過beam search為每個(gè)樣本生成多個(gè)假設(shè), 然后將教師生成的假設(shè)作為偽標(biāo)簽在同一數(shù)據(jù)集上訓(xùn)練學(xué)生模型. Lü等[27]認(rèn)為目前流行的知識蒸餾方法只蒸餾了教師模型中有限數(shù)量的塊, 未能充分利用教師模型的信息, 因此提出了一種基于特征的多層次蒸餾方法, 以學(xué)習(xí)教師模型所有塊總結(jié)出的特征表示. 此外, 還將任務(wù)驅(qū)動(dòng)的損失函數(shù)集成到解碼器的中間塊中以提高學(xué)生模型的性能.
多個(gè)不同的ASR系統(tǒng)通常會產(chǎn)生給定音頻樣本的不同轉(zhuǎn)錄, 對多個(gè)教師模型進(jìn)行集成可以包含更多的補(bǔ)充信息, 給學(xué)生模型提供多樣的可學(xué)習(xí)分布, 常具有更好的性能. Chebotar等[28]通過平均單獨(dú)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型的上下文相關(guān)狀態(tài)后驗(yàn)概率構(gòu)建高精度的教師模型, 然后使用標(biāo)準(zhǔn)交叉熵訓(xùn)練學(xué)生模型. Gao 等[29]遵循交叉熵?fù)p失和CTC損失與錯(cuò)誤率沒有直接關(guān)系的事實(shí), 考慮序列級錯(cuò)誤率定義了3種蒸餾策略, 將錯(cuò)誤率指標(biāo)集成到教師選擇中, 直接面向語音識別的相關(guān)評價(jià)指標(biāo)蒸餾和優(yōu)化學(xué)生模型. Yang等[30]提出將集成教師模型的精髓知識傳播到學(xué)生模型, 只保留教師模型的前k個(gè)輸出, 并且以多任務(wù)的方式使用教師模型產(chǎn)生的軟標(biāo)簽和真實(shí)標(biāo)簽訓(xùn)練學(xué)生模型.
將模型權(quán)重和激活量化為低精度, 能達(dá)到壓縮神經(jīng)網(wǎng)絡(luò)、 減少內(nèi)存占用、 降低計(jì)算成本的目的. 量化方案按階段不同可劃分為后訓(xùn)練量化(post-training quantization, PTQ)和量化感知訓(xùn)練(quantization-aware training, QAT)兩種. 后訓(xùn)練量化將已經(jīng)訓(xùn)練好的浮點(diǎn)模型轉(zhuǎn)換成低精度模型, 在不重新訓(xùn)練網(wǎng)絡(luò)的前提下獲取網(wǎng)絡(luò)的量化參數(shù), 通常會導(dǎo)致模型性能下降, 其量化過程如圖3(A)所示. 量化感知訓(xùn)練在量化的過程中, 對網(wǎng)絡(luò)進(jìn)行訓(xùn)練, 從而使網(wǎng)絡(luò)參數(shù)能更好地適應(yīng)量化帶來的影響, 減輕性能損失, 其量化過程如圖3(B)所示. 量化感知訓(xùn)練會向全精度模型中插入偽量化節(jié)點(diǎn), 偽量化節(jié)點(diǎn)先對權(quán)重或激活進(jìn)行量化得到真實(shí)值對應(yīng)的整數(shù)值, 然后反量化回浮點(diǎn)表示, 模擬量化產(chǎn)生的誤差, 使模型在訓(xùn)練時(shí)適應(yīng)量化操作. 在偽量化過程中產(chǎn)生的量化權(quán)重/激活, 無法進(jìn)行梯度計(jì)算, 一般通過直通估計(jì)器(straight through estimator, STE)將梯度傳回偽量化前的權(quán)重/激活上. 無論是后訓(xùn)練量化, 還是量化感知訓(xùn)練, 其主要目的是為了確定縮放因子和零點(diǎn)兩個(gè)參數(shù), 以用于對全精度(32-bit)模型的量化.
圖3 模型量化流程Fig.3 Flow chart of model quantization
線性量化一般可表示為
(1)
其中:r表示32-bit浮點(diǎn)值;q表示量化值;S為縮放因子, 表示浮點(diǎn)數(shù)和整數(shù)之間的比例關(guān)系;Z表示零點(diǎn), 即FP32浮點(diǎn)數(shù)r=0對應(yīng)的量化值; round為四舍五入取整操作. 反量化公式為
(2)
其中S和Z的計(jì)算方法為
(3)
(4)
rmax和rmin分別為r的最大值和最小值,qmax和qmin分別為q的最大值和最小值.
如上所述, 基于模型量化的語音識別模型壓縮方法也分為后訓(xùn)練量化方法和量化感知訓(xùn)練方法. 后訓(xùn)練量化一般使用部分真實(shí)數(shù)據(jù)作為校準(zhǔn)數(shù)據(jù)集對全精度模型進(jìn)行前向傳播, 獲得網(wǎng)絡(luò)各層權(quán)重和激活的數(shù)據(jù)分布特性(如最大、 最小值), 用于后續(xù)量化參數(shù)的計(jì)算. McGraw等[31]將模型參數(shù)量化為8-bit整型表示, 采用均勻線性量化器, 假設(shè)給定范圍內(nèi)的值均勻分布. 首先找到原始參數(shù)的最小值和最大值, 然后使用一個(gè)簡單的映射公式確定一個(gè)比例因子, 當(dāng)乘以參數(shù)時(shí), 該比例因子在較小的精度尺度上均勻地?cái)U(kuò)展值, 從而獲得原始參數(shù)的量化版本. He等[32]使用一種更簡單的量化方法, 不再有明確的零點(diǎn)偏移, 因此可假設(shè)值分布在浮點(diǎn)零的周圍, 避免了在執(zhí)行較低精度的運(yùn)算(如乘法)前必須應(yīng)用零點(diǎn)偏移, 從而加快了執(zhí)行速度. 不同于一般的后訓(xùn)練量化方法, Kim等[33]提出了一種僅整數(shù)zero-shot量化方法, 先生成合成數(shù)據(jù)再進(jìn)行校準(zhǔn), 將合成數(shù)據(jù)輸入到目標(biāo)模型中以確定激活的截?cái)喾秶? 即使無法訪問訓(xùn)練和/或驗(yàn)證數(shù)據(jù), 也能達(dá)到較好的性能. 后訓(xùn)練量化無需微調(diào)模型, 相對更簡便; 而量化感知訓(xùn)練通過微調(diào)網(wǎng)絡(luò)學(xué)習(xí)得到量化參數(shù), 通常能保證量化損失精度更小, 因此量化感知訓(xùn)練成為量化研究的主流.
下面介紹采用量化感知訓(xùn)練對語音識別模型進(jìn)行壓縮的方法. 針對偽量化方法在量化下計(jì)算權(quán)重梯度較難, 從而忽略了反向傳播過程中梯度計(jì)算的量化損失問題, Nguyen等[34]提出了一種基于絕對余弦正則化的新的量化感知訓(xùn)練方法, 在模型權(quán)重上施加一個(gè)與量化模型相似的分布, 將權(quán)重值驅(qū)動(dòng)到量化水平. 針對偽量化在訓(xùn)練時(shí)和推理時(shí)會產(chǎn)生數(shù)值差異的缺點(diǎn)(在訓(xùn)練時(shí)執(zhí)行浮點(diǎn)運(yùn)算, 推理時(shí)執(zhí)行整數(shù)運(yùn)算), Ding等[35]用原生量化感知訓(xùn)練得到了4-bit的Conformer ASR模型, 原生量化感知訓(xùn)練使用整數(shù)運(yùn)算執(zhí)行量化操作(如矩陣乘法), 使訓(xùn)練和推理時(shí)的準(zhǔn)確性沒有任何區(qū)別. Fasoli等[36]研究表明, 對基于LSTM的大規(guī)模語音識別模型進(jìn)行4-bit量化常會伴隨嚴(yán)重的性能下降, 為此提出了一種新的量化器邊界感知裁剪(bound aware clipping, BAC), 可根據(jù)dropout設(shè)置對稱邊界, 選擇性地將不同的量化策略應(yīng)用于不同的層. Zhen等[37]針對現(xiàn)有的量化感知訓(xùn)練方法需要預(yù)先確定和固定量化質(zhì)心的缺點(diǎn), 提出了一種無正則化、 模型無關(guān)的通用量化方案, 能在訓(xùn)練期間確定合適的量化質(zhì)心. 上述研究都將模型量化為4-bit或8-bit, Xiang等[38]提出了二進(jìn)制的深度神經(jīng)網(wǎng)絡(luò)(DNN)模型用于語音識別, 并實(shí)現(xiàn)了高效的二進(jìn)制矩陣乘法, 使得量化結(jié)果能在真實(shí)的硬件平臺上實(shí)現(xiàn)加速效果.
通過近似分解矩陣或張量也是神經(jīng)網(wǎng)絡(luò)壓縮的一種重要方法. 主要思想是將原來大的權(quán)重矩陣或張量分解為多個(gè)小的權(quán)重矩陣或張量, 用低秩矩陣或張量近似原有的權(quán)重矩陣或張量. 如圖4所示, 將m×n大小的權(quán)重矩陣A, 分解為m×r大小的權(quán)重矩陣B和r×n大小的權(quán)重矩陣C的乘積.一般要求r遠(yuǎn)小于m和n, 因此參數(shù)量由m×n大幅度縮減到r×(m+n).
圖4 矩陣分解Fig.4 Matrix decomposition
一些學(xué)者采用低秩分解的方法進(jìn)行了ASR模型的壓縮. 如Sainath等[39]認(rèn)為由于網(wǎng)絡(luò)經(jīng)過大量輸出目標(biāo)的訓(xùn)練以實(shí)現(xiàn)良好性能, 因此網(wǎng)絡(luò)參數(shù)大多數(shù)位于最終的權(quán)重層, 所以對DNN網(wǎng)絡(luò)最后的權(quán)重層使用低秩矩陣分解, 將大小為m×n、 秩為r的矩陣A分解為A=B×C, 其中B是大小為m×r的滿秩矩陣,C是大小為r×n的滿秩矩陣.Mori等[40]在端到端ASR框架中對門控循環(huán)單元的權(quán)重矩陣進(jìn)行Tensor-Train分解, 能用多個(gè)低秩張量表示循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)層內(nèi)的密集權(quán)重矩陣. 按照Tensor-Train格式, 如果對每個(gè)k∈{1,2,…,d}和k維索引jk∈{1,2,…,nk}, 存在一個(gè)矩陣Gk[jk], 則k維張量W中的每個(gè)元素可表示為
W(j1,j2,…,jd-1,jd)=G1[j1]·G2[j2]·…·Gd-1[jd-1]·Gd[jd].
(5)
網(wǎng)絡(luò)剪枝是對深度學(xué)習(xí)模型進(jìn)行修剪的一種常見技術(shù), 其通過衡量權(quán)重的貢獻(xiàn)確定保留或舍棄權(quán)重. 剪枝方法可分為非結(jié)構(gòu)化和結(jié)構(gòu)化兩類: 非結(jié)構(gòu)化剪枝去除單個(gè)權(quán)重; 結(jié)構(gòu)化剪枝按結(jié)構(gòu)單元(如神經(jīng)元節(jié)點(diǎn)、 卷積核、 通道等)對權(quán)重進(jìn)行修剪. 圖5為網(wǎng)絡(luò)剪枝的示意圖, 其中圖5(C)以神經(jīng)元節(jié)點(diǎn)剪枝為例對結(jié)構(gòu)化剪枝進(jìn)行了描述, 相當(dāng)于刪除權(quán)重矩陣的整行或整列. 剪枝由3個(gè)步驟組成: 第一步是從預(yù)訓(xùn)練的完整神經(jīng)網(wǎng)絡(luò)進(jìn)行初始化; 第二步根據(jù)一定標(biāo)準(zhǔn)對某些權(quán)重連接進(jìn)行刪除, 將網(wǎng)絡(luò)逐步稀疏化; 第三步微調(diào)得到的稀疏網(wǎng)絡(luò), 一般將修剪過的權(quán)重及其梯度設(shè)置為零. 交替執(zhí)行第二步和第三步, 直到達(dá)到預(yù)定的稀疏水平. 基于網(wǎng)絡(luò)剪枝的語音識別模型壓縮方法也分為非結(jié)構(gòu)化和結(jié)構(gòu)化兩類.
圖5 網(wǎng)絡(luò)剪枝示意圖Fig.5 Schematic diagram of network pruning
非結(jié)構(gòu)化剪枝也稱為稀疏剪枝, 因?yàn)槠鋾?dǎo)致稀疏的矩陣. Yu等[43]利用非結(jié)構(gòu)化剪枝對上下文相關(guān)的DNN-HMM語音識別模型進(jìn)行壓縮, 將執(zhí)行減少DNN連接數(shù)量的任務(wù)作為軟正則化和凸約束優(yōu)化問題的目標(biāo), 并進(jìn)一步提出了新的數(shù)據(jù)結(jié)構(gòu)利用隨機(jī)稀疏模式節(jié)省存儲且加快解碼. Wu等[44]提出了動(dòng)態(tài)稀疏神經(jīng)網(wǎng)絡(luò), 無需單獨(dú)訓(xùn)練就能獲得不同稀疏度級別的模型, 以滿足不同規(guī)格的硬件和不同延遲的要求, 該方法使用基于梯度的剪枝修剪權(quán)重, 以權(quán)重×梯度的L1范數(shù)作為修剪標(biāo)準(zhǔn). 非結(jié)構(gòu)化剪枝通常會產(chǎn)生具有競爭力的性能, 但由于其不規(guī)則的稀疏性通常只有在特定的硬件上才能產(chǎn)生加速效果, 而結(jié)構(gòu)化剪枝的部署相對更容易. He等[45]提出了一種節(jié)點(diǎn)剪枝方法對DNN語音識別模型進(jìn)行壓縮, 提出了幾種節(jié)點(diǎn)重要性函數(shù)對DNN的隱層節(jié)點(diǎn)按分?jǐn)?shù)排序, 刪除那些不重要節(jié)點(diǎn)的同時(shí), 將其對應(yīng)的輸入和輸出連接同時(shí)刪除. Ochiai等[46]利用Group Lasso正則化對DNN-HMM語音識別系統(tǒng)中的DNN隱層節(jié)點(diǎn)進(jìn)行選擇, 測試了兩種類型的Group Lasso正則化, 一種用于輸入權(quán)重向量, 另一種用于輸出權(quán)重向量. Takeda等[47]集成了權(quán)重和節(jié)點(diǎn)活動(dòng)的熵, 提出了衡量節(jié)點(diǎn)重要性的分?jǐn)?shù)函數(shù), 以用于不重要節(jié)點(diǎn)的選擇, 每個(gè)節(jié)點(diǎn)的權(quán)重熵考慮節(jié)點(diǎn)的權(quán)重?cái)?shù)量及其模式, 每個(gè)節(jié)點(diǎn)活動(dòng)的熵用于查找輸出完全不變的節(jié)點(diǎn). Liu等[48]通過剪枝學(xué)習(xí)一個(gè)雙模式的語音識別模型, 即剪枝、 稀疏的流式模型和未剪枝、 密集的非流式模型. 在訓(xùn)練過程中兩個(gè)模型共同學(xué)習(xí), 除作用在流式模型上的剪枝掩碼, 兩種模式共享參數(shù), 使用Group Lasso正則化進(jìn)行結(jié)構(gòu)化剪枝分組變量的選擇.
除上述常用的壓縮方法, 還有利用參數(shù)共享壓縮語音識別模型的研究, 其主要思路是使多個(gè)結(jié)構(gòu)相同的網(wǎng)絡(luò)層共享參數(shù), 從而達(dá)到降低模型參數(shù)的作用. 其方法框架如圖6所示, 編碼器由n個(gè)結(jié)構(gòu)完全相同的編碼器層構(gòu)成, 所有編碼器層共享參數(shù), 因此編碼器的參數(shù)量從n×Q壓縮到Q,Q為每個(gè)編碼器層的參數(shù)量. Transformer模型的編碼器和解碼器各自堆疊了多個(gè)塊, 更深的堆疊結(jié)構(gòu)可獲得更好的識別結(jié)果, 但它會顯著增加模型大小, 也會增加解碼延遲. Li等[49]在堆疊結(jié)構(gòu)中共享參數(shù), 而不是在每層引入新的參數(shù), 以壓縮Transformer語音識別模型的參數(shù), 先創(chuàng)建第一個(gè)編碼器塊和解碼器塊的參數(shù), 其他塊重用第一個(gè)塊的參數(shù). 共享參數(shù)方法不會減少計(jì)算量, 只減少了參數(shù)量, 但緩存交換的減少也可以加快訓(xùn)練和解碼過程. 為減輕參數(shù)數(shù)量減少導(dǎo)致的性能下降, 該方法中還引入了語音屬性以增強(qiáng)訓(xùn)練數(shù)據(jù).
圖6 編碼器參數(shù)共享Fig.6 Encoder parameter sharing
上述各方法從不同方面壓縮模型: 知識蒸餾通過改變模型結(jié)構(gòu)壓縮模型; 模型量化通過將權(quán)重由全精度轉(zhuǎn)換為低精度表示縮小模型大小, 對激活量化能提高計(jì)算效率, 達(dá)到進(jìn)一步的加速; 分解方法通過對權(quán)重分解壓縮模型; 網(wǎng)絡(luò)剪枝通過丟棄不必要的權(quán)重壓縮模型; 參數(shù)共享通過重用參數(shù)壓縮模型. 這些方法都起到了縮小內(nèi)存占用、 降低計(jì)算成本、 減少推理延遲的作用. 一些研究人員嘗試組合以上幾種不同類型的方法, 以獲得更好的效果. 如Li等[50]通過聯(lián)合知識蒸餾和剪枝兩種技術(shù)對DNN模型進(jìn)行壓縮, 通過優(yōu)化交叉熵?fù)p失進(jìn)行知識蒸餾, 在剪枝過程中對所有參數(shù)進(jìn)行排序, 然后修剪低于全局閾值的權(quán)重. Yuan等[51]結(jié)合剪枝和量化方法壓縮語音識別模型, 與大多數(shù)逐步將權(quán)重矩陣置零的方法不同, 剪枝過程中保持修剪權(quán)重的值, 通過掩碼控制剪枝的元素, 修剪的權(quán)重元素可在稍后的訓(xùn)練階段恢復(fù); 這項(xiàng)工作探索了兩種量化方案: 混合量化和整數(shù)量化, 兩種方案都以后訓(xùn)練量化的形式出現(xiàn). Gao等[52]利用跨層權(quán)重共享、 非結(jié)構(gòu)化剪枝和后訓(xùn)練量化壓縮模型, 通過對稱量化將權(quán)重和激活映射到8位整數(shù). Letaifa等[53]探索剪枝和量化方法的組合壓縮Transformer模型, 分3個(gè)步驟完成: 首先設(shè)置剪枝率, 然后剪枝模型, 最后量化模型.
綜上所述, 深度學(xué)習(xí)由于具有強(qiáng)大的表示能力在語音識別方面取得了顯著成果, 增加模型容量和使用大數(shù)據(jù)集被證明是提高性能的有效方式. 隨著物聯(lián)網(wǎng)的迅速發(fā)展, 在資源受限設(shè)備上部署基于深度學(xué)習(xí)的語音識別系統(tǒng)有越來越多的需求, 在許多場景都需要借助語音識別進(jìn)行便捷、 智能的交互, 如智能家電、 智能客服等. 而面對設(shè)備內(nèi)存、 計(jì)算能力和功耗的資源受限, 需要對模型進(jìn)行壓縮才能實(shí)現(xiàn)部署. 本文對現(xiàn)有的自動(dòng)語音識別模型壓縮方法進(jìn)行了全面的綜述, 根據(jù)所使用的壓縮技術(shù)將其分為知識蒸餾、 模型量化、 矩陣分解、 網(wǎng)絡(luò)剪枝、 參數(shù)共享和組合模型幾種類型, 并對不同類型方法進(jìn)行了系統(tǒng)綜述, 可為語音識別模型的許多實(shí)際應(yīng)用場景中如何在資源受限設(shè)備上實(shí)現(xiàn)壓縮和部署提供有益的指導(dǎo).