偽類網(wǎng)站hyein seo官網(wǎng)
Zipformer?是kaldi 團(tuán)隊于2024研發(fā)的序列建模模型。相比較于 Conformer、Squeezeformer、E-Branchformer等主流 ASR 模型,Zipformer 具有效果更好、計算更快、更省內(nèi)存等優(yōu)點(diǎn)。并在 LibriSpeech、Aishell-1 和 WenetSpeech 等常用數(shù)據(jù)集上取得了當(dāng)時最好的 ASR 結(jié)果。
目錄
一.方法
1. Down sampled encoder structure
2. Zipformer block
3. BiasNorm
4. Swoosh 激活函數(shù)
5. ScaledAdam
論文地址:https://arxiv.org/pdf/2310.11230.pdf
項目地址:https://github.com/k2-fsa/icefall/tree/master/egs/librispeech/ASR/zipformer
一.方法
Zipformer的整體框架如下圖所示。
不同于 Conformer 只處理固定幀率 25Hz ,Zipformer 采用了1個類似于 U-Net 的結(jié)構(gòu),在不同幀率上學(xué)習(xí)時域表征。
首先,Conv-Embed 將輸入的 100Hz 的聲學(xué)特征下采樣為 50 Hz 的特征序列;然后,由 6 個連續(xù)的 encoder stack 分別在 50Hz、25Hz、12.5Hz、6.25Hz、12.5Hz 和 25Hz 的采樣率下進(jìn)行時域建模。除了第1個 stack 外,其他的 stack 都采用了降采樣的結(jié)構(gòu)。在 stack 與 stack 之間,特征序列的采樣率保持在 50Hz。不同的 stack 的 embedding 維度不同,中間stack 的 embedding 維度更大。每個 stack 的輸出通過截斷或者補(bǔ)零的操作,來對齊下1個 stack 的維度。Zipformer 最終輸出的維度,取決于 embedding 維度最大的stack。
1. Down sampled encoder structure
?Conv-Embed
使用3個2-D卷積層,其時間×頻率步長分別為1×2、2×2和1×2,輸出通道分別為8、32和128。隨后,利用了一個類似于Nextformer的ConvNeXt層,該層由1個kernel大小為7×7的深度卷積、1個具有384個輸出通道的點(diǎn)卷積、1個SwooshL激活函數(shù)和1個具有128個輸出通道的點(diǎn)卷積組成。在ConvNeXt模塊上應(yīng)用了殘差連接。最后,使用1個線性層,后面跟著1個BiasNorm,以調(diào)整特征維度,使其與第1個stack相匹配。
?Downsampled stacks
對于降采樣的 encoder stack,成對出現(xiàn)的 Downsample 和 Upsample 模塊負(fù)責(zé)將特征長度對稱地縮放。當(dāng)降采樣率為 2 時,Downsample 學(xué)習(xí)2個標(biāo)量權(quán)重用來將相鄰的2幀加權(quán)求和;Upsample 將每1幀復(fù)制為2幀。最后,通過1個 Bypass 模塊整合?stack 的輸入和輸出。
2. Zipformer block
Zipformer block的結(jié)構(gòu)如下圖左側(cè)所示。
Zipformer block深度大約是 Conformer block 的2倍。具體地,block 輸入先被送到 MHAW 模塊計算注意力權(quán)重attention weights,attention weights作為NLA 模塊和 SA 模塊的輸入。同時,block 輸入也被送到 feed-forward 模塊,后接 NLA 模塊和2個連續(xù)的模塊組(SA + convolution + feed-forward)。最后,由1個 BiasNorm 模塊對block 輸出進(jìn)行 normalize操作。除了殘差連接,每個 Zipformer block 使用2個 Bypass 模型,用于結(jié)合 block 輸入和中間模塊的輸出,分別位于 block 的中間和尾部。
?Non-Linear Attention
上圖右側(cè)為Non-Linear Attention的結(jié)構(gòu)。利用 MHAW 模塊計算好的注意力權(quán)重,沿著時間軸匯聚不同幀的向量。?具體而言,使用3個 linear 將輸入轉(zhuǎn)換為 A、B、C,每個的維度為輸入維度的 3/4 倍。模塊的輸出為?,⊙ 表示點(diǎn)乘,attention 表示利用1個注意力頭的權(quán)重對不同幀匯聚, linear layer 負(fù)責(zé)恢復(fù)特征的維度。
?Bypass
Bypass 模塊學(xué)習(xí)1個逐通道的權(quán)重?,結(jié)合模塊輸入
?和模塊輸出
?。在訓(xùn)練早期通過約束???
的最小值讓模塊接近 “straight-through” 有助于穩(wěn)定模型訓(xùn)練。
3. BiasNorm
提出 BiasNorm 模塊來替換 LayerNorm:
其中,?是可學(xué)習(xí)的逐通道的 bias,?
是通道的均方根值,
是1個可學(xué)習(xí)的標(biāo)量。
4. Swoosh 激活函數(shù)
提出2個新的激活函數(shù)用于代替 Swish,分別稱為 SwooshR 和 SwooshL。
在 SwooshR 函數(shù)中,偏移值 0.313261687 是為了讓函數(shù)經(jīng)過原點(diǎn);在 SwooshL函數(shù)中,偏移量 0.035 是經(jīng)過實驗得到的。
如下圖所示,SwooshL 近似于 SwooshR 向右偏移得到的。
把 SwooshL 用在?“normally-off” 的模塊(feed-forward 和?ConvNeXt)中,把 SwooshR 用在convolution 和 Conv-Embed 中其余的部分。
5. ScaledAdam
提出1個 Adam 優(yōu)化器的?parameter-scale-invariant?版本,稱為 ScaledAdam,可以加快模型收斂。
令??為我們想要優(yōu)化的 loss 函數(shù),它對參數(shù)?
是可導(dǎo)的。在每個步驟
?,Adam 計算參數(shù)梯度?
,并更新梯度的一階動量
??和二階動量
?,此處,
,?
表示控制動量更新的系數(shù)。Adam 在步驟 t 的參數(shù)更新量
為:
?通常由外部的 LR schedule 控制,?
為偏置糾正項。
?Scaling update
為了確保不同 scale 的參數(shù)的相對變化量??一致,在參數(shù)更新量中引入?yún)?shù)的 scale,來放縮更新量
:
?Learning parameter scale
從更新到
對參數(shù)
帶來的變化為
。
其中,是學(xué)習(xí)率
的縮放參數(shù),值為0.1時有助于穩(wěn)定訓(xùn)練。
?Eden schedule
Eden schedule的公式如下:
其,t為 step,e為 epoch,和
分別控制學(xué)習(xí)率在哪個 step 和 epoch 開始快速下降,
表示1個線性 warmup,起點(diǎn)為
,經(jīng)過
個 step 變?yōu)?1。
表示當(dāng)沒有 warmup 的情況下學(xué)習(xí)率的最大值。
?Efficient implementation
為了加快 ScaledAdam 計算,我們將參數(shù)根據(jù) shape 分組,按照 batch 進(jìn)行參數(shù)更新。