我想要一天分享一點「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
有鑑於此會執行:
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 前與後的維度不變。