English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

სტუმარი
1 / ?
უკან გაკვეთილებზე

ყურადღება პლუს MLP, გამეორებული

ტრანსფორმერის ბლოკის Pre-Norm სტრუქტურა


ორი ქვაებანი

ტრანსფორმერის ბლოკი შეიცავს ზუსტად ორ ქვაებანს, რომლებიც მოქმედებენ ტოკენების თანმიმდევრობაზე ფორმით [batch, seq_len, d_model]:

ფორმატის შენიშვნა

- შევინარჩუნე ყველა ფორმატირება: ძახილი, კურთuki, ბმულები, SVG. - შევინარჩუნე ყველა პლეისჰოლდერი ზუსტად: [TITLE /], __BLOCK_N__, [CONTENT two_sublayers/block_structure]. - თარგმნილია მხოლოდ შინაარსი, სტრუქტურა უცვლელი.


1. მრავალჰედიანი ყურადღების ქვალayerი. ტოკენები ერჩევენ ერთმანეთს. აქტივობა 68 დეტალურად განიხილავდა ამას. გამომავალი ფორმა შეესაბამება შეყვანის ფორმას.

2. Feed-forward MLP ქვალayerი. თითოეული ტოკენი დამოუკიდებლად გარდაიქმნება ორლაიერული პერსეპტრონის მეშვეობით. არ არსებობს ტოკენებს შორის ინფორმაციის ნაკადი. გამომავალი ფორმა შეესაბამება შეყვანის ფორმას.


ორივე ქვალayerი ინარჩუნებს [batch, seq_len, d_model] ფორმას. ეს შენარჩუნება საშუალებას იძლევა ბლოკები ერთმანეთზე დაყარონ: ფენა N-ის გამომავალი საკვები ხდება ფენა N+1-ის შეყვანა შეცვლილი ფორმის გარეშე.


რას წვლილს შეაქვს თითოეული ქვალayerი

ყურადღება გადააადგილებს ინფორმაციას პოზიციებს შორის: პოზიცია 17-ზე მდებარე ტოკენს შეუძლია ინფორმაციის მიღება პოზიციებიდან 1-დან 16-მდე. MLP გარდაქმნის ინფორმაციას თითოეულ პოზიციაში: ტოკენის წარმოდგენა ხდება ჩამოყალიბებული არალინეარული ფუნქციების მეშვეობით, მაგრამ არასოდეს ხედავს მეზობლებს.


ბლოკების ფენა ამ ოპერაციების ორ შეცვლას ახორციელებს. პირველი ფენის მხედველობა პოზიციებს აურევს. პირველი ფენის MLP პოზიციის მიხედვით ხდება ფორმის შეცვლა. მეორე ფენის მხედველობა კვლავ ურევს, ახლა უკვე შეცვლილი წარმოდგენების ზემოთ. ეს შეცვლა სიღრმესთან ერთად გამოხატვით შესაძლებლობებს ზრდის.


ANDREA-ის Stack


Variantn_layern_headd_modelmlp_dim
ANDREA-12M6123841536
ANDREA-120M12127683072
ANDREA-480M162415366144

შენიშნე mlp_dim = 4 × d_model მთელ ოჯახში. ეს თანაფარდობა შენარჩუნებულია თითქმის ყველა თანამედროვე ტრანსფორმერში. სექცია 3 განმარტავს მიზეზს.

ქვალაგერების დასახელება

ტრანსფორმერის ბლოკი შეიცავს ორ ქვალაგერს. დაასახელე ისინი თანმიმდევრობით და თითოეულისთვის მიუთითე, მოქცევს თუ არის ინფორმაციის გადაცემა პოზიციებს შორის (ტოკენი-ტოკენი) თუ ტრანსფორმაცია ერთ პოზიციაში (დამოუკიდებელი თითოეული ტოკენისთვის). ერთი წინადადება თითოეულ ქვალაგერზე.

რატომ არის მნიშვნელოვანი გამოტოვების კავშირები

რეზიდუალური შაბლონი

