2024-06-28|閱讀時間 ‧ 約 24 分鐘

AI說書 - 從0開始 - 63

我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。


回顧 AI說書 - 從0開始 - 62 說:如果我參照原始 Google 釋出的 Transformer 論文的參數,在三個字的句子情況下,Single-Head Attention的輸出維度將是 1 x 3 x 64


可是在原始 Google 釋出的 Transformer 論文中,不僅僅是用 Single-Head Attention 而是用 Multi-Head Attention ,而且有 8 個 Head,這意味著輸出維度將是 8 x 3 x 64


為了後續方便說明,我這裡先隨意產生相同維度的矩陣:

z0h1 = np.random.random((3, 64))
z1h2 = np.random.random((3, 64))
z2h3 = np.random.random((3, 64))
z3h4 = np.random.random((3, 64))
z4h5 = np.random.random((3, 64))
z5h6 = np.random.random((3, 64))
z6h7 = np.random.random((3, 64))
z7h8 = np.random.random((3, 64))


然後真實情況下,這些矩陣會做合併,詳見 AI說書 - 從0開始 - 53

  • 這個圖示顯示 Head = 2,且只看句子中的第 i 個字
  • 對於第一個 Head ,其結果為 bi,1
  • 對於第二個 Head ,其結果為 bi,2
  • 這兩個向量會做串接
  • 同理適用於整個句子的字,而不僅限於第 i 個字


有鑑於此會執行:

Output = np.hstack((z0h1, z1h2, z2h3, z3h4, z4h5, z5h6, z6h7, z7h8))


然後會發現維度變成 3 x 512 ,這個 512 數字的由來就是因為我把 8 個 64 維的東西做串接,所以 8 x 64 = 512,那這 3 x 512 的 3 代表三個字,而 512 代表的維度和原始字串代表維度一樣,也就是 Embedding 和 Positional Encoding 後的維度,這是刻意為之,代表經過 Attention Module 前與後的維度不變。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.