რამდენად უნდა გაკვირვებული იყოს მოდელი?
ლოგიტებიდან ალბათობებამდე
12 ტრანსფორმერის ბლოკის შემდეგ, ANDREA-120M გამოიმუშავებს vocab_size რაოდენობის რიცხვების ვექტორს თითოეული ტოკენის პოზიციისთვის: ლოგიტებს. ANDREA-120M-ისთვის, vocab_size = 8449, ამიტომ ყველა პოზიცია გამოიმუშავებს 8449 ლოგიტს. ლოგიტები არანორმალიზებული ქულებია; ზოგიერთი დადებითი, ზოგიერთი უარყოფითი, არ აქვთ შეზღუდვა რომ შეჯამდნენ 1-ს.
Softmax ლოგიტებს აქცევს ალბათობის განაწილება:
p_i = exp(logit_i) / sum_j exp(logit_j)
Softmax-ის შემდეგ, ყველა 8449 რიცხვი 0-დან 1-მდეა, რომლებიც ერთად 1-ს უდრის. მოდელი აკუთვნებს ალბათობას ყველა შესაძლო შემდეგ ტოკენს.
კროს-ენტროპიის ზარალი
ტრენინგი მოითხოვს ზარალის ფუნქციას: რიცხვს, რომელიც ზომავს, თუ რამდენად მცდარი იყო მოდელის პროგნოზი მოცემული სწორი პასუხისთვის. კროს-ენტროპია მუშაობს ენის მოდელირებისთვის:
loss_t = -log(p_correct_token_t)
მოდელის პროგნოზირებული ალბათობის მიღება რეალური შემდეგი ტოკენისთვის (ის, რომელიც ტრენინგის მონაცემებშია). მისი უარყოფილი ლოგარითმის მიღება. ეს ერთი პოზიციისთვის დანაკარგია.
რატომ უარყოფილი ლოგარითმი
სამი თვისება ხდის -log(p)-ს ბუნებრივ დანაკარგის ფუნქციას:
- -log(1) = 0: როდესაც მოდელი სწორ ტოკენს 100%-იანი ნდობით პროგნოზირებს, დანაკარგი ნულის ტოლია.
- -log(0) = ∞: როდესაც მოდელი სწორ ტოკენს ნულოვან ალბათობას უძღვნის, დანაკარგი უსასრულოა. (პრაქტიკაში, softmax არასდროს გამოსცემს ზუსტად 0-ს; დანაკარგი შეზღუდული რჩება, მაგრამ დიდია.)
- მონოტონული: როგორც სწორი ტოკენისთვის პროგნოზირებული ალბათობა იზრდება, დანაკარგი შემცირდება გლუვად.
სწორი პასუხის მაღალი ნდობა = დაბალი ზარალი. სწავლების მიზანი მარტივია: რეალური შემდეგი ტოკენისთვის პროგნოზირებული ალბათობის მაქსიმიზაცია.
სეკვენციის ზარალი
ANDREA სწავლობს 1024 სიგრძის სეკვენციებზე (კონტექსტის ფანჯარა). თითოეული სეკვენცია გამოიმუშავებს 1024 შემდეგი ტოკენის პროგნოზს. სეკვენციის ზარალი საშუალოდ მთელ პოზიციებზე:
```
sequence_loss = mean(-log(p_correct_t)) for t in 0..1023
```
შემდეგ მიმდინარეობის ზარალი გამოითვლება ბატჩის მთელ მასაზე (ANDREA-120M იყენებს batch_size = 8). ერთი სკალარული რიცხვი თითოეული სწავლის ნაბიჯზე. ეს რიცხვია ის, რაც ზარალის მრუდს ასახავს.
ზარალის გამოთვლა ერთ პოზიციაზე
Perplexity = exp(loss)
უფრო მეგობრული სკალა
საკარგი მნიშვნელობები, როგორიცაა 2.0 ან 3.43, არ გვაძლევს მყისიერ წარმოდგენას იმის შესახებ, თუ რა შეუძლია მოდელს. Perplexity თარგმნის საკარგს უფრო ინტუიტიურ სკალაზე:
perplexity = exp(loss)
Perplexity პასუხობს სუფთა კითხვას: რამდენი თანაბარად სავარაუდო ტოკენიდან ირჩევს მოდელი ეფექტურად? Perplexity-ის მნიშვნელობა 7 ნიშნავს, რომ მოდელი იქცევა ისე, თითოეულ პოზიციაზე 7 სავარაუდო შემდეგი ტოკენიდან ირჩევს. Perplexity-ის მნიშვნელობა 1 ნიშნავს შეუტეხებელ პროგნოზს.
ხშირი Loss-Perplexity წყვილები
| Loss | Perplexity | როგორ გრძნობს თავს |
|---|---|---|
| 0.0 | 1.0 | შეუტეხებელი პროგნოზი |
| 1.0 | 2.7 | ~3 შესაძლო ტოკენებს შორის არჩევანი |
| 2.0 | 7.4 | ANDREA-12M საბოლოო SMMA ტერიტორია |
| 3.0 | 20.1 | გონივრული ტექსტი, მაგრამ არასწავლანი |
| 3.43 | 30.9 | ANDREA-120M v1 მინიმუმი (შეპარლამდე) |
| 5.0 | 148 | ადრეული ტრენინგი, ლექსიკის განაწილების შესწავლა |
| 9.04 | 8449 | შემთხვევითი შანსის ბაზა ANDREA-120M-ის ლექსიკისთვის |
Perplexity ხდის ზარალის მნიშვნელობებს კონტექსტში: ზარალი 2.0 ნიშნავს, რომ მოდელი ეფექტურად ირჩევს ~7 ტოკენს, არა 8449-დან. [BLOCK_TYPE SECTION/STEP] __BLOCK_N__ <translated content>
შემთხვევითი შანსის საბაზისო ხაზი
მოდელი, რომელიც არაფერს იცის და თანაბრად ვარაუდობს, ყველა ტოკენს უთითებს შეცდომის შანსის 1/V-ს, სადაც V = vocab_size:
p_uniform = 1 / V
loss = -log(1/V) = log(V)
ANDREA-120M-ისთვის V = 8449-ით:
loss_uniform = ln(8449) ≈ 9.04
ANDREA-12M-ისთვის V = 2305-ით:
loss_uniform = ln(2305) ≈ 7.74
ნებისმიერი ზარალი ამ ბაზის ხაზს ზევით ნიშნავს, რომ მოდელი მუშაობს უარესად, ვიდრე შემთხვევითი. ნებისმიერი ზარალი მის ქვემოთ ნიშნავს, რომ მოდელმა რაღაც შეისწავლა: ის კონცენტრირებს ალბათობის მასას უფრო მცირე ტოკენთა ნაკრებზე, ვიდრე ნათელყოფილი გაანაწილება.
ზარალის მნიშვნელობის წაკითხვა
ნაბიჯ-დონის შუშხუნის გლუვება
შეუმუშავებელი ზარალი შეუსმენელია
ნაბიჯზე ზარალი იხტება. ANDREA-ის ბანდიტი ყოველ 7-42 ნაბიჯში ირჩევს სხვადასხვა წყაროს; ზოგი წყარო (ლექსიკონის განმარტებები) იძლევა მარტივ ზარალს; სხვები (გუტენბერგის პარაგრაფები) უფრო რთულ ზარალს. შეუმუშავებელი ნაბიჯის ზარალის გრაფიკი ნაბიჯის ნომრის წინააღმდეგ ქმნის ქაოტურ გაფრქვევას.
გლუვი შეცვლილი მოძრავი საშუალო (SMMA) შეამცირებს ხმაურს და ხსნის ტრენდს. ANDREA-ს ტრენინგის პროქსი SMMA-ს ითვლის შემდეგნაირად:
SMMA[0] = loss[0]
SMMA[t] = (SMMA[t-1] * (N-1) + loss[t]) / N
N = 100-ით (ANDREA-ს ნაგულისხმევი გლუვების ფანჯარა), თითოეული ახალი SMMA მნიშვნელობა აერთიანებს წინა SMMA-ს 99%-ს ახალი ნაბიჯის loss-ის 1%-ით. უეცარი პიკები შეიწოვება; მდგრადი ცვლილებები თანდათან ჩანს.
რატომ არა უბრალოდ საშუალო?
ბოლო 100 ნაბიჯზე უბრალო მოძრავი საშუალო მოითხოვს 100 ზარალის მნიშვნელობის შენახვას. SMMA ინახავს ერთ მნიშვნელობას (მოძრავ საშუალოს) & ერთ კონსტანტას (ფანჯრის ზომას). მეხსიერებაზე იაფი, გამოთვლითად უმნიშვნელო, & საკმარისად გლუვი მრუდის წასაკითხად.
განსხვავებული გლუვების წონები სხვადასხვა კითხვებზე პასუხობს:
- N = 10: თვალ-ყური ადევნებს მოკლევადიან ცვლილებებს; სასარგებლოა ფაზის გარდამავალ პერიოდებში
- N = 100: ANDREA-ს ნაგულისხმევი; თვალ-ყური ადევნებს საშუალოვადიან პროგრესს
- N = 1000: მხოლოდ გრძელვადიანი ტრენდი; სასარგებლოა ტრენინგის ბოლოს
რასაც ANDREA თვალ-ყური ადევნებს
ყოველ 100 ნაბიჯზე ტრენინგის პროქსი ჩაწერს loss.json-ს მიმდინარე SMMA-ით, შეუმუშავებელი loss-ით, ნაბიჯის ნომრით და წყაროს მიხედვით დეტალური ანგარიშით. Dashboard-ი training.ai.unturf.com/dashboard-ზე ამ ფაილს ყოველ 10 წამში სკანირებს. გარე მაყურებლები ხედავენ ცოცხალ პროგრესს; dashboard-ი მხოლოდ წაკითხვადია.
ANDREA-12M-ის ნამდვილი კურვა
რეცეპტი რომელმაც მიაღწია SMMA 2.0-ს
| ნაბიჯები | საშ. Loss | შენიშვნები |
|---|---|---|
| 0--2.5K | 4.50 | შემთხვევითი ინიციალიზაცია, ადრეული სწავლება |
| 2.5K--5K | 3.88 | სწრაფი კლება სტრუქტურის ფაზაში |
| 5K--10K | 3.30 | მიუახლოვება კოჰერენტულობის საზღვარსი |
| 10K--20K | 2.80 | ბენდიტი პოულობს ოპტიმალურ შერევას |
| 20K--25K | 2.40 | პლატო --- მონაცემთა შიმშილი |
| 25K--30K | 2.50 | ჰერმესის მონაცემები შეყვანილი + LR ხელახლა ჩართვა |
| 30K--35K | 2.35 | ჰერმესი ინტეგრირებული, ახალი მინიმუმები |
| 35K--40K | 2.10 | 4-საბეჭდი ფოკუსი, მკვეთრი ჩამოშვება |
| 40K--43.6K | 2.00 | ცოდნის ტერიტორია, SMMA 2.0-ის ქვემოთ |
სამი ფაზა გამოირჩევა:
1. მკვეთრი ადრეული ჩამოშვება (0-10K). Loss 4.50-დან 3.30-მდე ეცემა, როცა მოდელი სწავლობს ლექსიკის განაწილება და ძირითადი ჯაჭვის სტრუქტურას. შემთხვევითი შანსის საბაზისო ln(2305) ≈ 7.74 მაღლაა ამ მრუდის ზევით; მოდელი სწრაფად კონცენტრირებს შეჯახებადობის მასას ემბედინგების სტაბილიზაციის შემდეგ.
2. პლატო (20K-25K). Loss 2.40-ზე ჩერდება. ბანდიტს არ ჰყოფნილი თავის მიმდინარე წყაროს ნარევზე. Hermes მონაცემები ემატება 25K ნაბიჯზე, პლუს LR ცხელ რესტარტი, რამაც გაარღვია პლატო. [BLOCK_TYPE CONTENT smma_curve/andrea_loss_curve]
3. საბოლოო ჩამოშვება (35K-43.6K). კურიკულუმი შეკუმშული იყო 16 წყაროდან 4-მდე (hermes3-general + dictionary + gutenberg + chat). უფრო ხშირი ჩამოშვება ვიდრე სრული-arm bandit-ის შემთხვევაში. საბოლოო SMMA: 2.0.
ANDREA-120M v1: გაფრთხილების მრუდი
იგივე ლექსიკის გამოთვლა: ln(8449) ≈ 9.04. ANDREA-120M v1 მიაღწია SMMA 3.43-ს 110K ნაბიჯზე (მისი მინიმუმი), შემდეგ გადახტა:
| ნაბიჯები | EMA Loss | ტრენდი |
|---|---|---|
| 26K--40K | 4.29 | შეკუმშება |
| 70K--85K | 3.60 | საუკეთესო რეგიონი |
| 85K--110K | 3.43 | მინიმუმი |
| 110K--125K | 3.54 | გაფანტვა |
| 140K--155K | 4.05 | გაფანტვა |
| 155K--165K | 4.54 | ჩამონგრეული |
რიცხვითად მისაღები ზარალის მნიშვნელობები მთელი პერიოდის განმავლობაში (3.43 კარგადაა 9.04 შემთხვევითი ბაზის ქვემოთ). მაგრამ ნიმუშები იყო გამეორების ჩამონგრევა: Budy Budy Budy Budy. ზარალმა მოატყუა ისტორია; ნიმუშების აუდიტი არ შეესაბამებოდა.
v2-ის შეკოჰერენტულობით გარკვეული ადრეული შეჩერება (აქტივობა 78) დაამატა პარალელური სიგნალი: ბიგრამის მრავალფეროვნება, ტრიგრამის მრავალფეროვნება, ინგლისური სიტყვის არსებობა, სიმბოლოს მრავალფეროვნება. როდესაც ყველა ოთხი ქულა 5 თანმიმდევრული შეწყვეტისთვის 30-ს ქვემოთ რჩება, ტრენინგი ავტომატურად ჩერდება. ეს სიგნალი v1-ს 132K ნაბიჯზე დააჭერდა, რაც 3.8 დღის კომპიუტერულ რესურსს დაზოგავდა.
ყოველი ფაზა რას გვეუბნება
120M v1 გაკვეთილი
ორი დამოუკიდებელი სიგნალი
ANDREA-120M v1 მიაღწია SMMA 3.43-ს ნაბიჯზე 110K. რიცხვით: 273× უკეთესი, ვიდრე შემთხვევითი შანსი (perplexity 31 vs vocab size 8449). შესანიშნავად გამოიყურება მრუდზე.
ნიმუში ნაბიჯზე 110K::
''''' ''''' '' ''' '' ''' '''?' ''' ' '' '' '
დაკარგვა და თანმიმდევრულობა დამოუკიდებელი სიგნალებია. დაბალი დაკარგვა ნიშნავს, რომ მოდელი ეფექტურად კონცენტრირებს ალბათობის მასას. თანმიმდევრულობა ნიშნავს, რომ მოდელი გამოიმუშავებს ტექსტს, რომელსაც ადამიანები შეუძლიათ წაკითხვა. პირველი არ გულისხმობს მეორეს.
რატომ არსებობს ეს სხვაობა
მოდელს შეუძლია შეამციროს დაკარგვა შემდეგი გზებით:
1. ნამდვილი ენობრივი შაბლონების შესწავლა (კარგი): სუბიექტ-ზმნის შეთანხმება, გავრცელებული ფრაზები, ფაქტობრივი ასოციაციები.
2. სტრუქტურული არტეფაქტების შეხსენება (ცუდი): მაღალი სიხშირის გამეორების პატერნები, მონაცემთა კომპლექტზე სპეციფიკური უცნაურობები, დეგენერაციული ატრაქტორები.
ორივე ამცირებს loss-ს. პირველი გამოიმუშავებს სემპლებს, რომლებიც მოგწონთ ადამიანებს. მეორე გამოიმუშავებს Budy Budy Budy Budy-ს. ტრენინგის ობიექტივი მარტო ვერ განასხვავებს მათ.
ANDREA-120M v3 Polish: სად შეხვდნენ Loss & Coherence
v3 polish-ის შემდეგ (ნაბიჯი 112K-დან), ANDREA-120M გამოიმუშავებს:
ნაბიჯი 112,584, loss 0.30, ppl 1::
> [extinction prompt]
< შავი პავუჩის მაიმუნი ცოცხალია, კაროლინას პარაკიტი გამოცხადებულია გაქრობილი.
ორივე ფაქტი სწორია. კაროლინას პარაკიტი გამოცხადებულია გაქრობილად 1939 წელს; შავი პავუჩის მაიმუნი არსებობს. დაბალი ზარალი (0.30) და თანმიმდევრული ფაქტობრივი გახსენება.
ნაბიჯი 112,500, ზარალი 1.94, ppl 7::
> როგორ ვიპოვო მოძველებული პაკეტები Python-ის პროექტში?
< გამოიყენე `pip list --outdated` სახელების ნახვისთვის pip პაკეტების სიაში...
უფრო მაღალი ზარალი (1.94 → ppl 7), მაგრამ სწორი ინსტრუმენტი გამოჩნდა ტრენინგის მონაცემებიდან. ფრაზის სიუხილება ჯერ კიდევ ვითარდება ტრენინგის 56%-ზე.
ორი სიგნალის დისციპლინა
თანამედროვე ტრენინგის პროცესები აკვირდებიან ორივეს:
- Loss კურვა. გაძლევს ცნობას, სწავლობს თუ არა მოდელი რაიმე რაოდენობრივს.
- ნიმუშის აუდიტი. გაძლევს ცნობას, სასარგებლოა თუ არა ის, რაც მოდელმა ისწავლა.
v2-ში დაემატა კოჰერენტულობის კარიბით ადრეული შეჩერება (აქტივობა 78). v3-ის გაპრიალება იყო კურიკულუმის პერტურბაცია, რომელიც გამოწვეული იყო ნიმუშის აუდიტებით, არა loss მნიშვნელობებით. Loss მარტო აუცილებელია, მაგრამ არასოდეს საკმარისი.