Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

15 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

exploreGPT - ็บฏPythonๅฎž็Žฐ็š„ Hybrid ๆžถๆž„ (TTT + Transformer)

็บฏPythonๅฎž็Žฐ็š„ Hybrid ๆžถๆž„๏ผŒ็ป“ๅˆ Test Time Training (TTT) ๅ’Œ Attention ไธค็ง่ฎฐๅฟ†ๆœบๅˆถใ€‚

ๅฟซ้€Ÿๅผ€ๅง‹

python main.py

้ฆ–ๆฌก่ฟ่กŒไผš่‡ชๅŠจไปŽ GitHub ไธ‹่ฝฝ input.txt ๆ•ฐๆฎ้›†๏ผˆ32033ไธชไบบๅ๏ผ‰ใ€‚

่ฟ่กŒ็คบไพ‹

num docs: 32033
vocab size: 27
num params: 1224
=== ๅผ€ๅง‹ Hybrid ้ข„่ฎญ็ปƒ ===
Step  100 / 500 | Loss: 3.2978
Step  200 / 500 | Loss: 2.4301
Step  300 / 500 | Loss: 2.4887
Step  400 / 500 | Loss: 2.2724
Step  500 / 500 | Loss: 2.3534

=== ๆŽจ็†็”Ÿๆˆ (temperature=0.5) ===
sample  1: manli
sample  2: dia
sample  3: apellellle
...
sample 20: bakili

ๆžถๆž„็‰น็‚น

Hybrid ่ฎฐๅฟ†ๆœบๅˆถ

ๆœฌ้กน็›ฎๆ ธๅฟƒๅˆ›ๆ–ฐ๏ผšTTT๏ผˆ้•ฟ็จ‹่ฎฐๅฟ†๏ผ‰ + Attention๏ผˆ็Ÿญ็จ‹ๆŸฅ่กจ๏ผ‰ ๅŒๅฑ‚ๆžถๆž„ใ€‚

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Hybrid ๆžถๆž„                                   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                  โ”‚
โ”‚   Token Embedding (wte)                                         โ”‚
โ”‚         โ”‚                                                        โ”‚
โ”‚         โ–ผ                                                        โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                      โ”‚
โ”‚   โ”‚ Layer 0: TTT (้•ฟ็จ‹่ฎฐๅฟ†็Ÿฉ้˜ต)          โ”‚                      โ”‚
โ”‚   โ”‚   - ็Šถๆ€็Ÿฉ้˜ต W ้š่พ“ๅ…ฅๅŠจๆ€ๆ›ดๆ–ฐ         โ”‚                      โ”‚
โ”‚   โ”‚   - ่‡ช็›‘็ฃ๏ผš้‡ๅปบ่พ“ๅ…ฅ x               โ”‚                      โ”‚
โ”‚   โ”‚   - ้€‚ๅˆ๏ผš้•ฟๆœŸไพ่ต–ใ€ๅบๅˆ—ๆจกๅผ          โ”‚                      โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                      โ”‚
โ”‚         โ”‚                                                        โ”‚
โ”‚         โ–ผ                                                        โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                      โ”‚
โ”‚   โ”‚ Layer 1: Attention (็Ÿญ็จ‹ๆŸฅ่กจ)        โ”‚                      โ”‚
โ”‚   โ”‚   - KV Cache ็ผ“ๅญ˜ๅކๅฒไฟกๆฏ            โ”‚                      โ”‚
โ”‚   โ”‚   - QยทK^T ่ฎก็ฎ—ๆณจๆ„ๅŠ›ๅˆ†ๆ•ฐ            โ”‚                      โ”‚
โ”‚   โ”‚   - ้€‚ๅˆ๏ผšๅฑ€้ƒจไธŠไธ‹ๆ–‡ใ€็ฒพ็กฎๆฃ€็ดข        โ”‚                      โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                      โ”‚
โ”‚         โ”‚                                                        โ”‚
โ”‚         โ–ผ                                                        โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                      โ”‚
โ”‚   โ”‚ Layer 2: MLP (็‰นๅพๅ˜ๆข)              โ”‚                      โ”‚
โ”‚   โ”‚   - ไธคๅฑ‚็บฟๆ€ง + ReLU                  โ”‚                      โ”‚
โ”‚   โ”‚   - ้ž็บฟๆ€ง็‰นๅพๆๅ–                   โ”‚                      โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                      โ”‚
โ”‚         โ”‚                                                        โ”‚
โ”‚         โ–ผ                                                        โ”‚
โ”‚   lm_head โ†’ logits โ†’ softmax โ†’ ้ข„ๆต‹                             โ”‚
โ”‚                                                                  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

