視頻網(wǎng)站是怎么做的深圳seo優(yōu)化排名
零、前言
對(duì)于transformer,網(wǎng)上的教程使用記號(hào)、術(shù)語不一 。
最關(guān)鍵的一點(diǎn),網(wǎng)上各種圖的簡化程度不一 (畫個(gè)圖怎么能這么偷懶) ,所以我打算自己手畫一次圖。
看到的最和善(但是不是那么靠譜,我懷疑圖有誤)的transformer教程:一文了解Transformer全貌(圖解Transformer)
注意: 全連接層在概念上輸入必須是一維向量,但是實(shí)際實(shí)現(xiàn)的時(shí)候我們會(huì)采用批處理將多個(gè)樣本的向量組拼成矩陣,用矩陣乘法加速運(yùn)算。如果用單一樣本的向量來標(biāo)注全文可能更清晰,但是為了更貼近實(shí)用,約定全文的輸入長這個(gè)樣子而不是向量:
其實(shí),輸入也不是矩陣。。。輸入是3維張量,三個(gè)維度分別是batch_size, number(當(dāng)前用到的詞數(shù)), dimension(特征維度)
其中,number沒有畫出來,你可以按number=1來想,當(dāng)成矩陣方便一些
一、前置基礎(chǔ)中的前置基礎(chǔ)
- RNN
- 殘差連接(無論什么書,通常會(huì)在CNN的ResNet這一節(jié)中講)
- 歸一化
- 注意力機(jī)制
二、前置基礎(chǔ)
- Encoder-Decoder模型
- 自注意力
- 多頭注意力
簡單介紹一下,
-
Encoder-Decoder模型是為了解決RNN容易忘記前文的問題(即使是LSTM也可能存在這個(gè)問題)
-
自注意力
(其中Q、K、V是什么屬于“注意力機(jī)制”的內(nèi)容,假設(shè)你已經(jīng)了解了這一塊內(nèi)容并能看懂上面的圖)
可以發(fā)現(xiàn),自注意力的作用是把X轉(zhuǎn)換為固定形狀的M,便于處理 -
多頭注意力
多頭注意力本身并不限制使用的是什么注意力來連接起來,Transformer中用的是自注意力。
多頭注意力將多個(gè)自注意力Concat,是因?yàn)檫@樣“并列”的結(jié)構(gòu)能優(yōu)化最長最短路,而且這樣能表達(dá)的注意力機(jī)制更豐富
三、Transformer
Transformer相比起Seq2Seq模型,區(qū)別在于,Seq2Seq中RNN承擔(dān)了Encoder、Decoder的角色,事實(shí)上,Encoder、Decoder可以由多種途徑實(shí)現(xiàn),Transformer中RNN不復(fù)存在,用的是多頭注意力。因此Transformer是一種純注意力機(jī)制的模型。
接下來在一個(gè)具體場景中學(xué)習(xí)Transformer。
目標(biāo):做文本翻譯
數(shù)據(jù)集:包含翻譯前后的文本,分別為Source和Target
1. 輸入原文本Source
Source是單詞,所以不能直接扔進(jìn)神經(jīng)網(wǎng)絡(luò)去,需要先編碼成向量,既不要損失詞本身的信息,也不要損失詞所在語句的位置的信息,那就干脆都編碼,然后加起來。
2. Encoder
首先先經(jīng)過多頭注意力機(jī)制,然后Add&norm
- Add指的是殘差連接,使梯度流動(dòng)更平穩(wěn),防止梯度消失/爆炸
- norm本身歸一化的目的是為了防止協(xié)變量偏移,提高泛化能力,歸一化分為兩種(層歸一化對(duì)batch_size歸一化,批歸一化對(duì)dimension進(jìn)行歸一化),這里用的是層歸一化
- 關(guān)鍵:多頭注意力機(jī)制對(duì)于注意力的表達(dá)更豐富,且本身“注意力”的含義就是對(duì)哪個(gè)詞(所編碼的向量)更有偏向(注意力分?jǐn)?shù),即權(quán)重矩陣),也就是說中英文語序這種問題不存在,是靠注意力機(jī)制來不定順序翻譯的
矩陣M是原本是三維張量,漏掉的n并不是隨意漏的,而是因?yàn)榉g不應(yīng)當(dāng)和n相關(guān)(后面還會(huì)具體解釋的),所以這一部分是為了丟掉n這個(gè)維度。
3. 輸入目標(biāo)文本Target
和Source是一樣的,但是Target需要有**“Mask”**,為了避免模型過早“偷窺”到Target后面的內(nèi)容
4.Decoder
上圖也展示了Decoder的第一個(gè)多頭注意力,還有第二個(gè),第二個(gè)與之前的Encoder相連
回憶注意力機(jī)制,現(xiàn)在把Encoder想成環(huán)境條件Key和Value,Decoder中已經(jīng)出現(xiàn)的Target(沒有被Mask的部分)詞,你可能會(huì)對(duì)其中感興趣也就是Query,那么你就懂上圖為什么這么連了。
接著是熟悉的Dense,和Encoder一樣。
用一個(gè)Softmax決定生成哪個(gè)詞,這里再次體現(xiàn)了Dense類似于1×1卷積層的功能。
5. 反向傳播進(jìn)行訓(xùn)練
圖中打勾的部分是有參數(shù)能學(xué)的部分,由于輸出是Softmax所以用交叉熵?fù)p失函數(shù),鏈?zhǔn)椒▌t反向傳播更新參數(shù)。
注意一點(diǎn),反向傳播是等到所有詞都依次通過一遍transformer后,再反向傳播,以確保模型學(xué)習(xí)到了整個(gè)序列的上下文信息。
由于是翻譯任務(wù)(有別于gpt那種生成式),還可以發(fā)現(xiàn)一個(gè)特點(diǎn):翻譯只能提前終止,不能延后終止(如果一次只能生成一個(gè)詞,那么生成序列長度小于等于原序列)。