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