GPT是OpenAI推出來的一系列語言模型,全稱為Generative Pre-trained Transformer,目前已經到了第4代,GPT-4,它的核心本質依然是語言模型。
從結構來看,這是數據決定的。
對於transformer 和模型來說,大模型成功的關鍵,在於如何在大量的文本數據上做無監督學習。
其實,對於文本數據進行建模的思路一直很清晰,那就是語言模型,也就是
p(w1,w2,...,wt)=p(w1)p(w2w1)...p(wtw1,w2,...,wt?1)
這是因為語言天然就有序列性,用條件概率來分解聯合分布是非常自然的選擇。對於條件概率,也就是所謂的next token 問題,自然適合用rnn或者表達能力更強的transformer 來解決。
其實其圖像本身並沒有簡單的序列性,強行建模成next visual token 問題,並用transformer 來解決不一定是最優方案。起碼在當前的ViT模型中,包括 transformer,我們用的還是雙向注意力,而不是單向注意力。
假如說,我們給定token序列 u1,u2,...,un,語言模型輸出概率 p(u1,u2,...,un),表示這是一個句子(或片段)的概率。
還可以將這個概率模型展開成條件概率形式:
p(u1,u2,...,un)=p(u1)∏i=2np(uiu1,u2,...,ui?1)
或者我們進行簡化,引入馬爾可夫鏈,每個條件概率隻觀察前 k個token,就得到近似公式:
p(u1,u2,...,un)=p(u1)∏i=2np(uiui?k,ui?k+1,...,ui?1)
如果已知 p(uiu1,u2,...,ui?1)或者 p(uiui?k,ui?k+1,...,ui?1),就能夠得到 p(u1,u2,...,un),因此語言模型還可以等價定義為 p(uiu1,u2,...,ui?1)或者 p(uiui?k,ui?k+1,...,ui?1)。這樣的語言模型正好能夠完成文本生成的任務:
給定前面若乾個單詞,預測下一個單詞是什麽;
然後模型將預測的單詞加入到給定單詞序列,繼續預測下一個;
如此遞歸直到預測下一個單詞為結束符號或達到要求長度。
如果一開始給定的單詞序列為我們提問的一個問句,我們認為它的後續輸出為問題的答案,那這個語言模型就變成了一個問答系統,ChatGPT的本質正是如此。
Transformer block架構,每一個block包含一個Self-子層和一個FFN子層。每個子層還包含一個殘差連接和LN操作。Self-子層可以是Single-Head ,也可以是Multi-head ,
Self-的計算如下:(1)(X)=WvX?Softmax[(WkX)?(WqX)dk]=WvX?P
其中三個分別對應query、key、value的投影矩陣形狀為 Wq∈Rdq×d,Wk∈Rdk×d,Wv∈Rdv×d,且對於單頭情況有 dq=dk=dv=d。矩陣 P∈Rn×n就是所謂的矩陣,每一列是一個歸一化的權重向量,對應一個token,表示該token的向量可以通過n個輸入的value向量加權求和獲得,n個權重值就是這一列向量。
如果 dq=dk=d≥n,那麽給定任意的列滿秩矩陣 X∈Rd×n和任意的正列隨機矩陣(positive column stochastic matrix,即每個元素為正,且每一列元素之和為1,都是一個概率分布)P∈Rn×n,則總是存在 d×d的矩陣 Wq和 Wk滿足如下等式(即有解)
(3)Softmax[(WkX)?(WqX)dk]=P
如果 dq=dk=d