თითოეული ქვალayerი მოიცავს თავის გამოთვლას რეზიდუალურ კავშირში. გამომავალი უმატებს შეყვანას:


x = x + Attention(LayerNorm(x))     # attention sublayer
x = x + MLP(LayerNorm(x))           # MLP ქვალერმი

ყოველ ქვალერმში ფუნქცია Attention(...) ან MLP(...) ქმნის დელტას. ბლოკი არ ცვლის შეყვანას; ის ამატებს შეხსენებულ კორექტირებას.


რატომ არის ეს მნიშვნელოვანი

რეზიდუალური კავშირები დომინირებს ღრმა არქიტექტურებში სამი მიზეზის გამო:


1. გრადიენტის ნაკადი. უკუაწარმოდგენის დროს, გამოყოფა აძლევს გრადიენტებს პირდაპირ გზას გამომავალი წერტილიდან შეყვანისკენ, გარჩევის ფენის გვერდის ავლით. 12-შრიანი სტეკი რეზიდუალების გარეშე დაკარგავდა გრადიენტის სიგნალს შეყვანის ფენამდე დიდი ხანით ადრე; რეზიდუალებით, გრადიენტის მაგნიტუდა რჩება გამოყენებადი ასობით შრის განმავლობაში.


2. იდენტობის ინიციალიზაცია. ინიციალიზაციის დროს, გარჩევის ფენის წონები ქმნის მცირე გამომავალს. რეზიდუალური კავშირი ნიშნავს, რომ შრე N თავდაპირველად გადის თითქმის უცვლელად. სწავლება სწავლობს დელტებს თანდათანობით მუშაობის საწყისი წერტილიდან.


3. კომპოზიციური სწავლება. თითოეული ბლოკი სწავლობს გაუმჯობესებას, არა შეცვლას. შრე 1 შეიძლება დაამატოს პოზიციური ინფორმაცია. შრე 2 შეიძლება დაამატოს სინტაქსური სტრუქტურა. შრე 7 შეიძლება დაამატოს სემანტიკური ურთიერთობები. რეზიდუალური მდინარე გროვდება.


შრის ნორმალიზაცია

თითოეული გარჩევის ფენის წინ, LayerNorm ხელახლა მასშტაბირებს თითოეული ტოკენის წარმოდგენას ნულოვან საშუალოზე და ერთეულ დისპერსიაზე, შემდეგ კი გამოიყენებს შეხსენებულ თვისებაზე გამყოფს და მიკერძოებას:


y = gamma * (x - mean(x)) / sqrt(var(x) + epsilon) + beta

საშუალო მნიშვნელობა და დაშვება ითვლება d_model განზომილების მასშტაბით, ყოველი ტოკენისთვის ცალ-ცალკე. ორი შეხსენებული ვექტორი (gamma, beta, თითოეული ფორმით [d_model]) აღადგენს ექსპრესიულ მასშტაბს. ნორმალიზაცია ინარჩუნებს აქტივაციებს რიცხოვნად სტაბილურ დიაპაზონში; მის გარეშე, მცირე ტრენინგის არასტაბილურობები გარდაიქმნება NaN გრადიენტებად.

Pre-Norm vs Post-Norm

განსხვავებითი, მაგრამ კრიტიკული არჩევანი

რეზიდუალური შტრიქის ორი გზა ფენის ნორმირებაში ჩასაშენებლად:


პოსტ-ნორმი (ორიგინალური 2017 წლის სტატია):

x = LayerNorm(x + Attention(x))

ფენის ნორმირება რეზიდუალური გამოთვლის შემდეგ მდებარეობს. რეზიდუალური მდინარე თავად ყოველ ფენაზე ნორმირდება.


Pre-norm (თანამედროვე სტანდარტი, გამოიყენება ANDREA-ში):

x = x + Attention(LayerNorm(x))

Layer norm მდებარეობს ქვემორცხოვრის წინ, რეზიდუალურ ხეტიანში. რეზიდუალური ნაკადი რჩება არანორმალიზებული; მხოლოდ ქვემორცხოვრის შეყვანა მეორდება.