TTT vs Attention ๅฏนๆฏ”

็‰นๆ€ง TTT ๅฑ‚ Attention ๅฑ‚
่ฎฐๅฟ†ๆœบๅˆถ ็Šถๆ€็Ÿฉ้˜ต W KV Cache
ๆ›ดๆ–ฐๆ–นๅผ ๅœจ็บฟๅญฆไน ๏ผˆๆขฏๅบฆไธ‹้™๏ผ‰ ่ฟฝๅŠ ็ผ“ๅญ˜
้€‚ๅˆๅœบๆ™ฏ ้•ฟ็จ‹ไพ่ต–ใ€ๅบๅˆ—ๆจกๅผ ๅฑ€้ƒจไธŠไธ‹ๆ–‡ใ€็ฒพ็กฎๆฃ€็ดข
่ฎก็ฎ—ๅคๆ‚ๅบฆ O(dยฒ) per token O(nยทd) per token

ๆ•ดไฝ“ๆ‰ง่กŒๆต็จ‹

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        exploreGPT ๅฎŒๆ•ดๆ‰ง่กŒๆต็จ‹                    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  1. ๆ•ฐๆฎๅ‡†ๅค‡้˜ถๆฎต   โ”‚
โ”‚                  โ”‚
โ”‚  ไธ‹่ฝฝnames.txt   โ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ†’ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ๆๅ–ๅญ—็ฌฆ่กจuchars  โ”‚        โ”‚ ๅˆ›ๅปบ่ฏๆฑ‡่กจๆ˜ ๅฐ„   โ”‚
โ”‚ ๅฎšไน‰BOSๆ ‡่ฎฐ      โ”‚         โ”‚ ๅญ—็ฌฆโ†”Token ID   โ”‚
โ”‚ ๆ‰“ไนฑๆ•ฐๆฎ้กบๅบ     โ”‚         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                 โ†“
                              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                              โ”‚  Value็ฑป        โ”‚
                              โ”‚  (่‡ชๅŠจๅพฎๅˆ†ๅผ•ๆ“Ž)  โ”‚
                              โ”‚ - ๅ‰ๅ‘: ่ฎก็ฎ—ๅ›พ  โ”‚
                              โ”‚ - ๅๅ‘: ้“พๅผๆณ•ๅˆ™โ”‚
                              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                       โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  2. ่ฎญ็ปƒๅพช็Žฏ (500ๆญฅ, Adamไผ˜ๅŒ–ๅ™จ)                                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                  โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”          โ”‚
โ”‚  โ”‚ ๅ–ไธ€ไธชๅๅญ—   โ”‚โ”€โ”€โ”€โ”€โ†’ โ”‚  ๅ‰ๅ‘ไผ ๆ’ญ    โ”‚โ”€โ”€โ”€โ”€โ†’โ”‚  ่ฎก็ฎ—ๆŸๅคฑ  โ”‚          โ”‚
โ”‚  โ”‚ "anna"     โ”‚     โ”‚  forward() โ”‚     โ”‚  -log(p)   โ”‚          โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜          โ”‚
โ”‚         โ†‘                 โ†“                     โ†“              โ”‚
โ”‚         โ”‚           โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”          โ”‚
โ”‚         โ”‚           โ”‚ TTTๅฑ‚      โ”‚     โ”‚  ๅๅ‘ไผ ๆ’ญ  โ”‚          โ”‚
โ”‚         โ”‚           โ”‚ Attentionๅฑ‚โ”‚     โ”‚  backward()โ”‚          โ”‚
โ”‚         โ”‚           โ”‚ MLPๅฑ‚      โ”‚     โ”‚  ่ฎก็ฎ—ๆขฏๅบฆ  โ”‚          โ”‚
โ”‚         โ”‚           โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜          โ”‚
โ”‚         โ”‚                  โ†“          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”          โ”‚
โ”‚         โ”‚           โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”‚ Adamไผ˜ๅŒ–ๅ™จ โ”‚          โ”‚
โ”‚         โ”‚           โ”‚ ๆฎ‹ๅทฎ่ฟžๆŽฅ   โ”‚โ”€โ”€โ”€โ†’โ”‚ ๆ›ดๆ–ฐๅ‚ๆ•ฐ   โ”‚          โ”‚
โ”‚         โ”‚           โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ”‚ ๅญฆไน ็އ่กฐๅ‡ โ”‚          โ”‚
โ”‚         โ”‚                             โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
          โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  3. ๆŽจ็†็”Ÿๆˆ (20ไธชๆ ทๆœฌ, ๆธฉๅบฆ้‡‡ๆ ท)                                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                  โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”          โ”‚
