ექსპონენციური მოძრავი საშუალო
გლუვი უახლესი საშუალო
ექსპონენციური მოძრავი საშუალო (EMA) თვალ-ყური ადევნებს მნიშვნელობას მეტი წონის მიცემით უახლეს ნიმუშებს, ვიდრე ძველებს, წონებით ექსპონენციურად მცირდება. ფორმულა:
EMA(t) = (1 - alpha) EMA(t-1) + alpha value(t)
სადაც ალფა (გლუვების ფაქტორი) მდებარეობს (0, 1)-ში. ANDREA იყენებს alpha = 0.1-ს თითოეული წყაროს ზარალის თრექინგისთვის.
ტერმი ტერმით
- value(t): უახლესი შეკვამლა. ANDREA-სთვის ეს არის CUDA-ს მიერ წყარო k-დან დოკუმენტზე ფორვარდ გამოტანის შემდეგ მოხსენიებული ზარალი.
- EMA(t-1): წინა EMA მნიშვნელობა წყარო k-სთვის. შენახულია პროქსი სტეიტში.
- alpha = 0.1: თითოეული ახალი ზარალი წვლილს შეჰყოფს 10%-ს; როლინგის ისტორია შეუძლია 90%.
- (1 - alpha) = 0.9: წონა ისტორიაზე.
რატომ EMA ჩვეულებრივი საშუალოს ნაცვლად
ჩვეულებრივი მიმდინარე საშუალო ყველა ნაბიჯს თანაბარ წონას ანიჭებს. ნაბიჯი 1 იგივე წონას აქვს, რაც ნაბიჯს 100,000. ეს მუშაობს, თუ მონაცემები სტაციონარულია. ANDREA-ს ზარალები არ არის სტაციონარული: მოდელის შესაძლებლობები იზრდება ტრენინგის დროს, ამიტომ წყაროს ზარალი ნაბიჯზე 5,000 განსხვავდება მისი ზარალისგან ნაბიჯზე 50,000.
EMA ამას წყვეტს. ძველი ზარალის მნიშვნელობები ექსპონენციალურად ქრება. EMA ასახავს ბოლო რეალობას, არა საწყისი პირობების საშუალოს.
წყაროს მიხედვით
ANDREA ინარჩუნებს ერთ EMA-ს თითო ხელზე (თითო წყაროზე). ხსნი შეკრული = EMA შეკრული. ყოველი ნაბიჯი განაახლებს მხოლოდ იმ წყაროს EMA-ს, რომელიც გაწელილი იყო. დანარჩენი 15 EMA უძრავი რჩება, სანამ მათი შემდეგი გაწელვა არ მოხდება.
EMA-ს გამოთვლის ნაბიჯი
ჯილდოს ფორმულა
ჯილდო = გაუმჯობესება, მასშტაბირებული
ANDREA განსაზღვრავს ხელის k-სთვის ნაბიჯის ჯილდოს, როგორც:
reward_k = max(0, EMA_k(t-1) - loss_k(t)) * 1000
სამი ნაწილი:
1. EMA_k(t-1) - loss_k(t): გაუმჯობესება. თუ ახალი loss-ი შევიდა მიმდინარე საშუალოს ქვემოთ, სხვაობა დადებითია: წყარო k-მ უკეთესი შედეგი მიიღო ვიდრე მოსალოდნელი იყო.
2. max(0, ...): უარყოფითი გაუმჯობესებების ნულამდე შეკუმშვა. თუ ახალი loss-ი შევიდა EMA-ს უფრო ცუდად, ჯილდო არაა (მაგრამ სჯულიც არა).
3. \* 1000: მასშტაბირება ზევით, რათა სიგნალი შესადარებელი გახდეს UCB-ის შესაძრწვენებლად ბონუსთან.
რატომ max(0, ...)
უარყოფითი ჯილდოები mean_reward(k)-ს ჩამოუყარებდა ქვემოთ, რითაც UCB-ს მიკერძოებული გახდებოდა იმ „ხელებზე“, რომელთა ზარალიც ზევით იხტებოდა. მაგრამ რყევა ნორმალურია: ერთი რთული დოკუმენტი ზრდის ზარალს იმის გარეშე, რომ წყარო ცუდი იყოს. მოჭრა ნულამდე რყევას „ინფორმაციის არარსებობად“ მოაგყარს ნაცვლად „საჯარიმოს“.
წყაროები შეუძლიათ ნულოვანი ჯილდო მიიღონ განმეორებით ჩაძირვის გარეშე. მათი UCB-ის რანგი კვლავ განისაზღვრება შესაძრწვენებლად ბონუსით (მაღალი, როდესაც n_k მცირეა) პლუს წარსული გამოგებები.
რას ამბობს CUDA
თითოეული forward+backward გავლის დროს, CUDA კერნელი ემიტებს ერთ ჩანაწერს:
{source: 'hermes3-general', doc_index: 4231, loss: 4.520}
პროქსი იღებს ჩანაწერს, ეძებს იმ წყაროსთვის EMA-ს, ითვლის ჯილდოს, განაახლებს EMA-ს, შეყვანს ჯილდოს ბანდიტის mean_reward(k) აკუმულატორში.
ჯილდოს გამოთვლა
ჯილდოს შესაბამისობა კვლევის ბონუსთან
მასშტაბის პრობლემა
ნაბიჯზე loss-ის გაუმჯობესებები მცირეა. Loss ეცემა 4.521-დან 4.520-მდე: სხვაობა 0.001. 4.520-დან 4.518-მდე: სხვაობა 0.002. მთელ ტრენინგის განმავლობაში, შეუმუშავებელი სხვაობები ცხოვრობს დაახლოებით [0, 0.01]-ში.
ახლა შეხედეთ UCB-ის შერცხვის ბონუსს C=0.5-ზე, N=1000 და n_k=20-ით:
0.5 sqrt(ln(1000) / 20) = 0.5 sqrt(6.91 / 20) = 0.5 * 0.588 = 0.294
ბონუსი მუშაობს 0.294-ზე. შეუმუშავებელი ჯილდო მუშაობს 0.001-ზე. ბონუსი 300x უფრო დიდია ჯილდოზე. UCB-ის argmax თითქმის მთლიანად სორტობს ბონუსით; mean_reward ფაქტიურად ნულოვან სიგნალს იძლევა.
შედეგი მასშტაბირების გარეშე: ANDREA-ს ბენდიტი ყოველ ნაბიჯზე ირჩევს ხელს ყველაზე მცირე n_k-ით. Mean_reward უგულებელყოფს. ბენდიტი გახდება სუფთა შერცხვის პოლიტიკა.
გამოსწორება: 1000x
გაამრავლეთ შეუმუშავებელი ჯილდო 1000-ზე. ახლა ჯილდო 1.0-ზეა (შეუმუშავებელი 0.001-ის წინააღმდეგ). შეადარეთ იმავე კვლევის ბონუსს 0.294:
გასქელებული ჯილდო 1.0 vs ბონუსი 0.294 = ჯილდო ლიდერობს 3.4x-ით
ახლა mean_reward დომინირებს UCB რეიტინგში. კვლევა აძლიერებს კუდს (იშვიათი მკლავები იღებენ 0.3-ის ზრდას), მაგრამ რეიტინგის ძირითადი ნაწილი მოდის ობსერვირებულ ჯილდოდან.
რატომ 1000 (და არა 10, და არა 100,000)
მაგნიტუდის შესაბამისობა. შეუმუშავებელი ჯილდოები მიედინება ~10^-3-ზე. გამოკვლევის ბონუსი მიედინება ~10^0-ზე. სხვაობაა 10^3. შეუმუშავებელი ჯილდოს გამრავლება 10^3-ზე იწვევს იმავე დიაპაზონში ჩამოყალიბებას ბონუსთან.
100x მასშტაბირება ტოვებს ჯილდოს 0.1-ზე (მაინც ნაკლებია 0.294 ბონუსზე -> გამოკვლევა მაინც დომინირებს). 100,000x მასშტაბირება ჯილდოს 100-მდე ამაღლებს (ახლა გამოკვლევა ვერ იმოქმედებს; UCB ხარვეზდება საშუალო ჯილდოზე მოთხოვნილზე). 1000x მოთავსებულია მუშაობის ზონაში, სადაც ორივე ტერმი წვლილს შეაქვს.
კალიბრაცია, არა თეორია
1000x ფაქტორი არის ინჟინერიული კალიბრაცია, არა თეორეტული კონსტანტა. ის დამოკიდებულია სამ ფაქტორზე: ტრენინგის ზარალის მასშტაბი (კროს-ენტროპია 8K ტოკენის ლექსიკაზე მიედინება დაახლოებით 4.5-ზე), ნაბიჯთა შორის ზარალის შემცირების ტემპი (ნელი), და UCB კონსტანტა C=0.5. ნებისმიერის შეცვლა გამოიწვევს იმას, რომ 1000 აღარ იყოს სწორი მამრავლელი.
მასშტაბირების ფაქტორის შესახებ რეზონირება
შემდეგ რა მოჰყვება
რა გაქვთ
ჯილდოს მიბმა გარდაქმნის CUDA-ს ზარალის ანგარიშებს UCB-ისთვის მზად სიგნალში სამ ოპერაციაში: per-source EMA თვალყური ადევნებს ზარალის ისტორიას (alpha=0.1, ნელი), reward = max(0, EMA - loss) ამოკვეთს უარყოფითებს, & 1000x შეცვლა შეუსაბამებს ჯილდოს რიცხვით ზომას UCB შეკვეთის ბონუსის რიცხვით ზომას.
რა რჩება
ფლორები და ეპოქის შუალედები (აქტივობა 79) მუშაობს UCB გამომავალზე. წყაროს ფლორები გარანტირებული მინიმალური შეწოვაა პრიორიტეტული წყაროებისთვის UCB რანგის მიუხედავად. ეპოქის შუალედები ამცირებს წყაროების წონას, რომლებიც უფრო მეტხელაა შეწოვილი ვიდრე მათ დოკუმენტები აქვთ, ხელს უშლის მცირე მონაცემთა ნაკრებების მემორიზაციას, ხოლო დიდი მონაცემთა ნაკრებები რჩება სუფთად.
ციტირება
ANDREA whitepaper, განყოფილება 3.3.