GPT 系列: Transformer 架構入門

ChatGPT 作爲 OpenAI 公司的一款試用產品,最近幾個月火爆整個社會,從小學生、政府官員到新聞媒體工作者等似乎都有參與其中感受它帶來的突破性,部分媒體甚至渲染其可能帶來的變革而引起的悲觀情緒;作爲 IT 從業人員更是需要對 ChatGPT 究竟是如何工作及其基本工作原理和框架有所瞭解,以準備迎接可能開啓的 AGI 新時代;

What Is ChatGPT Doing … and Why Does It Work? 是一位資深 AI 從業者發表的文章,其內容非常非常的多,並且有很多比較抽象說法,其中提到 “ChatGPT 可能以某種方式發現了人類語言和思維中的規律,但純粹從其簡單而又複雜的計算過程來講目前還沒有足夠的理論能解釋它爲什麼能做到,但 ChatGPT 在試用過程中確實表現得令人意外”;

爲了能從技術角度瞭解 ChatGPT 工作原理及其背後的架構,現嘗試從其名稱的 T 說起,GPT 全稱爲 Generative Pre-Trained Transformer,其中 Transformer 代表轉換器模型,Transformer 一詞來自於 2017 年發表的論文 Attention Is All You Need,這篇論文提出了一種新的語言模型架構 Transformer,目前看來,Transformer 模型架構給 AI 行業帶來了革命性的改變,不同語言模型的參數出現指數級的增長,如下圖所示:

Transformer 語言模型架構背後應該做對了什麼,試想 GPT-3 達到 1750 億個參數,按照每個參數 float32 大小來計算,其內存佔用可高達 651.9GB,要想成功訓練及應用這麼龐大的語言模型,沒有優秀的架構是不可能的,也許正是由於 Transformer 架構的出色表現,OpenAI 公司及其創始團隊大力推崇它並讓其模型名稱爲 GPT-3/4 等系列;

一、初識 Transformer 架構

從其經典架構圖來看,主要分左右兩部分,左邊代表 encoder,右邊代表 decoder,並且 encoder 和 decoder 之間只有一個關聯項,其可稱爲 encoder_output,表示 encoder 的輸出結果提供給 decoder 使用;

其中 Nx 代表 encoder 和 decoder 可以有多個這樣具有相同結構的層,GPT-2 中層的總數爲 12 到 48,GPT-3 爲 400;

encoder 每一層都包括兩個子層 Multi-Head Attention 和 Feed Forward,子層之後都有一個 Add&Norm 處理;decoder 除了有 encoder 中兩子層,中間增加了一個 Multi-Head Attention 用來使用 encoder_output;

  1. 關於 Input 和 OutPut Embedding

在進行層處理前有 Input 和 Output Embedding 和 Positional Encoding 過程,decoder 中經過層處理完成後進行 Linear 和 Softmax;

Input 和 Output Embedding 過程可大致理解如下:

人們在屏幕上可看到的任何一個字符或 token,都有一個 unicode 或 uft8 編碼,其編碼相當於整型式的編號;

但在機器學習 NLP 中,一個輸入和輸出可能混合包括不同編碼比如中英文和需要部分前後綴標識比如 ing、pre 等,語言模型在 unicode 編碼之外重新設計一套編碼方式比如 BPE 來描述世界上主要 unicode 字符以生成一個詞彙表,這樣一個詞彙表中詞條的數量 vocab_size,根據語言模型的不同可達 3-5 萬;

人們想要使用語言模型來處理任務時,語言模型首先會根據用戶輸入的字符串,從其設計的詞彙表中找到其對應的編號索引,使用其編號索引來代替真實的字符編碼,因爲某一個字符編碼在不同字符串或不同文章的上下文中代表的含義可能不同,在語言模型中僅僅一個編碼描述其含義往往不夠;