โ”‚  โ”‚ BOSๅผ€ๅง‹ โ”‚โ”€โ”€โ†’โ”‚ forward โ”‚โ”€โ”€โ†’โ”‚ softmax โ”‚โ”€โ”€โ†’โ”‚ ้‡‡ๆ ท    โ”‚          โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚ ๅ‰ๅ‘ไผ ๆ’ญโ”‚   โ”‚ ๆธฉๅบฆ็ผฉๆ”พโ”‚   โ”‚ ไธ‹ไธ€ไธช  โ”‚          โ”‚
โ”‚                โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚ token   โ”‚          โ”‚
โ”‚                                            โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜          โ”‚
โ”‚                                  โ†“                              โ”‚
โ”‚                            โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                          โ”‚
โ”‚                            โ”‚ๆ˜ฏๅฆBOS? โ”‚โ”€โ”€ๅฆโ”€โ”€โ†’ ็ปง็ปญๅพช็Žฏ           โ”‚
โ”‚                            โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                          โ”‚
โ”‚                                  โ†“ ๆ˜ฏ                           โ”‚
โ”‚                            โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                         โ”‚
โ”‚                            โ”‚ ่พ“ๅ‡บๅๅญ— โ”‚                         โ”‚
โ”‚                            โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆ ธๅฟƒๆ•ฐๆฎๆต

่พ“ๅ…ฅ: "anna"
  โ†“ Tokenizer
[BOS, 0, 13, 13, 0, BOS]
  โ†“ Token Embedding (wte)
  [ๅ‘้‡1, ๅ‘้‡2, ...]
  โ†“
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚ Layer 0: TTT                         โ”‚
  โ”‚  1. RMSNorm                          โ”‚
  โ”‚  2. linear(x, W) โ†’ y                 โ”‚
  โ”‚  3. ่‡ช็›‘็ฃๆ›ดๆ–ฐ W (้‡ๅปบ x)            โ”‚
  โ”‚  4. ๆฎ‹ๅทฎ่ฟžๆŽฅ: y + x                  โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
  โ†“
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚ Layer 1: Attention                   โ”‚
  โ”‚  1. RMSNorm                          โ”‚
  โ”‚  2. Q, K, V ๆŠ•ๅฝฑ                     โ”‚
  โ”‚  3. KV Cache ่ฟฝๅŠ                     โ”‚
  โ”‚  4. QยทK^T / โˆšd โ†’ ๆณจๆ„ๅŠ›ๅˆ†ๆ•ฐ          โ”‚
  โ”‚  5. softmax โ†’ ๅŠ ๆƒๆฑ‚ๅ’Œ               โ”‚
  โ”‚  6. ๆฎ‹ๅทฎ่ฟžๆŽฅ                         โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
  โ†“
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚ Layer 2: MLP                         โ”‚
  โ”‚  1. RMSNorm                          โ”‚
  โ”‚  2. linear โ†’ ReLU โ†’ linear           โ”‚
  โ”‚  3. ๆฎ‹ๅทฎ่ฟžๆŽฅ                         โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
  โ†“
  lm_head โ†’ logits
  โ†“ softmax (ๆธฉๅบฆ็ผฉๆ”พ)
probs: [0.15, 0.10, 0.35, ...]
  โ†“
้ข„ๆต‹ไธ‹ไธ€ไธช token

ๅ…ณ้”ฎๆŠ€ๆœฏ็‚น

  1. ่‡ชๅŠจๅพฎๅˆ† (Value็ฑป): ๆ— ้œ€ๆ‰‹ๅŠจๆฑ‚ๅฏผ๏ผŒ่‡ชๅŠจๆž„ๅปบ่ฎก็ฎ—ๅ›พๅนถๅๅ‘ไผ ๆ’ญๆขฏๅบฆ
  2. TTT ๅฑ‚: ็Šถๆ€็Ÿฉ้˜ตๅœจๆŽจ็†ๆ—ถๅŠจๆ€ๆ›ดๆ–ฐ๏ผŒๅฎž็Žฐ้•ฟ็จ‹่ฎฐๅฟ†
  3. Attention ๅฑ‚: KV Cache ็ผ“ๅญ˜ๅކๅฒ๏ผŒๅฎž็Žฐ็Ÿญ็จ‹็ฒพ็กฎๆฃ€็ดข
  4. ๆฎ‹ๅทฎ่ฟžๆŽฅ: ๆขฏๅบฆ้กบ็•…ๆตๅŠจ๏ผŒๆ”ฏๆŒๆ›ดๆทฑ็ฝ‘็ปœ
  5. ๆธฉๅบฆ้‡‡ๆ ท: ๆŽงๅˆถ็”Ÿๆˆๆ–‡ๆœฌ็š„้šๆœบๆ€งๅ’Œๅˆ›้€ ๆ€ง
  6. Adam ไผ˜ๅŒ–ๅ™จ: ๅŠจ้‡ + ่‡ช้€‚ๅบ”ๅญฆไน ็އ๏ผŒ่ฎญ็ปƒๆ›ด็จณๅฎš

