設置 | 登錄 | 註冊

目前共有2篇帖子。

自己寫了一遍GPT

1樓 悄悄打开魔盒 2024-7-22 23:45
難度還是不小的,有一些隱藏的坑


模型流程:


1. 文字序列首先被分成token,把token的序號輸入模型, 輸入張量的維數為(B,T), B是批次大小(也就是同時處理幾段文字),T是文字的長度


2. 分別對token和位置進行編碼,每個token序號都映射為維數為C的向量,每個位置(不超過某個最大值T_max)也映射為維數為C的向量,這樣我們得到了兩個維數為(B,T,C)的張量,再把兩個張量相加,得到一個維數為(B,T,C)的張量用於後續處理


3. 把張量輸入到順次連接的Transformer塊中。一個Transformer塊有nH個Transformer頭,每個頭輸出的維數為(B,T,C/nH),它們並起來維數仍然為(B,T,C), 計算後再經過LayerNorm正則化,再經過兩層線性層和再一次正則化,得到的結果仍是維數為(B,T,C)的張量,這樣的張量再次輸入到下一個Transformer塊。


3.1. 其中,注意力頭內部的機制是Transformer最精妙的地方。同一組張量輸入到三個尺寸相同的線性層中,分別得到Q,K,V三個張量,它們分別表示query,key,value,然後使用公式

softmax(M+QK^T/sqrt{N})V

得到輸出結果。其中,M是casual mask,表示屏蔽了未來的token,只根據過去信息進行預測。


4. 使用一個線性層得到logits,它表示未歸一化的token概率, 形狀為(B, N_tokens), 其中N_tokens是不同token的總量


5. 在推理時,用softmax把logits轉化為概率,並依照概率採樣下一個token. 然後,把新token加到context的末尾再次運行1~5步驟,如此循環就可以生成文本。在訓練時,使用交叉熵函數,計算logits和真實的下一個token之間的交叉熵損失並進行梯度反傳,更新模型參數。

2樓 啊啊是谁都对 2024-7-23 07:39
這應該是一個相對簡明的GPT原理說明貼

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。