რატომ გაიმარჯვა Pre-Norm-მა

Post-norm ცუდად ვარჯიშდება LR warmup-ისა და ყურადღებით შეცხრილი ჰიპერპარამეტრების გარეშე. გრადიენტები ამძაფრებს ადრეულ ფენებში, რადგან თითოეული ფენის ნორმა არღვევს რეზიდუალური ნაკადის დაგროვილ მდგომარეობას. ორიგინალური 2017 წლის სტატია იყენებდა post-norm-ს ფართო შეცხრის შემდეგ; შემდგომი სამუშაოები (GPT-2, LLaMA, ANDREA) სტანდარტიზაციას მიაღწიეს pre-norm-ზე.


წინ-ნორმალიზაცია სტაბილურად ვარჯიშობს. რეზიდუალური მდინარე სუფთა გროვდება ყველა ფენაში; მხოლოდ ქვეფენის შეყვანები ნორმალიზდება რიცხვითი სტაბილურობისთვის. თანამედროვე ტრანსფორმერები ნაგულისხმევად იყენებენ წინ-ნორმალიზაციას, & ANDREA მემკვიდრეობს ამ არჩევანს.


საბოლოო ბლოკის განტოლება

რეზიდუალების, ფენის ნორმალიზაციის წინ-ნორმალიზაციის პოზიციაში და ორივე ქვეფენის კომბინაცია იძლევა ANDREA-ს სრულ ბლოკს:


```python
def block_forward(x):
```
x = x + Attention(LayerNorm(x))   # ყურადღების ქვალayerი
x = x + MLP(LayerNorm(x))         # MLP ქვალayerი
return x

ორი ქვალayerი, ორი რეზიდუალური გამოყოფა, ორი layer norm (შენიშვნა: თითოეულ ქვალayerს აქვს საკუთარი layer norm; ANDREA-120M-ს აქვს 24 layer norm 12 ბლოკის გაყარებით პლუს საბოლოო ერთი გამომავალზე, ამიტომ სულ 25). გაიმეორე 12-ჯერ. ეს არის ANDREA-120M-ის ძირითადი ნაწილი.

რატომ სტაბილიზებს Pre-Norm სწავლებას

ANDREA იყენებს pre-norm: `x = x + Attention(LayerNorm(x))`. შეადარე post-norm-ს: `x = LayerNorm(x + Attention(x))`. მიეცი ერთი მიზეზი გრადიენტის ნაკადის პერსპექტივიდან, რატომ სწავლება pre-norm უფრო სტაბილურად ვიდრე post-norm ღრმა stack-ებში. მოახსენე რეზიდუალური სტრიმი შენს პასუხში.

ორი ხაზოვანი ფენა, ერთი აქტივაცია

სამი ოპერაცია

MLP ქვაფენა არის ორფენიანი პერსეპტრონი არალინეარული აქტივაციით ფენებს შორის:


def mlp_forward(x):
h = x · W_1 + b_1        # გაფართოება: d_model → mlp_dim
h = GELU(h)              # არალინეარული აქტივაცია
y = h · W_2 + b_2        # შეკუმშვა: mlp_dim → d_model
return y

სამი ოპერაცია. ორი ხაზოვანი, ერთი არახაზოვანი. პირველი ხაზოვანი ფართობს ზრდის; მეორე კი შემცირდება უკან.


4× გაფართოების კოეფიციენტი

თანამედროვე ტრანსფორმერები აყენებენ mlp_dim = 4 × d_model. ANDREA-120M:


d_model = 768
mlp_dim = 4 × 768 = 3072
W_1 ფორმა = [768, 3072]      # ~2.36M პარამეტრი
W_2 ფორმა = [3072, 768]      # ~2.36M პარამეტრი
MLP პარამეტრები ბლოკზე = 4.72M (ბაიასების იგნორირებით)

