transformer架構可能看起來很恐怖,您也可能在YouTube或部落格中看到了各種解釋。但是,在我的部落格中,我将通過提供一個全面的數學示例闡明它的原理。通過這樣做,我希望簡化對transformer架構的了解。
那就開始吧!
Inputs and Positional Encoding
讓我們解決最初的部分,在那裡我們将确定我們的輸入并計算它們的位置編碼。
Step 1 (Defining the data)
第一步是定義我們的資料集 (語料庫)。
在我們的資料集中,有3個句子 (對話) 取自《權力的遊戲》電視劇。盡管這個資料集看起來很小,但它已經足以幫助我們了解之後的數學公式。
Step 2 (Finding the Vocab Size)
為了确定詞彙量,我們需要确定資料集中的唯一單詞總數。這對于編碼 (即将資料轉換為數字) 至關重要。
其中N是所有單詞的清單,并且每個單詞都是單個token,我們将把我們的資料集分解為一個token清單,表示為N。
獲得token清單 (表示為N) 後,我們可以應用公式來計算詞彙量。
具體公式原理如下:
使用set操作有助于删除重複項,然後我們可以計算唯一的單詞以确定詞彙量。是以,詞彙量為23,因為給定清單中有23個獨特的單詞。
Step 3 (Encoding and Embedding)
接下來為資料集的每個唯一單詞配置設定一個整數作為編号。
在對我們的整個資料集進行編碼之後,是時候選擇我們的輸入了。我們将從語料庫中選擇一個句子以開始:
“When you play game of thrones”
作為輸入傳遞的每個字将被表示為一個編碼,并且每個對應的整數值将有一個關聯的embedding聯系到它。
- 這些embedding可以使用谷歌Word2vec (單詞的矢量表示) 找到。在我們的數值示例中,我們将假設每個單詞的embedding向量填充有 (0和1) 之間的随機值。
- 此外,原始論文使用embedding向量的512次元,我們将考慮一個非常小的次元,即5作為數值示例。
現在,每個單詞embedding都由5維的embedding向量表示,并使用Excel函數RAND() 用随機數填充值。
Step 4 (Positional Embedding)
讓我們考慮第一個單詞,即 “when”,并為其計算位置embedding向量。位置embedding有兩個公式:
第一個單詞 “when” 的POS值将為零,因為它對應于序列的起始索引。此外,i的值 (取決于是偶數還是奇數) 決定了用于計算PE值的公式。次元值表示embedding向量的次元,在我們的情形下,它是5。
繼續計算位置embedding,我們将為下一個單詞 “you” 配置設定pos值1,并繼續為序列中的每個後續單詞遞增pos值。
找到位置embedding後,我們可以将其與原始單詞embedding聯系起來。
我們得到的結果向量是e1+p1,e2+p2,e3+p3等諸如此類的embedding和。
Transformer架構的初始部分的輸出将在之後用作編碼器的輸入。
編碼器
在編碼器中,我們執行複雜的操作,涉及查詢(query),鍵(key)和值(value)的矩陣。這些操作對于轉換輸入資料和提取有意義的表示形式至關重要。
在多頭注意力(multi-head attention)機制内部,單個注意層由幾個關鍵元件組成。這些元件包括:
請注意,黃色框代表單頭注意力機制。讓它成為多頭注意力機制的是多個黃色盒子的疊加。出于示例的考慮,我們将僅考慮一個單頭注意力機制,如上圖所示。
Step 1 (Performing Single Head Attention)
注意力層有三個輸入
- Query
- Key
- Value
在上面提供的圖中,三個輸入矩陣 (粉紅色矩陣) 表示從将位置embedding添加到單詞embedding矩陣的上一步獲得的轉置輸出。另一方面,線性權重矩陣 (黃色,藍色和紅色) 表示注意力機制中使用的權重。這些矩陣的列可以具有任意數量的維數,但是行數必須與用于乘法的輸入矩陣中的列數相同。在我們的例子中,我們将假設線性矩陣 (黃色,藍色和紅色) 包含随機權重。這些權重通常是随機初始化的,然後在訓練過程中通過反向傳播和梯度下降等技術進行調整。是以讓我們計算 (Query, Key and Value metrices):
一旦我們在注意力機制中有了query, key, 和value矩陣,我們就繼續進行額外的矩陣乘法。
現在,我們将結果矩陣與我們之前計算的值矩陣相乘:
如果我們有多個頭部注意力,每個注意力都會産生一個次元為 (6x3) 的矩陣,那麼下一步就是将這些矩陣級聯在一起。
在下一步中,我們将再次執行類似于用于擷取query, key, 和value矩陣的過程的線性轉換。此線性變換應用于從多個頭部注意獲得的級聯矩陣。