Transformer結(jié)構(gòu)
模型結(jié)構(gòu)如下:
論文地址:https://arxiv.org/abs/1706.03762
這里只用到了Encoder的部分:
1.1 subsample
用兩層卷積進(jìn)行降采樣:
測試:
結(jié)果:
輸入維度:(2,1,28浩村,28)
輸出維度:(2拂共,2,6嗽元,6)
1.2?PositionalEncoding
位置編碼
為了使模型能夠有效利用序列的順序特征,我們需要加入序列中各個Token間相對位置或Token在序列中絕對位置的信息。在這里彤避,我們將位置編碼添加到編碼器和解碼器棧底部的輸入Embedding。由于位置編碼與Embedding具有相同的維度夯辖,因此兩者可以直接相加琉预。其實這里還有許多位置編碼可供選擇,其中包括可更新的和固定不變的蒿褂。
在此項工作中圆米,我們使用不同頻率的正弦和余弦函數(shù):
其中pos是位置,i是維度啄栓。 也就是說娄帖,位置編碼的每個維度都對應(yīng)于一個正弦曲線,其波長形成從2π到10000?2π的等比級數(shù)昙楚。我們之所以選擇了這個函數(shù)近速,是因為我們假設(shè)它能讓模型很容易學(xué)會Attend相對位置,因為對于任何固定的偏移量k, PEpos+k可以表示為PEpos的線性函數(shù)堪旧。
此外削葱,在編碼器和解碼器堆棧中,我們在Embedding與位置編碼的加和上都使用了Dropout機(jī)制崎场。在基本模型上佩耳,我們使用的比率。
如下所示谭跨,位置編碼將根據(jù)位置添加正弦曲線干厚。曲線的頻率和偏移對于每個維度是不同的。
輸出結(jié)果:
1.3?MultiHeadedAttention
Attention
Attention函數(shù)可以將Query和一組Key-Value對映射到輸出螃宙,其中Query蛮瞄、Key、Value和輸出都是向量谆扎。 輸出是值的加權(quán)和挂捅,其中分配給每個Value的權(quán)重由Query與相應(yīng)Key的兼容函數(shù)計算。
我們稱這種特殊的Attention機(jī)制為"Scaled Dot-Product Attention"堂湖。輸入包含維度為dk的Query和Key闲先,以及維度為dv的Value状土。 我們首先分別計算Query與各個Key的點積,然后將每個點積除以 伺糠,最后使用Softmax函數(shù)來獲得Key的權(quán)重蒙谓。
在具體實現(xiàn)時,我們可以以矩陣的形式進(jìn)行并行運(yùn)算训桶,這樣能加速運(yùn)算過程累驮。具體來說,將所有的Query舵揭、Key和Value向量分別組合成矩陣Q谤专、K和V,這樣輸出矩陣可以表示為:
? ? ? ? ? ? ? ? ? ?
兩種最常用的Attention函數(shù)是加和Attention和點積(乘積)Attention午绳,我們的算法與點積Attention很類似置侍,但是的比例因子不同。加和Attention使用具有單個隱藏層的前饋網(wǎng)絡(luò)來計算兼容函數(shù)拦焚。雖然兩種方法理論上的復(fù)雜度是相似的墅垮,但在實踐中,點積Attention的運(yùn)算會更快一些耕漱,也更節(jié)省空間,因為它可以使用高效的矩陣乘法算法來實現(xiàn)抬伺。
雖然對于較小的dk螟够,這兩種機(jī)制的表現(xiàn)相似,但在不放縮較大的dk時峡钓,加和Attention要優(yōu)于點積Attention妓笙。我們懷疑,對于較大的dk能岩,點積大幅增大寞宫,將Softmax函數(shù)推向具有極小梯度的區(qū)域(為了闡明點積變大的原因,假設(shè)q和k是獨立的隨機(jī)變量拉鹃,平均值為 0辈赋,方差 1,這樣他們的點積為? 膏燕,同樣是均值為 0 方差為dk)钥屈。為了抵消這種影響,我們用
來縮放點積坝辫。
“多頭”機(jī)制能讓模型考慮到不同位置的Attention篷就,另外“多頭”Attention可以在不同的子空間表示不一樣的關(guān)聯(lián)關(guān)系,使用單個Head的Attention一般達(dá)不到這種效果近忙。
其中參數(shù)矩陣為 竭业。
這里使用h=8個Head并行的Attention智润,對每一個Head來說有 ,總計算量與完整維度的單個Head的Attention很相近未辆。
????1.不同的head得到多個特征表達(dá)
????2.將所有特征拼接在一起
????3.再一層全連接來降維
代碼:
這里用了8個頭窟绷,,結(jié)果:
1.4?feedforward
全連接將多頭拼接到一起,保證輸入輸出維度相同:
隱藏層有1280個神經(jīng)元鼎姐,驗證結(jié)果:
1.5 models
Subsample降采樣 MultiHeadedAttention多頭注意力?
FeedForward全連接
LayerNorm層歸一化
Dropout
殘差連接
結(jié)果:
model = speech_model()
12個blocks參數(shù)個數(shù):
1個blocks參數(shù)個數(shù):
2?demo
特征提燃佤铩:
結(jié)果:
12個blocks計算之后
結(jié)果
將輸出結(jié)果對應(yīng)到詞典:
得到最終的結(jié)果:
代碼參考:https://github.com/yang123qwe/end2end_chinese_speech_recognition