ๆ ธๅฟƒๆจกๅ—่ฏฆ่งฃ

1. ็ฅž็ปๅ…ƒ๏ผšValue ็ฑป (่‡ชๅŠจๆฑ‚ๅฏผๅผ•ๆ“Ž)

ๅœจๆทฑๅบฆๅญฆไน ไธญ๏ผŒๆจกๅž‹้œ€่ฆ็Ÿฅ้“"ๆˆ‘็ฆปๆญฃ็กฎ็ญ”ๆกˆๅทฎๅคšๅฐ‘"ไปฅๅŠ"ๆˆ‘่ฏฅๅพ€ๅ“ช่พนๆ”น"ใ€‚

  • data: ๅญ˜ๅ‚จๅฝ“ๅ‰็š„ๆ•ฐๅ€ผ
  • grad: ๅญ˜ๅ‚จๆขฏๅบฆ๏ผˆๆ”น่ฟ›ๆ–นๅ‘๏ผ‰๏ผŒ้€š่ฟ‡ backward() ่ฎก็ฎ—
  • ๆ•ฐๅญฆ่ฟ็ฎ—: ้‡่ฝฝ +, *, **, log, exp ็ญ‰๏ผŒๆž„ๅปบ่ฎก็ฎ—ๅ›พ
  • backward(): ไปŽ Loss ๅผ€ๅง‹๏ผŒๅˆฉ็”จ้“พๅผๆณ•ๅˆ™ๅๅ‘ไผ ๆ’ญๆขฏๅบฆ

2. ๅˆ†่ฏๅ™จ๏ผšTokenizer

ๆจกๅž‹ไธ่ฎค่ฏ†ๅญ—็ฌฆ๏ผŒๅช่ฎค่ฏ†ๆ•ฐๅญ—ใ€‚

uchars = sorted(set(''.join(docs)))  # ['a', 'b', 'c', ...]
BOS = len(uchars)                     # 26 (็‰นๆฎŠๆ ‡่ฎฐ)
vocab_size = 27                       # 26ๅญ—ๆฏ + 1ไธชBOS

ๆŠŠ "anna" ๅ˜ๆˆ [BOS, 0, 13, 13, 0, BOS]

3. TTT ๅฑ‚๏ผšTest Time Training

ๆ ธๅฟƒๅˆ›ๆ–ฐ๏ผš็Šถๆ€็Ÿฉ้˜ต W ๅœจๆŽจ็†ๆ—ถ็ปง็ปญๅญฆไน 

def ttt_step(x, W_hidden, ttt_lr=0.2):
    y = linear(x, W_hidden)           # ่พ“ๅ‡บ
    x_hat = linear(x, W_hidden)       # ้‡ๅปบ่พ“ๅ…ฅ
    loss = sum((xh - xi)**2)          # ่‡ช็›‘็ฃๆŸๅคฑ
    loss.backward()                    # ่ฎก็ฎ—ๆขฏๅบฆ
    W_hidden -= ttt_lr * grad          # ๆ›ดๆ–ฐ W
    return y

ไธบไป€ไนˆๆœ‰ๆ•ˆ๏ผš

  • ๆฏไธช token ้ƒฝไผš่ฎฉ W ๅญฆๅˆฐไธ€็‚นไธœ่ฅฟ
  • ้•ฟๅบๅˆ—ไธญ๏ผŒW ็ดฏ็งฏไบ†ๆ•ดไธชๅบๅˆ—็š„"่ฎฐๅฟ†"
  • ็ฑปไผผ RNN๏ผŒไฝ†ๆ›ดๆ–ฐ่ง„ๅˆ™ๆ˜ฏๆขฏๅบฆไธ‹้™

4. Attention ๅฑ‚๏ผšKV Cache

ไผ ็ปŸๆณจๆ„ๅŠ›๏ผŒ็ผ“ๅญ˜ๅކๅฒ K ๅ’Œ V๏ผš

