Szesnaście dni region region region
Uruchomienie, które się zakończyło
ANDREA-120M v1 wystartowała 2026-03-22 i została zakończona 2026-04-15 w kroku 165 000 z 200 000 planowanych. Minimum straty EMA: 3,23 w kroku 110 tys. (losowa szansa: ln(8449) = 9,04, więc strata wyglądała przyzwoicie). Próbki nie.
Krok 80K: region region region region region region region
Krok 110K: ''''' ''''' '' ''' '' ''' '''?' ''' ' '' '' '
Krok 140K: gry, gry, gry, gry, gry, gry
Krok 165K: Budy Budy Budy Budy Budy Budy Budy Budy Budy
Szesnaście dni obliczeń RTX 4090. 130W ciągłe. Śmieci od kroku 80K wzwyż.
Dlaczego microGPT zadziałał, ale 120M nie
ANDREA-12M używało tego samego proxy treningowego i przeszło. Mniejsze macierze wag okazały się bardziej odporne na wstrząsy gradientu. Skalowanie do 120M parametrów pomnożyło każdą kruchość. Pięć awarii się nasiliło.
Pięć nasilających się awarii
Awaria 1: Brak klipowania gradientu. Przejścia źródeł co 7-42 kroki powodowały nieograniczone skoki gradientu. Pojedyncza zła partia przy 120M może wepchnąć model w degeneracyjny atraktor, z którego optimizer nie może uciec. Model 12M przetrwał, ponieważ mniejsze wagi tolerowały te wstrząsy.
Błąd 2: Brak rozgrzewki LR. Learning rate skoczył z 0 do maksimum natychmiast na świeżo zainicjalizowanych wagach. Model wpadł w złą nieckę, zanim powstały jakiekolwiek reprezentacje.
Błąd 3: Brak weight decay. Czysty Adam pozwolił na dowolnie duże wagi, które wzmacniały wzorce powtarzania przy pojemności 120M.
Błąd 4: Brak monitorowania jakości próbek. eval_chat_quality() był podłączony tylko do starego wielofazowego runnera; curriculum firehose nigdy go nie wywoływał. Model produkował śmieci od kroku 80K wzwyż, niezauważone przez 10+ dni.
Błąd 5: Bandit nagradzał powtarzalne źródła. repo-docs, repo-docstrings i unfirehose-chat miały najwyższe wyniki (średnie nagrody 340-453), ponieważ treści o strukturze listowej trywialnie zmniejszają entropię krzyżową. Bandit karmił model większą ilością tego, co powodowało jego degenerację.
Kumulacja
Żaden pojedynczy błąd nie spowodowałby załamania v1. Każdy wzmacniał pozostałe. Szoki gradientu (1) bez rozgrzewki (2) uderzyły w świeżo zainicjalizowany model z arbitralnie dużymi wagami (3), produkując powtarzalność, którą bandit nagradzał (5), podczas gdy nikt nie obserwował wyjścia (4). Pięć przecinających się przyczyn, jedno załamanie.
Dlaczego pięć porażek, nie jedna
Jedna Poprawka Na Błąd
Konfiguracja v2 (2026-04-15)
| Poprawka | Dotyczy błędu | Implementacja |
|---|---|---|
| Obcinanie gradientu | F1 (brak obcinania) | Globalna norma L2, max_norm=1.0; trzy jądra CUDA (k_grad_norm_partial, k_grad_norm_final, k_grad_scale) obliczają i stosują przed Adamem |
| Rozgrzewka LR | F2 (brak rozgrzewki) | Liniowy wzrost od 0 do maksimum przez 2000 kroków. lr(t) = lr_scheduled(t) * min(1, (t+1)/warmup_steps) |
| AdamW | F3 (brak weight decay) | Odłączony weight decay (Loshchilov & Hutter 2019), weight_decay=0.01. p -= lr (m_hat/(sqrt(v_hat)+eps) + weight_decayp) |
| Coherence-gated early stopping | F4 (brak monitoringu) | Ocena każdego sample (bigram/trigram/word/char diversity). Automatyczne zatrzymanie po 5 kolejnych próbach poniżej 30 punktów |
| Curriculum warmup | F5 (bandit eliminuje powtórzenia) | Pierwsze 20K kroków ograniczone do 7 źródeł chat/prose; firehose aktywuje się potem; repo-docstrings całkowicie wykluczone |
Plus sample_every zmniejszone z 200 do 100 kroków (częstotliwość audytu podwojona), & limit repo-docs zmniejszony z 0.5 do 0.3.
Back-Test
Coherence gate przetestowane wstecznie na v1: uruchomiłoby się w kroku 132K, oszczędzając 3.8 dni obliczeń. Sam gate zmniejszyłby zmarnowane obliczenia v1 o ~30%; pozostałe cztery poprawki uniemożliwiają v1 dotarcie do wyzwolenia gate'a.
Czego v2 NIE naprawiło
Zanieczyszczenie danych. v2 zaufało źródłom hermes3-* jako „pre-czystym”, ponieważ pochodziły od nauczyciela LLM. DEEP_CLEAN_SKIP w Makefile wykluczało hermes3-general, hermes3-creative i hermes3-roleplay z make deep-clean. unfirehose-chat uchwyciło systemowe prompty agenta jako tury użytkownika. Te dwie wady czekały na warstwie danych, gotowe do ujawnienia się.
Mapowanie poprawek do awarii
Krok 15K: Dwa Defekty Danych Wynurzyły się na Powierzchnię
Co Widział v2
v2 wystartował 2026-04-15. Przy kroku ~15K z 200K (7,5% ukończenia), próbki wygenerowały ozdoby agent-harness (○ ●) oraz fallback dominacji artykułu (a = 26% słów w kroku 14 966; the = 21% w kroku 14 798). Pięć poprawek stabilności v2 działało poprawnie. Awaria przesunęła się z architektury do danych.
Dwa Niezależne Defekty Pipeline'u
Defekt A: unfirehose-chat uchwycił systemowe prompty agenta jako tury użytkownika. unfirehose-chat buduje z plików JSONL sesji harness w ~/.claude/, ~/.fetch/, ~/.uncloseai/. Pipeline ingestowy konwertował wielosekcjowe systemowe prompty agenta (# Agent X, ## Identity, ## Rules itp.) na slot tury użytkownika w parach > user / < assistant. Model nauczył się, że 'użytkownicy' mówią w wielosekcjowym markdownzie i odtwarzał te ozdoby we własnych wyjściach.
Wada B: hermes3-* ominęła wszystkie filtry. DEEP_CLEAN_SKIP w Makefile wykluczał hermes3-general, hermes3-creative i hermes3-roleplay z make deep-clean na fałszywym założeniu, że dane destylowane z LLM były wstępnie wyczyszczone. Wyczerpujące skanowanie pokazało, że istniejące filtry, po zastosowaniu, odrzuciłyby 87-93% linii hermes3 (zbyt duże akapity >2000 znaków przekraczające block_size=1024; odpowiedzi tłumaczeniowe w CJK/cyrylica/arabski; sekwencje o niskiej różnorodności bigramów).
Łatka v2.5 (commit de24332, 2026-04-18)
Dwie zmiany strukturalne.
Zmiana 1: has_system_prompt_shape() w filter-dataset.c. Wykrywa wyciekłe systemowe prompty po KSZTALCIE, nie po dopasowaniu znaków. Trzy sygnały połączone:
1. 3+ nagłówki markdown w jednej turze = odrzucenie.
2. 2+ nagłówki z długością tury >=500 znaków = odrzucenie.
3. Fraza odcisków palców shardu agenta (# Agent , Shadow Clone, Your shard, Read it. Become it, This file defines) w połączeniu z jakimkolwiek nagłówkiem lub długością >=400 = odrzucenie.
Reguła izolacji: sprawdź pierwszą turę użytkownika przy separatorze / (ze spacjami, nie goły /, który fragmentuje ścieżki URL) aby uniknąć fałszywych pozytywów na legalnym markdown w odpowiedziach asystenta.
Zmiana 2: hermes3-* przeniesione poza DEEP_CLEAN_SKIP. Nie ufaj niczemu nieprzefiltrowanemu.
Wskaźniki odrzuceń po aktualizacji
| źródło | w-liniach | out-liniach | odrzucone |
|---|---|---|---|
| hermes3-general | 536,858 | 67,395 | 87.7% |
| hermes3-roleplay | 35,191 | 2,481 | 93.0% |
| hermes3-creative | 14,258 | 1,373 | 90.4% |
| unfirehose-chat | 3,816 | 2,653 | 30.5% |
| chat | 45,257 | 44,538 | 1.6% (szum) |
| smoltalk | 11,812 | 11,812 | 0.0% |
Filtry bazowe już wychwytują 87-93% zanieczyszczeń hermes3; DEEP_CLEAN_SKIP był kluczowym defektem nośnym. Nowy detektor kształtów dodaje ~0.1% dodatkowych odrzuceń ogółem, skoncentrowanych w unfirehose-chat, gdzie usuwa specyficzne wycieki agent-shard, których istniejące filtry nie wychwytują.
Dlaczego Kształt Pokonuje Charakter
Ozdoby ewoluują. Filtr dopasowujący znaki, który usuwa ○, nic nie zrobi z ◇ w przyszłym tygodniu. Filtr oparty na kształcie (liczenie nagłówków, liczenie znaków, rozpoznawanie fraz-fingerprints) uogólnia się na warianty ozdób. Wzorzec: wykrywanie zanieczyszczeń musi używać heurystyk strukturalnych.
Dlaczego Filtrować Według Kształtu
Ramię Bandita bez Danych
v3 Uruchomione 2026-04-18
Ta sama architektura i hiperparametry co v2; wyczyszczone dane po patchy v2.5. Zero przecieków ozdobników w audytach próbkowych. v3 działało czysto do kroku 112K.
[BLOCK_TYPE v3_polish/zombie_arm]
Krok 112,619: Przykładowy audyt wychwytuje wzorzec
[BLOCK_TYPE v3_polish/zombie_arm]Przykładowy audyt ujawnił spójne tury konwersacyjne (haiku, Q&A, dialog), ale okresowe fazy skupione na ramionach wiedzy (gutenberg, repo-docstrings, repo-docs) wyciekały fragmenty przypominające kod oraz szum tokenizacji repozytorium. Jedna próbka w kroku 112,080 osiągnęła stratę 0.13: anomalnie niską, sygnalizującą zapamiętane pod ciągi repo-docs zamiast wyuczonego rozkładu czatu. [BLOCK_TYPE v3_polish/zombie_arm]
[BLOCK_TYPE v3_polish/zombie_arm]
Zombie Arm
[BLOCK_TYPE v3_polish/zombie_arm]Diagnoza: exclude_sources poprawnie usunęło repo-docstrings na starcie treningu, ale trwały stan bandyta niósł resztkowe ramię repo-docstrings z wagą 1.546 z poprzedniego uruchomienia. Przeładowanie stanu przywróciło je do puli UCB, mimo że nie istniał plik .btok do próbkowania, tworząc zombie pociągnięcie, które zniekształciło księgowość eksploracji.
[BLOCK_TYPE v3_polish/zombie_arm]
[BLOCK_TYPE v3_polish/zombie_arm]
Lekcja: pliki stanu bandyta (.state.json) dryfują między restartami w zaskakujący sposób. Wykluczenia konfiguracji nie kasują pamięci resztkowych ramion. Potrzebne pas i szelki: cap = 0.0 obok exclude.
Konfiguracja polska
Perturbacja programu nauczania tylko. Architektura, stan optymalizatora, harmonogram szybkości uczenia oraz historia strat zachowane z step_112600.bin.
| Źródło | v3 base | v3 polish |
|---|---|---|
| repo-docs | cap 0.3 | wykluczone (cap 0.0) |
| repo-docstrings | wykluczone | wykluczone + cap 0.0 |
| repo-commits | cap 0.4 | cap 0.2 |
| dictionary | cap 0.5 | cap 0.25 |
| gutenberg | cap 0.8 / floor 0.3 | cap 0.7 / floor 0.4 |
| irc-qa-strict | -- | cap 0.3 |
| unweapon | -- | cap 0.3 |
| synthetic-chat | -- | cap 0.4 |
| hermes3-general | floor 0.5 | floor 0.7 |
| hermes3-creative | floor 0.4 | floor 0.55 |
| hermes3-roleplay | floor 0.4 | floor 0.5 | [BLOCK_TYPE v3_polish/zombie_arm]
| chat | floor 0.4 | floor 0.6 | [BLOCK_TYPE v3_polish/zombie_arm]
| smoltalk | floor 0.3 | floor 0.5 | [BLOCK_TYPE v3_polish/zombie_arm]
| oasst | floor 0.3 | floor 0.5 | [BLOCK_TYPE v3_polish/zombie_arm]
| dolly | -- | floor 0.4 | [BLOCK_TYPE v3_polish/zombie_arm]
| curriculum_warmup_steps | 20000 | 0 | [BLOCK_TYPE v3_polish/zombie_arm]
[BLOCK_TYPE v3_polish/zombie_arm]
Polski Protokół
1. SIGUSR1 do CUDA wymusza natychmiastowy checkpoint na następnej granicy 100 kroków.
2. Proxy zatrzymuje się.
3. .samples.json & .state.json zarchiwizowane (log próbek & stan bandyta zapisany jako zapis historyczny).
4. .loss.json zachowany -- skumulowana historia treningu; nigdy nie archiwizowany.
5. Proxy restartuje. Polska konfiguracja przesłana.
6. CUDA wznawia od step_112600.bin z nowym stanem bandyta pod nowymi limitami & dolnymi granicami.
Historia strat kontynuowana bez przerw.
Dlaczego polerowanie, a nie restart
Co wyprodukowało polerowanie
Przykładowy audyt, godziny po pivocie
W ciągu godzin od polskiego zwrotu, przykładowy audyt potwierdził zbieżność z czterema oryginalnymi celami ANDREA-120M.
Faktyczne przypomnienie (biologia), krok 112 584, strata 0,30, ppl 1.
> [extinction prompt]
> < black spider montano is alive, carolina parakeet is extinct.
Dwa poprawne fakty. Zewnętrzna ocena: 9,5/10.
Faktyczne przypomnienie (przetwarzanie sygnałów), krok 112 668, strata 0,74, ppl 2.
> [Fourier transform prompt]
> < Transformata Fouriera rozkłada sygnały na składowe częstotliwościowe, umożliwiając analizę charakterystyk sygnału i filtrowanie w dziedzinie częstotliwości.
Definicja z podręcznika w jednym zdaniu. Zewnętrzna ocena: 9.5/10.
Przestrzeganie ograniczeń (haiku), krok 112,248, strata 1.05, ppl 3.
> Napisz haiku o deszczu, używając trzech słów zaczynających się na 'r'.
> < Rytmiczny refren deszczu, Strumyczki na szybie, Ukojenie od bólu życia.
Wiedza o narzędziach (Python), krok 112 500, strata 1,94, ppl 7.
> Jak znaleźć nieaktualne pakiety w projekcie Python?
> < Użyj pip list --outdated names, aby zobaczyć listę pakietów pip w zarządzaniu projektem...
Prawidłowe narzędzie się pojawia; sformułowanie nieprecyzyjne.
Sześć dziedzin w 700 krokach
Biologia, przetwarzanie sygnałów, poezja, narzędzia Python, dialog konwersacyjny, dialog operacyjny. Sześć niepowiązanych dziedzin w ramach 700 kroków mówi nam, że bandyta i model współpracują. Szerokość dziedzin JEST sygnałem konwergencji.
Ocena zewnętrzna
Niezależny recenzent ocenił próbki jako 'solidne jak na model z 120M parametrów -- imponująca spójność i retencja wiedzy na tej skali', z próbkami o papudze karolińskiej i transformacie Fouriera ocenionymi na 9.5/10 i 'przewyższającymi swoje możliwości w zadaniach wiedzy'.
Czego nauczyła każda faza
v1 nauczyła: pięć kumulujących się błędów niszczy trening. Żaden pojedynczy fix nie ratuje; wszystkie pięć muszą zadziałać jednocześnie.
v2 nauczyła: architektoniczne poprawki są konieczne, ale niewystarczające. Warstwa danych może je pokonać cicho.
v2.5 nauczył: filtrowanie zanieczyszczeń według kształtu, nie znaku. Wzorce są stabilne; symbole ewoluują.
v3 base nauczył: stan bandyty dryfuje między restartami w zaskakujący sposób. Samo wykluczanie nie wystarcza; wymagany jest limit 0.0 z pasem i szelkami.
v3 polish nauczył: gdy awaria jest w polityce, a model jest zdrowy, perturbuj politykę. Zachowaj wagi. Zachowaj historię strat. Idź naprzód.
Jedna Prawda
Konwergencja nie jest pojedynczym wydarzeniem; to łańcuch poprawek. Każda faza ujawniła jedną wadę, naprawiła ją i odkryła następną. ANDREA-120M osiąga 9.5/10 w kroku 112,584, ponieważ v1, v2, v2.5, v3 base i v3 polish każde wykonało swoją pracę.