色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專欄

          EEPW首頁(yè) > 博客 > 小白看得懂的 Transformer (圖解)(2)

          小白看得懂的 Transformer (圖解)(2)

          發(fā)布人:數(shù)據(jù)派THU 時(shí)間:2023-03-19 來(lái)源:工程師 發(fā)布文章
          通過(guò)矩陣運(yùn)算實(shí)現(xiàn)自注意力機(jī)制


          第一步是計(jì)算查詢矩陣、鍵矩陣和值矩陣。為此,我們將將輸入句子的詞嵌入裝進(jìn)矩陣X中,將其乘以我們訓(xùn)練的權(quán)重矩陣(WQ,WK,WV)。

          圖片

          x矩陣中的每一行對(duì)應(yīng)于輸入句子中的一個(gè)單詞。我們?cè)俅慰吹皆~嵌入向量 (512,或圖中的4個(gè)格子)和q/k/v向量(64,或圖中的3個(gè)格子)的大小差異。


          最后,由于我們處理的是矩陣,我們可以將步驟2到步驟6合并為一個(gè)公式來(lái)計(jì)算自注意力層的輸出。圖片自注意力的矩陣運(yùn)算形式


          “大戰(zhàn)多頭怪”


          通過(guò)增加一種叫做“多頭”注意力(“multi-headed” attention)的機(jī)制,論文進(jìn)一步完善了自注意力層,并在兩方面提高了注意力層的性能:


          1.它擴(kuò)展了模型專注于不同位置的能力。在上面的例子中,雖然每個(gè)編碼都在z1中有或多或少的體現(xiàn),但是它可能被實(shí)際的單詞本身所支配。如果我們翻譯一個(gè)句子,比如“The animal didn’t cross the street because it was too tired”,我們會(huì)想知道“it”指的是哪個(gè)詞,這時(shí)模型的“多頭”注意機(jī)制會(huì)起到作用。


          2.它給出了注意力層的多個(gè)“表示子空間”(representation subspaces)。接下來(lái)我們將看到,對(duì)于“多頭”注意機(jī)制,我們有多個(gè)查詢/鍵/值權(quán)重矩陣集(Transformer使用八個(gè)注意力頭,因此我們對(duì)于每個(gè)編碼器/****有八個(gè)矩陣集合)。這些集合中的每一個(gè)都是隨機(jī)初始化的,在訓(xùn)練之后,每個(gè)集合都被用來(lái)將輸入詞嵌入(或來(lái)自較低編碼器/****的向量)投影到不同的表示子空間中。

          圖片

          在“多頭”注意機(jī)制下,我們?yōu)槊總€(gè)頭保持獨(dú)立的查詢/鍵/值權(quán)重矩陣,從而產(chǎn)生不同的查詢/鍵/值矩陣。和之前一樣,我們拿X乘以WQ/WK/WV矩陣來(lái)產(chǎn)生查詢/鍵/值矩陣。


          如果我們做與上述相同的自注意力計(jì)算,只需八次不同的權(quán)重矩陣運(yùn)算,我們就會(huì)得到八個(gè)不同的Z矩陣。

          圖片

          這給我們帶來(lái)了一點(diǎn)挑戰(zhàn)。前饋層不需要8個(gè)矩陣,它只需要一個(gè)矩陣(由每一個(gè)單詞的表示向量組成)。所以我們需要一種方法把這八個(gè)矩陣壓縮成一個(gè)矩陣。那該怎么做?其實(shí)可以直接把這些矩陣拼接在一起,然后用一個(gè)附加的權(quán)重矩陣WO與它們相乘。圖片

          這幾乎就是多頭自注意力的全部。這確實(shí)有好多矩陣,我們?cè)囍阉鼈兗性谝粋€(gè)圖片中,這樣可以一眼看清。圖片

          既然我們已經(jīng)摸到了注意力機(jī)制的這么多“頭”,那么讓我們重溫之前的例子,看看我們?cè)诶渲芯幋a“it”一詞時(shí),不同的注意力“頭”集中在哪里:圖片

          當(dāng)我們編碼“it”一詞時(shí),一個(gè)注意力頭集中在“animal”上,而另一個(gè)則集中在“tired”上,從某種意義上說(shuō),模型對(duì)“it”一詞的表達(dá)在某種程度上是“animal”和“tired”的代表。


          然而,如果我們把所有的attention都加到圖示里,事情就更難解釋了:圖片

          使用位置編碼表示序列的順序


          到目前為止,我們對(duì)模型的描述缺少了一種理解輸入單詞順序的方法。


          為了解決這個(gè)問(wèn)題,Transformer為每個(gè)輸入的詞嵌入添加了一個(gè)向量。這些向量遵循模型學(xué)習(xí)到的特定模式,這有助于確定每個(gè)單詞的位置,或序列中不同單詞之間的距離。這里的直覺(jué)是,將位置向量添加到詞嵌入中使得它們?cè)诮酉聛?lái)的運(yùn)算中,能夠更好地表達(dá)的詞與詞之間的距離。圖片

          為了讓模型理解單詞的順序,我們添加了位置編碼向量,這些向量的值遵循特定的模式。


          如果我們假設(shè)詞嵌入的維數(shù)為4,則實(shí)際的位置編碼如下:

          圖片

          尺寸為4的迷你詞嵌入位置編碼實(shí)例


          這個(gè)模式會(huì)是什么樣子?


          在下圖中,每一行對(duì)應(yīng)一個(gè)詞向量的位置編碼,所以第一行對(duì)應(yīng)著輸入序列的第一個(gè)詞。每行包含512個(gè)值,每個(gè)值介于1和-1之間。我們已經(jīng)對(duì)它們進(jìn)行了顏色編碼,所以圖案是可見(jiàn)的。

          圖片

          20字(行)的位置編碼實(shí)例,詞嵌入大小為512(列)。你可以看到它從中間分裂成兩半。這是因?yàn)樽蟀氩糠值闹涤梢粋€(gè)函數(shù)(使用正弦)生成,而右半部分由另一個(gè)函數(shù)(使用余弦)生成。然后將它們拼在一起而得到每一個(gè)位置編碼向量。


          原始論文里描述了位置編碼的公式(第3.5節(jié))。你可以在 get_timing_signal_1d()中看到生成位置編碼的代碼。這不是唯一可能的位置編碼方法。然而,它的優(yōu)點(diǎn)是能夠擴(kuò)展到未知的序列長(zhǎng)度(例如,當(dāng)我們訓(xùn)練出的模型需要翻譯遠(yuǎn)比訓(xùn)練集里的句子更長(zhǎng)的句子時(shí))。



          *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



          關(guān)鍵詞: AI

          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