ორი MLP მდებარეობს ყოველი ყურადღების ქვაკიმატრიცის წყვილს შორის (ერთი ბლოკზე). თორმეტი ბლოკი × 4.72M ≈ 56.6M MLP პარამეტრი სულ ANDREA-120M-ში, დაახლოებით ყველა პარამეტრის ნახევარი.


რატომ 4×

4× თანაფარდობა ემპირიულად გამოიკვეთა. უფრო მცირე თანაფარდობები ამცირებს მოდელის შესაძლებლობებს. უფრო დიდი თანაფარდობები იძლევა კლებად შედეგს თითოეული პარამეტრის ხარჯზე. არქიტექტურის ძიების დეკადებში 4× შენარჩუნდა; ის გვხვდება GPT-ში, BERT-ში, T5-ში, LLaMA-ში და ANDREA-ში.


ბოლო კვლევებმა (PaLM, Chinchilla) დაადგინეს, რომ გეიტინგის მექანიზმები (SwiGLU) შეუძლია გამოიყენოს 8/3× გაფართოება შესაბამისი შესაძლებლობებით ნაკლებ ხარჯზე; ANDREA რჩება კლასიკური GELU + 4× სიმარტივისთვის.

GELU: გლუვი აქტივაცია

რას აკომპიუტრებს GELU

GELU (Gaussian Error Linear Unit) თანამედროვე ტრანსფორმერებში MLP ფენებს შორის სტანდარტული აქტივაციაა. მისი ფორმულა:


GELU(x) = x · Φ(x)

Φ(x) არის სტანდარტული ნორმალური განაწილების კუმულაციური დისტრიბუციის ფუნქცია: სტანდარტული გაუსის შემთხვევითი ცვლადის ჩამონათვალის ჩამოყალიბების ალბათობა x-ზე ან მის ქვემოთ. რიცხოვნად გამოთვლილი:


Φ(x) ≈ 0.5 × (1 + tanh(sqrt(2/π) × (x + 0.044715 × x³)))

რეგიონების მიხედვით ქცევა

- დიდი დადებითი x-ისთვის: Φ(x) ≈ 1, ამიტომ GELU(x) ≈ x. ReLU-ს მსგავსად.

- დიდი უარყოფითი x-ისთვის: Φ(x) ≈ 0, ამიტომ GELU(x) ≈ 0. ReLU-ს მსგავსად.

- x = 0-ის მახლობლად: Φ(x) ≈ 0.5, ამიტომ GELU(0) = 0 ზუსტად. გლუვი გარდამავლობა ორიგინის მეშვეობით.


ReLU-სგან განსხვავებით, GELU ნებას რთავს ზოგიერთ უარყოფით შეყვანას, Φ(x)-ით შეწონილი. მცირე უარყოფითი შეყვანა მაინც იძლევა მცირე უარყოფით გამოყოფას, უბრალოდ ნაკლებს, ვიდრე სრული შეყვანა იქნებოდა.


რატომ აღემატება GELU ReLU-ს

ემპირიულად, ტრანსფორმერები, რომლებიც GELU-ითაა გაწვრთნილი, აღწევენ უფრო დაბალ ზარალს, ვიდრე ReLU-ით გაწვრთნილი ტრანსფორმერები იგივე პარამეტრების რაოდენობით. ნულის მახლობლად სიბლანტე მნიშვნელოვანია: ReLU-ს მკაცრი შეწყვეტა ნულში იწვევს გრადიენტის შეუწყვეტლობებს; GELU-ს გლუვი მრუდი უზრუნველყოფს უფრო სუფთა გრადიენტებს უკუაწარმოდგენისთვის.


ANDREA-ს ტრენინგის ძრავი microgpt_cuda.cu შეიცავს ხელით დაწერილ GELU CUDA კერნელს. კერნელი იყენებს ზემოთ მოცემულ tanh აპროქსიმაციას; თანამედროვე GPU-ებში tanh შედის ერთი ინსტრუქციის ოპერაციად.

MLP პარამეტრების გამოთვლა