於是人們嘗試使用多個數值來描述某個字符的含義,進而設計了一個可供輸入輸出共享的 [vocab_size, hidden_size] 矩陣,其中 hidden_size 代表一個字符可以使用這麼多個數字來描述其可能包含的特徵和含義,hidden_size 在語言模型中也稱爲 Dmodel,在論文 Attention Is All You Need 中其值爲 512,GPT-2 中爲 768,GPT-3.5 中爲 12288,並且這個矩陣中的內容 / 參數是通過語言模型學習而來;

簡單看來,一個字符或 token 竟然對應高達 12288 個參數來描述其特徵,有點不可思議,但這個參數是一個非常基礎的參數,它直接決定整個模型的大小還有其中所涉及的計算;

Input 和 Output Embedding 的結果就是根據字符或 token 在詞彙表中的編號索引,從詞彙矩陣 [vocab_size, hidden_size] 中換算出其對應的一個大小爲 hidden_size 的向量;換算過程可簡化爲由編號索引轉換成 one_hot [vocab_size]轉置向量,然後與矩陣 [vocab_size, hidden_size] 相乘而得來;

  1. 關於 Linear 和 Softmax

Linear 過程是將一個向量 [1,hidden_size],通過與詞彙矩陣進行轉置相乘得到一個[1,vocab_size] 向量,其每一個值經過 Softmax 計算後,當成概率值來看待,概率值較高的索引所對應的字符或 token 往往作爲語言模型的輸出結果,具體如何從得出的概率值選擇出對應字符或 token,涉及 temperature 或 Greedy 或 Beam_search 算法等;

  1. 關於 Multi-Head Attention

Multi-Head Attention 作爲 Transformer 架構的核心,也是其架構的核心創新點,初步理解起來比較費勁,特別是看到如下公式:

其中 Q、K、V 分別對應一個 [batch_size,length,hidden_size] 向量,其中 batch_size 可理解成有幾個參與計算的句子數,length 爲參與計算的句子中字符的個數,hidden_size 前面已介紹;

head_size 目的在於將 hidden_size 大小的向量平均分成 head_size 份,每一份分別標示爲 head1,headh 等,嚴格來講上面 Scaled Dot-Product Attention 和 Multi-Head Attention 圖中分別標示的 Q、K、V 的向量 shape 是不一樣的,因爲經過平分處理過,但從語義上相同的字母可理解成相同的含義;

至於爲啥要平分後再計算最後 concat 一起,論文中的解釋是允許模型聯合處理來自不同位置的不同子空間的信息描述,如果不使用 MultiHead-Attention 這種方式,使用傳統的只有一個 Attention Head 的話,則會抑制這一點;

  1. 關於 Scaled Dot-Product Attention

從計算流程來看,相對簡單,其中包含兩次 MatMul,一次 SoftMax,一次可選的 Mask 計算,一次 Scale 邏輯;其要實現的目的,在於在一個具有 length 長度的字符串之內,讓每個字符之間進行特徵關聯或在概率上產生聯繫,所以使用 SoftMax 和兩次 MatMul;

Multi-Head Attention 中的 Q、K、V 往往來自當前 encoder 和 decoder 的上一層輸出結果 [batch_size,length,hidden_size],但是在 decoder 中的 encoder-decoder Multi-Head Attention 其 K 和 V 來自 encode_output 即 encoder 的最終輸出,這樣從邏輯上讓 decoder 中 decoder_input 與 encoder 中內容產生關聯;

  1. 關於 Positonal Encoding

其中 pos 表示某個字符在句子中的位置,2i 和 2i+1 分別表示字符對應 [vocab_size] 向量中偶奇位置,其對應的值爲上面公式 PE 計算出來的值,這樣 pos=0,取類似下圖第 0 行的值。

二、Transformer 架構實現探究

爲了便於理解論文中提到的 Transformer 架構實現邏輯,本文使用其中提到的開源項目 tensor2tensor 在 2017.12 發佈的 1.4.0 版本作爲參考;

