ემბედინგი არის საძებნელი ცხრილი, არა ფუნქცია
ტოკენაიზერის შემდგომი პირველი ფენა
ტოკენაიზერი მოდელს გადასცემს მთელ რიცხვებს: [256, 1842, 7301, ...]. ტრანსფორმერის პირველი მოქმედება: თითოეული ID-ის გადაქცევა d_model რიცხვების ვექტორად. ეს ვექტორი მდებარეობს d_model-განზომილებიან სივრცეში (768 განზომილება ANDREA-120M-ისთვის).
ემბედინგის ფენა არის საძებნელი ცხრილი, არა ფუნქცია. წარმოიდგინეთ უზარმაზარი მატრიცა:
ფორმა: (V, d_model)
მწკრივი 0: [e_0_0, e_0_1, ..., e_0_767]
მწკრივი 1: [e_1_0, e_1_1, ..., e_1_767]
...
მწკრივი 8448: [e_8448_0, e_8448_1, ..., e_8448_767]
Token ID i ირჩევს მწკრივს i. პირდაპირი მასივის წვდომა. არანაირი არითმეტიკა, არანაირი აქტივაცია. უბრალოდ ინდექსი.
Trainable Floats
ამ ცხრილის ყველა ჩანაწერი იწყება პატარა შემთხვევითი float-ით (ჩვეულებრივ ნორმალური განაწილებიდან, რომელიც მასშტაბირებულია 1/sqrt(d_model)-ით). Backpropagation განაახლებს თითოეულ მწკრივს, როდესაც მისი token ID გამოჩნდება batch-ში. ტრენინგის შემდეგ მსგავსი ტოკენები (cat, dog, pet) იღებენ მსგავს ვექტორებს; არამსგავსი ტოკენები (cat, Tuesday, xylophone) მდებარეობენ შორს ერთმანეთისგან ვექტორულ სივრცეში.
ANDREA-120M Token Embedding Cost
| რაოდენობა | მნიშვნელობა |
|---|---|
| V | 8,449 |
| d_model | 768 |
| პარამეტრები | 6,488,832 |
ტოკენების ჩაშენების ცხრილში დაახლოებით 6.5 მილიონი პარამეტრია, რაც ANDREA-120M-ის მთლიანი რაოდენობის დაახლოებით 5.4%-ია. თითოეული ლექსიკონის სლოტი ამ 768 მცურავ წერტილს იღებს.
ჩაშენების ცხრილების ზომის განსაზღვრა
წერტილოვანი ნამრავლები ზომავს მსგავსებას
ვექტორები როგორც ისრები
768-განზომილებიანი ვექტორი ცხოვრობს სივრცეში, რომელსაც ადამიანები ვერ წარმოიდგენენ, მაგრამ იგივე ალგებრა მოქმედებს ნებისმიერ განზომილებაში. ტრანსფორმერებისთვის მნიშვნელოვანია ორი ძირითადი ოპერაცია:
სიდიდე (ისრის სიგრძე):
||v|| = sqrt(v_0² + v_1² + ... + v_767²)
წერტილოვანი ნამრავლი (ორ ისარს შორის განლაგება):
u · v = u_0 × v_0 + u_1 × v_1 + ... + u_767 × v_767
რას გვეუბნება წერტილოვანი ნამრავლი
ნებისმიერ განზომილებაში მოქმედი ორი ფაქტი:
- u · v = ||u|| × ||v|| × cos(theta), სადაც theta არის კუთხე მათ შორის.
- ერთი მიმართულებით მიმართული ვექტორები იძლევიან დიდ დადებით სკალარულ ნამრავლებს.
- საპირისპირო მიმართულებით მიმართული ვექტორები იძლევიან დიდ უარყოფით სკალარულ ნამრავლებს.
- მართი კუთხით მდებარე ვექტორები იძლევიან ნულოვან სკალარულ ნამრავლს.
სკალარული ნამრავლი = არანორმალიზებული მსგავსება. ორი გაწვრთნილი ტოკენის ემბედინგი cat და dog იღებენ მაღალ სკალარულ ნამრავლს, რადგან უკანა გავრცელებამ ისინი ერთმანეთთან დაახლოვა (ორივე პროგნოზირებს შინაური ცხოველებისთვის დამახასიათებელ კონტექსტებს). cat და Tuesday თითქმის ორთოგონალური ხდება, რადგან ისინი სხვადასხვა კონტექსტებს პროგნოზირებენ.
რატომ აინტერესებს ტრანსფორმერს
აქტივობა 5 (grow_a_language_model_attention) აგებს ყურადღებას წერტილოვანი ნამრავლებიდან: მოთხოვნის ვექტორის წერტილოვანი ნამრავლი საკვანძო ვექტორებთან იძლევა ქულებს, რომლებიც მიუთითებენ, თუ რომელი წინა ტოკენებია მნიშვნელოვანი შემდეგი ტოკენის პროგნოზირებისთვის. ჩაშენებები და წერტილოვანი ნამრავლები ერთად ატარებენ ყველა ურთიერთქმედებას ტრანსფორმერის შიგნით.
მსგავსების პროგნოზირება
ANDREA იყენებს ნასწავლ პოზიციურ ჩაშენებებს
პრობლემა
ტოკენის ჩაშენება მოდელს ეუბნება, თუ რა სიტყვაა ამ პოზიციაზე. ის არ ეუბნება მოდელს, სად მდებარეობს ეს სიტყვა. პოზიციური ინფორმაციის გარეშე ტრანსფორმერი the cat sat on a mat და mat a on sat cat the იდენტურად აღიქვამს: ერთი და იგივე ტოკენების ნაკრები, თანმიმდევრობის სიგნალის გარეშე.
ტრანსფორმერის ლიტერატურაში სამი გამოსავალი არსებობს:
სინუსოიდური (Vaswani 2017). ფიქსირებული მათემატიკური ფორმულა, რომელიც დაფუძნებულია სინუსებსა და კოსინუსებზე. პოზიცია 0 იღებს კონკრეტულ 768-ვექტორს; პოზიცია 1 იღებს სხვას; არასოდეს ვარჯიშდება, არასოდეს განახლდება. ფორმულის მეშვეობით განზოგადდება ნებისმიერ პოზიციაზე.
RoPE (Rotary Position Embedding). მბრუნავს query და key ვექტორებს პოზიციის მიხედვით. გამოიყენება LLaMA-სა და Qwen-ში. არ საჭიროებს დამატებით პარამეტრებს; როტაცია ჩაშენებულია attention-ში.
Learned. ცალკე embedding ცხრილი ფორმით (T, d_model), სადაც T არის კონტექსტის სიგრძე. თითოეული მწკრივი ვარჯიშდება backpropagation-ით, ისევე როგორც token embeddings.
ANDREA-ს არჩევანი: Learned
ANDREA იღებს learned-position მიდგომას microGPT-სგან, რომელიც მემკვიდრეობით მიიღო nanoGPT-სგან, რომელიც მემკვიდრეობით მიიღო GPT-2-სგან. მსჯელობა:
- სიმარტივე. ყურადღების მექანიზმში არანაირი სპეციალური მათემატიკა არ არის საჭირო. პოზიციის ცხრილი იგივეა, რაც ტოკენის ცხრილი.
- თავსებადობა custom CUDA-სთან. ANDREA-ის microgpt_cuda.cu ძრავა ორივე embedding-ის მოძებნას ერთნაირად ამუშავებს; sin/cos ბირთვები არ არის საჭირო.
- საკმარისია ფიქსირებული კონტექსტისთვის. ANDREA T-ს 1024-ზე ზღუდავს. სწავლებადი ცხრილი კარგად მუშაობს ფიქსირებული სიგრძის თანმიმდევრობებისთვის.
ANDREA-120M პოზიციის embedding-ის ღირებულება
| რაოდენობა | მნიშვნელობა |
|---|---|
| T (კონტექსტი) | 1,024 |
| d_model | 768 |
| პარამეტრები | 786,432 |
0.79M პარამეტრი პოზიციისთვის. ტოკენების ემბედინგებთან ერთად: 6.49M + 0.79M = სულ 7.27M ემბედინგის პარამეტრი ANDREA-120M-ისთვის.
როგორ ერწყმიან ისინი
თითოეულ პოზიციაზე t შეყვანის თანმიმდევრობაში:
x_t = token_embedding[token_id_t] + position_embedding[t]
ორი 768-ვექტორი, ელემენტურად შეკრებილი. შედეგი, x_t, გადადის პირველ ტრანსფორმერ ბლოკში. მოდელი მათ აღარ გამოყოფს; ის სწავლობს კომბინირებული სიგნალის გამოყენებას.
სწავლებადი vs სინუსოიდური
სად მდებარეობს Embedding-ის პარამეტრები
სრული ANDREA-120M Embedding Layer
| კომპონენტი | ფორმა | პარამეტრები |
|---|---|---|
| ტოკენების ემბედინგების ცხრილი | 8,449 × 768 | 6,488,832 |
| პოზიციის ემბედინგების ცხრილი | 1,024 × 768 | 786,432 |
| სულ | 7,275,264 |
დაახლოებით 7.3 მილიონი პარამეტრი. ANDREA-120M-ის საერთო პარამეტრების რაოდენობა: ~120 მილიონი. მხოლოდ ემბედინგების ფენა: 6%. დარჩენილი 94% მდებარეობს ტრანსფორმერის ბლოკებში (attention + MLP, განხილულია 5-7 აქტივობებში).
დაუკავშირებელი vs დაკავშირებული ემბედინგები
ბევრი ტრანსფორმერის დიზაინი (მათ შორის GPT-2) აკავშირებს ტოკენის ემბედინგს საბოლოო გამომავალ პროექციასთან: ერთი და იგივე V × d_model მატრიცა გამოიყენება შეყვანისას და გამომავალზე (ლოგიტები ლექსიკონზე). დაკავშირება ზოგავს V × d_model პარამეტრებს და ხშირად აუმჯობესებს ხარისხს.
ANDREA იყენებს დაუკავშირებელ ემბედინგებს: შეყვანის ემბედინგი და გამომავალი პროექცია ვარჯიშდება ცალკე მატრიცებად. აქტივობა 7 (grow_a_language_model_transformer_block) მოიცავს საბოლოო ფენას.
წინსვლის გავლა ამ დრომდე
შეყვანა: ტოკენის ID-ები [256, 1842, 7301, ...] (მათგან 1024). თითოეული ID იძებნება 768-ვექტორად. თითოეული პოზიცია იძებნება 768-ვექტორად. ელემენტურად ჯამდება. შედეგი: (1024, 768) მატრიცა x ტოკენისა და პოზიციის ვექტორებით. x გადადის ტრანსფორმერის ბლოკ 1-ში.
აქტივობა 5 (grow_a_language_model_attention) მოიცავს იმას, რასაც ბლოკი 1 აკეთებს: მასშტაბირებული წერტილოვანი პროდუქტის ყურადღება კაუზალური ნიღბით და softmax-ით.