# Transformer介紹 ## 前言 Transformer是由Google在2017年提出的一個用於sequence to sequence的模型,直至今日仍是生成式AI不可或缺的技術,不管是文字生成、圖片生成、甚至是音樂生成都會用到它。因此,這篇文章會簡單但完整的介紹Transformer的原理。 ## Transformer的主要架構 Transformer可分為兩個主要部分,Encoder理解輸入,Decoder生成輸出。Attention為其關鍵技術。  圖1: Transformer的主要結構,左邊一大塊是Encoder,右邊則是Decoder ### 將文字變成數值 這步驟在圖1中是Input Embedding層加上Positional Encoding,這層的主要用意是讓文字變成能夠計算的東西。  圖2: 文字變成數值示意圖 在文句輸入進這層後,首先會先將其分token。為求簡單,我們在圖2中假設`"A very smart student who is dancing"`這句話分詞(紅框)後,對到的token分別是藍色的數字,也就是變成`[1,2,3,4,5,6,7]`。 接著,模型會在一個很大的embedding表中找到那個數字代表的向量,也就是: $\overrightarrow{V_{n}}=\textnormal{EmbedTable[n]}$ 再把這個詞的向量加上位置資訊,也就是Positional Encoding: $\overrightarrow{E_{n}}=\textnormal{PosEnc}(\overrightarrow{V_{n}})$ :::info 關於Positional Encoding,其實就是一個數學函式,有興趣請見: [hunter-j-phillips](https://medium.com/@hunter-j-phillips/positional-encoding-7a93db4109e6) :::: 至此,模型可以知道每個字在哪,但不知道每個字的關聯。 ### 理解Self Attention Transformer是以很多層Self-Attention組合的,每層Self-Attention會將每個Embedding互相交流。 Attention的公式非常簡單,如下: $\textnormal{Attention}(Q, K, V) = \textnormal{softmax}(\frac{QK^T}{\sqrt{d_k}})V$ 但寫成這樣,一般人是看不懂的。所以我們先分解各項的功用。 $\overrightarrow{Q_{n}}=\textnormal{W}_Q\overrightarrow{E_{n}}$ $\overrightarrow{K_{n}}=\textnormal{W}_K\overrightarrow{E_{n}}$ $\overrightarrow{V_{n}}=\textnormal{W}_V\overrightarrow{E_{n}}$ 試想一個情境,每個字都會問所有其他字一個問題$Q$,他們各自也都會回答一個答案$K$,我們可以藉由計算$Q$,$K$的接近程度(內積),來知道兩個字之間對這個問題的相關性。 接著就依據相關性,把原本問問題的那個字的向量,移到更接近回答的那個字的向量。當然不能直接位移,要位移的方向是"對於這個問題,回答的那個字的意義$V$"。 現在來看一個例子 - 假設模型讓$\textnormal{W}_Q$學到要問"誰是形容我的字" - $\textnormal{W}_K$則是學到答"我是形容你的字" - 分數越高代表那列越像是形容那行的字  圖3: 文字所對到的向量  圖4: QK內積的結果,紅點代表分數高的,本張圖中所代表的意義為very形容smart;smart形容student;dancing形容student 接著我們拿第四行(student的$\overrightarrow{Q_{4}}$)為例,其embedding再加上$\overrightarrow{V}$乘以他的分數$S$,這個$S$就是圖4由QK計算出的矩陣。 $\Delta E_4=\displaystyle\sum_{i=1}^{7}S_{4,i}\cdot\overrightarrow{V_{i}}$ $\overrightarrow{E_{4}'}=\overrightarrow{E_{4}}+\Delta E_4$  對每個embedding都做一次這個動作,即完成一次的Self-Attention。 :::warning 這裡以"誰是形容我的字"當作問的問題,但實際情況是$W_Q$、$W_K$、$W_V$會學到問各種問題,這裡只是以一個簡單的例子幫助理解。 ::: ### MLP層 在Transformer中,Self-Attention負責理解文句,MLP負責儲存實際資訊(記憶)。 ## 思考參數量(以GPT3為例) $W_Q$和$W_K$會將詞向量(d=12288)變換為低維(d=128),$W_V$會將詞向量轉換為同維度的向量(因為是位移量)。可計算出各矩陣需要的參數量: $\textnormal{Parameter}(W_Q)=\textnormal{Parameter}(W_K)=12288\cdot128$ $\textnormal{Parameter}(W_V)=12288\cdot12288$ 這樣非常不完美,$W_V$的參數量遠大於$W_Q$和$W_K$,於是工程師們用了一個叫做低秩矩陣分解(Low Rank Decomposition)的東西,把$W_V$分解成兩個矩陣相乘。  ## Multihead Self-Attention Multihead其實就是一次問很多問題,也就是一次計算很多個$\Delta E_n$,假設有$k$個頭,則: $\overrightarrow{E_{n}'}=\overrightarrow{E_{n}}+\Delta E_n^{(1)}+\Delta E_n^{(2)}+\dotsb+\Delta E_n^{(k)}$ ## Cross-Attention Cross Attention可以用在翻譯問題上,假設將英文翻成法文,就是$W_Q$乘上輸入的詞向量(英文),$W_K$乘上產生的詞向量(法文)。 ## 結語 Transformer實為劃時代的新技術,其內部原理雖可用簡單一條式子帶過,但想要了解其精隨,還是要分解為一步一步。在初次接觸Transformer地當時的我還是小高一,遇到這些要消化也是非常的艱苦。希望這篇文章能幫助想認識AI的大家,如果有不懂之處請告訴我,我肯定把這篇文章修得老嫗能解。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up