ANDREA-120M-ს აქვს `d_model=768`, `mlp_dim=3072`, & `n_layer=12`. გამოთვალეთ MLP წონის მატრიცების (`W_1` & `W_2`) მთლიანი პარამეტრები 12 ბლოკის გავლით. უგულებელყავით ბიასები. აჩვენეთ თქვენი არითმეტიკა. შემდეგ მიუთითეთ, რა წილს წარმოადგენს ეს ANDREA-120M-ს ~120M მთლიანი პარამეტრებიდან (დამრგვალება ერთი ათწილადამდე).

თორმეტი ბლოკი ქმნის ANDREA-120M-ს

ბლოკიდან მოდელამდე

ANDREA-120M-ის სრული პირდაპირი გავლა:


def model_forward(token_ids):
x = token_embed(token_ids) + position_embed(positions)
for block_idx in range(n_layer):       # 12 ბლოკი
x = block_forward(x)               # ყურადღება + MLP რეზიდუალებით
x = LayerNorm(x)                       # საბოლოო ნორმალიზაცია
logits = x · token_embed.T             # გამოყენებული წონები გამოყოფისთვის
return logits

ართი ხაზი. ძირითადი ნაწილი მდებარეობს block_forward-ში, რომელსაც ეხმიანება ორჯერ. ემბედინგები იწყებენ პაიპლაინს; გაერთიანებული უნემბედინგი (იგივე მატრიცა, რომელსაც იყენებენ შეყვანის მოსაძებნად, ტრანსპონირებული გამოყოფის პროექციისთვის) მთავრობს მას.


სიღრმე როგორც კომპოზიცია

თითოეული ბლოკი კითხულობს რეზიდუალურ მდინარეს, ითვლის დელტას და უბრუნდება მას. თორმეტი გავლის შემდეგ, მდინარე შეიცავს ყველა ბლოკის დაგროვილ წვლილს. შიდა ფენები სპეციალიზდებიან:


- ადრეული ფენები (1-3): სინტაქსური შაბლონები, პოზიციური სტრუქტურა

- შუა ფენები (4-8): სიტყვების ურთიერთობები, ფრაზის საზღვრები

- გვიანი ფენები (9-12): სემანტიკური შინაარსი, ფაქტობრივი გახსენება


ეს სპეციალიზაცია ჩნდება ტრენინგის ზეწოლისგან, არა არქიტექტურული არჩევანისგან. იგივე უნიფორმული ბლოკის დიზაინი ქმნის სპეციალიზებულ ფენებს, როდესაც ტრენინგზე გადის ენაზე.


ბლოკის საერთო პარამეტრები


კომპონენტიბლოკზე12 ბლოკზე
ყურადღების პროექციები (4×W)2.36M28.3M
MLP წონები (W_1 + W_2)4.72M56.6M
ფენის ნორმები (gamma, beta)~3K (ნაკლებად მნიშვნელოვანი)~37K
ბლოკზე სულ~7.1M~85M

85M პარამეტრი ძირითად ნაწილში. დაემატება ~13M ტოკენის ემბედინგებში (8449 ლექსიკა × 768 d_model × 2 შეკრული შეყვანა/გამოყვანა) პლუს საბოლოო ფენის ნორმა, & ANDREA-120M-ის პარამეტრების რაოდენობა დაახლოებით 120M-ს უდრის. ბლოკის დიზაინი შეადგენს ორ მესამედს; ემბედინგები დანარჩენს.

ერთი ტოკენის თვალყურისდევნება ერთ ბლოკში

768-ზომიერი ტოკენის ვექტორი შედის ANDREA-120M-ის ბლოკ 7-ში. გაიარეთ რა ხდება მასთან ბლოკის შიგნით (pre-norm სტრუქტურაში). მიუთითეთ: ორივე ფენის ნორმა, ორივე ქვაფენა, ორივე რეზიდუალური დამატება, & საბოლოო ფორმა. მიუთითეთ მინიმუმ ერთი ადგილი, სადაც რეზიდუალური მდინარე უცვლელი რჩება & ერთი ადგილი, სადაც ის ცვლილდება.