針對 problem translate_ende_wmt32k 模型,探究 Greedy 算法實現推導過程中的主要邏輯,重點關注輸入輸出參數的 shape 和參與計算的 weights 的 shape 等;

1.Greedy 推導主要流程

輸入 Hello world 和 Goodbye world 爲兩個句子,所以 batch_size=2,TextEncode 後 shape 爲 (2, 5, 1, 1),其中的 5 爲這兩個句子分別按照 bpe 方式編碼後字符個數的最大值;

在執行完成 transformer_encoder 後觸發 while_loop,在其 loop 中初始設定已解碼 ids 爲 0,step 爲 = 0,每調用一次 transformer_decoder,它會爲每一個句子輸出一個字符 id,作爲下一批 ids,同時 step 加 1,step 在 Positional Encodings 時作爲 pos 來使用;

這樣循環一直到 transformer_decoder 輸出 next_ids 爲 EOS=1,則退出 while_loop,將所有輸出過的 ids 轉換成爲字符,結束推導過程;

2.Transformer_encoder 主要流程

其中 compute_qkv 通過將前面的輸入分別進行三次 tf.layers.dense 處理生成 q、k、v;

split_heads 和 combine_heads 通過 transpose 變化矩陣來實現;

3.Transformer_decoder 流程

Transformer_decoder 流程與 Transformer_encoder 的類似,額外增加了一個 encoder_decoder multihead_attention 實現,並且其對應的 compute_qkv 中是由 encoder_output 經過 tf.layers.dense 處理後生成 k、v;

tf.layers.dense 提供高密度的全連接網絡節點計算;

通過累加計算過程中標識出的 weights 可計算出整個模型的參數大小;

  1. 訓練過程

由於訓練時目標輸出 targets 是確定的,一次性將所有 targets 作爲 decoder_input 輸入給 Transformer_decoder,它會使用 decoder_input 和 encoder_output 進行計算,最終輸出 decoder 預測結果;

針對預測結果進行 Linear 處理,然後與目標 targets 進行 softmax_cross_entropy 計算出所有目標對應的 loss 並累加,然後根據目標 targets 中字符數量進行 loss 平均;

將計算出的平均 loss 交給 AdamOptimizer 優化器來進行迭代訓練,計算出最優的參數;

5.Beam_search 推導

Beam_Search 推導過程與 Greedy 算法推導過程主要差別在於:

每一次循環即在一個 step 中會讓 Transformer_decoder 爲每個句子 decode 出 beam_size 個預測結果出來;

在下一次循環 step+1 時則從這 beam_size 個預測結果中選擇概率值在 top_beam 內的結果作爲 next_ids 來推導;

然後根據前後多次循環計算出的結果,按照不同 step 推導結果的組合概率來選擇最終的推導結果輸出;

總的來看,Beam search 的輸出結果會比 Greedy 的更優,但計算代價會更高,具體可參考其算法文檔;

三、參考

Attention Is All You Need

https://arxiv.org/abs/1706.03762

What Is ChatGPT Doing … and Why Does It Work?

https://writings.stephenwolfram.com/2023/02/what-is-chatgpt-doing-and-why-does-it-work/

The Illustrated Transformer

https://jalammar.github.io/illustrated-transformer/

The Annotated Transformer

http://nlp.seas.harvard.edu/annotated-transformer/

Beam Search

https://d2l.ai/chapter_recurrent-modern/beam-search.html

注意力機制 Transformer

https://lulaoshi.info/machine-learning/attention/transformer-attention.html

Neural Networks Part 1: Setting up the Architecture

https://cs231n.github.io/neural-networks-1/

Linear classification: Support Vector Machine, Softmax

https://cs231n.github.io/linear-classify/

Optimization: Stochastic Gradient Descent

https://cs231n.github.io/optimization-1/

Backpropagation, Intuitions

https://cs231n.github.io/optimization-2/

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/M05qas6csTpEOe87OnbgIw