def attention_step(q, k_cache, v_cache):
    scores = [qยทk / โˆšd for k in k_cache]  # ๆณจๆ„ๅŠ›ๅˆ†ๆ•ฐ
    weights = softmax(scores)               # ๅฝ’ไธ€ๅŒ–
    return ฮฃ(weights[t] * v_cache[t])      # ๅŠ ๆƒๆฑ‚ๅ’Œ

5. ่ฎญ็ปƒๅพช็Žฏ

for step in range(500):
    # 1. ๅ‰ๅ‘ไผ ๆ’ญ
    logits = forward(token_id, ttt_states, kv_cache)
    
    # 2. ่ฎก็ฎ—ๆŸๅคฑ
    loss = -probs[target].log()
    
    # 3. ๅๅ‘ไผ ๆ’ญ
    loss.backward()
    
    # 4. Adam ๆ›ดๆ–ฐ๏ผˆๅธฆๅญฆไน ็އ่กฐๅ‡๏ผ‰
    lr_t = lr * (1 - step / 500)
    p.data -= lr_t * m_hat / (v_hat**0.5 + eps)

6. ๆŽจ็†็”Ÿๆˆ

for _ in range(block_size):
    logits = forward(token_id, ttt_states, kv_cache)
    probs = softmax([l / temperature for l in logits])
    token_id = random.choices(range(vocab_size), weights=probs)[0]
    if token_id == BOS: break
    sample.append(it_to_char[token_id])

Temperature ๅ‚ๆ•ฐ๏ผš

  • 0.1: ไฟๅฎˆ๏ผŒ็”Ÿๆˆๅธธ่งๅๅญ—
  • 0.5: ๅนณ่กก๏ผŒ้€‚ๅบฆๅˆ›้€ ๆ€ง
  • 1.0: ็‹‚้‡Ž๏ผŒ็”Ÿๆˆๅฅ‡ๆ€ช็ป„ๅˆ

ๆจกๅž‹ๅ‚ๆ•ฐ

n_embd = 12          # ๅตŒๅ…ฅ็ปดๅบฆ
block_size = 16      # ๆœ€ๅคงไธŠไธ‹ๆ–‡้•ฟๅบฆ
vocab_size = 27      # 26ๅญ—ๆฏ + BOS
num_params = 1224    # ๆ€ปๅ‚ๆ•ฐ้‡

ๆ•ฐๆฎๆฅๆบ

  • ๆ•ฐๆฎ้›†: karpathy/makemore ็š„ names.txt
  • ๆ ทๆœฌๆ•ฐ: 32033 ไธชไบบๅ
  • ่‡ชๅŠจไธ‹่ฝฝ: ้ฆ–ๆฌก่ฟ่กŒ่‡ชๅŠจ่Žทๅ–

ๆ–‡ไปถ็ป“ๆž„

exploreGPT/
โ”œโ”€โ”€ main.py           # ๆ ธๅฟƒๅฎž็Žฐ (~200่กŒ)
โ”œโ”€โ”€ input.txt         # ไบบๅ่ฎญ็ปƒๆ•ฐๆฎ (่‡ชๅŠจไธ‹่ฝฝ)
โ”œโ”€โ”€ README.md         # ๆœฌๆ–‡ๆกฃ
โ”œโ”€โ”€ production.md     # ้กน็›ฎๅ…จๅฑ€ๆ–‡ๆกฃ
โ””โ”€โ”€ schema/           # ไปปๅŠกๆ–‡ๆกฃ็›ฎๅฝ•
    โ””โ”€โ”€ archive/      # ๅทฒๅฎŒๆˆไปปๅŠกๅฝ’ๆกฃ

ๆ‰ฉๅฑ•ๅปบ่ฎฎ

  1. ๅขžๅŠ ๅฑ‚ๆ•ฐ: ๆทปๅŠ ๆ›ดๅคš TTT/Attention ๅฑ‚
  2. ๅขžๅคงๅตŒๅ…ฅ็ปดๅบฆ: n_embd = 64 ๆˆ–ๆ›ดๅคง
  3. ๆ›ด้•ฟ่ฎญ็ปƒ: num_steps = 2000+
  4. ๅญฆไน ็އ่ฐƒๅบฆ: ไฝ™ๅผฆ่กฐๅ‡ใ€้ข„็ƒญ็ญ‰
  5. ๅคšๅฑ‚ TTT: ๅคšไธช TTT ๅฑ‚ไธฒ่”๏ผŒไธๅŒๆ—ถ้—ดๅฐบๅบฆ

About

Various mini versions are used to explore the features

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages