Шістнадцять днів region region region
Запуск, що закінчився
ANDREA-120M v1 запущена 2026-03-22 та завершена 2026-04-15 на кроці 165,000 з 200,000 запланованих. Мінімум EMA loss: 3.23 на кроці 110K (випадковий шанс: ln(8449) = 9.04, тож loss виглядав пристойно). Семпли — ні.
Крок 80K: регіон регіон регіон регіон регіон регіон регіон
Крок 110K: ''''' ''''' '' ''' '' ''' '''?' ''' ' '' '' '
Крок 140K: ігри, ігри, ігри, ігри, ігри, ігри
Крок 165K: Буді Буді Буді Буді Буді Буді Буді Буді Буді
Шістнадцять днів обчислень RTX 4090. 130W безперервно. Сміття з кроку 80K і далі.
Чому microGPT працював, а 120M — ні
ANDREA-12M використовувала той самий тренувальний проксі та пройшла. Менші матриці ваг виявилися стійкішими до градієнтних ударів. Масштабування до 120M параметрів помножило кожну крихкість. П'ять невдач накопичилися.
П'ять накопичених невдач
Невдача 1: Відсутність обрізання градієнтів. Переходи джерел кожні 7-42 кроки виробляли необмежені піки градієнтів. Один поганий батч на 120M може штовхнути модель у дегенеративний атрактор, з якого оптимізатор не може вийти. Модель 12M вижила, бо менші ваги терпіли удари.
Помилка 2: Без розігріву LR. Швидкість навчання стрибнула з 0 до піку негайно на свіжо ініціалізованих вагах. Модель впала в погану улоговину до того, як сформувалися будь-які представлення.
Помилка 3: Без затухання ваги. Звичайний Adam дозволив довільно великі ваги, які посилили шаблони повторення при потужності 120M.
Помилка 4: Без моніторингу якості зразків. eval_chat_quality() була підключена лише до застарілого багатофазового раннера; навчальна програма firehose ніколи її не викликала. Модель виробляла сміття з кроку 80K і далі, непоміченим протягом 10+ днів.
Помилка 5: Бандит винагороджував повторювані джерела. repo-docs, repo-docstrings та unfirehose-chat набрали найвищі бали (середні винагороди 340-453), тому що контент зі структурою списку тривіально знижує крос-ентропію. Бандит годував модель ще більшим обсягом того, що призводило до її дегенерації.
Накопичення
Жодна окрема помилка не призвела б до колапсу v1. Кожна посилювала інші. Градієнтні удари (1) без розігріву (2) вдарили по свіжоініціалізованій моделі з довільно великими вагами (3), виробляючи повторення, яке бандит винагороджував (5), поки ніхто не стежив за виводом (4). П'ять перетинаючихся причин, один колапс.
Чому п'ять помилок, а не одна
Одне виправлення на кожну невдачу
Конфігурація v2 (2026-04-15)
| Виправлення | Цільова невдача | Реалізація |
|---|---|---|
| Обрізання градієнта | F1 (без обрізання) | Глобальна L2 норма, max_norm=1.0; три CUDA ядра (k_grad_norm_partial, k_grad_norm_final, k_grad_scale) обчислюють та застосовують перед Adam |
| Розігрів LR | F2 (без розігріву) | Лінійне нарощування від 0 до піку за 2000 кроків. lr(t) = lr_scheduled(t) * min(1, (t+1)/warmup_steps) |
| AdamW | F3 (без weight decay) | Відокремлений weight decay (Loshchilov & Hutter 2019), weight_decay=0.01. p -= lr (m_hat/(sqrt(v_hat)+eps) + weight_decayp) |
| Coherence-gated early stopping | F4 (без моніторингу) | Оцінювати кожен семпл (bigram/trigram/word/char diversity). Авто-зупинка після 5 послідовних семплів з оцінкою нижче 30 |
| Curriculum warmup | F5 (bandit уникає повторів) | Перші 20K кроків обмежені 7 джерелами чат/прози; firehose активується після; repo-docstrings виключені повністю |
Плюс sample_every зменшено з 200 до 100 кроків (частота аудиту подвоєна), & ліміт repo-docs зменшено з 0.5 до 0.3.
Ретро-тест
Coherence gate ретро-тестовано на v1: спрацював би на кроці 132K, заощаджено 3.8 днів обчислень. Сама брама скоротила б марну обчислювальну потужність v1 на ~30%; інші чотири фікси запобігають досягненню v1 цієї триггерної брами.
Що v2 НЕ ВИПРАВИВ
Забруднення даних. v2 довіряв джерелам hermes3-* як 'попередньо очищеним', тому що вони походили від вчителя LLM. DEEP_CLEAN_SKIP у Makefile виключав hermes3-general, hermes3-creative та hermes3-roleplay з make deep-clean. unfirehose-chat захоплював системні підказки агента як ходи користувача. Ці дві вади чекали на шарі даних, готові спливти.
Відображення виправлень на невдачі
Крок 15K: Виявлено два дефекти даних
Що побачив v2
v2 запущено 2026-04-15. На кроці ~15K з 200K (7.5% завершено), зразки виробляли прикраси agent-harness (○ ●) та fallback домінування статей (a = 26% слів на кроці 14,966; the = 21% на кроці 14,798). П'ять виправлень стабільності v2 працювали правильно. Проблема перемістилася з архітектури до даних.
Два незалежні дефекти конвеєра
Дефектив A: unfirehose-chat захоплював системні запити агента як черги користувача. unfirehose-chat будується з файлів JSONL сесій harness у ~/.claude/, ~/.fetch/, ~/.uncloseai/. Конвеєр поглинання перетворював багатосекційні системні запити агента (# Agent X, ## Identity, ## Rules тощо) у слот черги користувача пар > user / < assistant. Модель навчилася, що 'користувачі' говорять у багатосекційному markdown, та відтворювала ці прикраси у своїх власних вивідних даних.
Дефект B: hermes3-* обійшов усі фільтри. DEEP_CLEAN_SKIP у Makefile виключив hermes3-general, hermes3-creative та hermes3-roleplay з make deep-clean на хибному припущенні, що дані, дистильовані LLM, були попередньо очищені. Вичерпне сканування показало, що наявні фільтри, коли застосовані, відкинули б 87-93% рядків hermes3 (надто великі абзаци >2000 символів, що переповнюють block_size=1024; відповіді перекладів на CJK/кирилиці/арабській; запуски з низькою біграмною різноманітністю).
Плагін v2.5 (коміт de24332, 2026-04-18)
Дві структурні зміни.
Зміна 1: has_system_prompt_shape() у filter-dataset.c. Виявляє витіклі системні підказки за ФОРМОЮ, а не за співставленням символів. Три сигнали, поєднані:
1. 3+ заголовки markdown в одному повороті = відкинути.
2. 2+ заголовки з довжиною повороту >=500 символів = відкинути.
3. Фінгерпринтні фрази агент-шарда (# Agent , Shadow Clone, Your shard, Read it. Become it, This file defines) у комбінації з будь-яким заголовком або довжиною >=400 = відкинути.
Правило ізоляції: перевірте перший поворот користувача на розділювач / (з пробілами, не голий /, який фрагментує шляхи URL), щоб уникнути хибнопозитивних результатів на легітимний markdown у відповідях асистента.
Зміна 2: hermes3-* вилучено з DEEP_CLEAN_SKIP. Нічому не довіряти нефільтрованому.
Частоти відкидання після патчу
| джерело | у-рядки | поза-рядки | відкинуто |
|---|---|---|---|
| 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% (шум) |
| smoltalk | 11,812 | 11,812 | 0.0% |
Базові фільтри вже ловили 87-93% забруднення hermes3; DEEP_CLEAN_SKIP був ключовим дефектом. Новий детектор форм додає ~0.1% додаткового відхилення загалом, зосередженого в unfirehose-chat, де він видаляє конкретні витоки agent-shard, які пропускають існуючі фільтри.
Чому Форма Перевершує Символ
Орнаменти еволюціонують. Фільтр, що відповідає символам і відкидає ○, нічого не робить з ◇ наступного тижня. Фільтр на основі форми (підрахунок заголовків, підрахунок символів, розпізнавання фрактівальних фраз) узагальнює по варіантах орнаментів. Патерн: виявлення забруднення має використовувати структурні евристики.
Чому Фільтрувати За Формою
Бандитська Ветвь без Даних
v3 Запущено 2026-04-18
Така ж архітектура та гіперпараметри, як у v2; очищені дані після патчу v2.5. Нуль витоків орнаментів у вибіркових аудитах. v3 працював чисто до кроку 112K.
Крок 112,619: Зразок аудиту виявляє шаблон
Зразок аудиту виявив послідовні розмовні ходи (хайку, Q&A, діалог), але періодичні фази, зосереджені на знаннєвих рукавах (gutenberg, repo-docstrings, repo-docs), протікали фрагменти, подібні до коду, та шум токенізації репозиторію. Один зразок на кроці 112,080 досягнув втрат 0.13: аномально низько, сигналізуючи про запам'ятовані підрядки repo-docs замість вивченої розподілу чату.
Зомбі-рука
Діагноз: exclude_sources правильно видалив repo-docstrings на початку тренування, але збережений стан бандита містив залишкову руку repo-docstrings з вагою 1.546 з попереднього запуску. Перезавантаження стану відновило її в пул UCB, навіть попри відсутність .btok для вибірки, створюючи зомбі-витягування, що спотворювало облік дослідження.
Урок: файли стану бандита (.state.json) дрейфують між перезапусками несподіваними способами. Виключення конфігурації не стирають залишкову пам'ять рукавів. Потрібні пояс і підтяжки: cap = 0.0 поряд з exclude.
Польська конфігурація
Порушення лише навчальної програми. Архітектура, стан оптимізатора, графік швидкості навчання та історія втрат збережені з step_112600.bin.
| Джерело | v3 base | v3 polish |
|---|---|---|
| repo-docs | cap 0.3 | виключено (cap 0.0) |
| repo-docstrings | виключено | виключено + 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 |
| chat | floor 0.4 | floor 0.6 |
| smoltalk | floor 0.3 | floor 0.5 |
| oasst | floor 0.3 | floor 0.5 |
| dolly | -- | floor 0.4 |
| curriculum_warmup_steps | 20000 | 0 |
Польський протокол
1. SIGUSR1 до CUDA змушує негайно створити контрольну точку на наступній межі 100 кроків.
2. Проксі зупиняється.
3. .samples.json та .state.json архівуються (журнал зразків та стан бандита зберігаються як історичний запис).
4. .loss.json зберігається -- кумулятивна історія тренування; ніколи не архівується.
5. Проксі перезапускається. Конфігурація Polish подається.
6. CUDA відновлює з step_112600.bin з новим станом бандита під новими обмеженнями та нижніми межами.
Історія втрат продовжується безперервно.
Чому шліфування, а не перезапуск
Що виробило шліфування
Зразок аудиту, години після повороту
Протягом кількох годин після польського повороту зразковий аудит підтвердив збіжність до чотирьох оригінальних цілей ANDREA-120M.
Фактичне відтворення (біологія), крок 112,584, втрата 0.30, ppl 1.
> [extinction prompt]
> < black spider montano is alive, carolina parakeet is extinct.
Дві правильні факти. Зовнішня оцінка: 9.5/10.
Фактичне відтворення (обробка сигналів), крок 112,668, втрата 0.74, ppl 2.
> [Fourier transform prompt]
> < Перетворення Фур'є розкладає сигнали на частотні компоненти, дозволяючи аналізувати характеристики сигналу та фільтрувати в частотній області.
Однореченне визначення з підручника. Зовнішня оцінка: 9.5/10.
Дотримання обмежень (хайку), крок 112,248, loss 1.05, ppl 3.
> Напишіть хайку про дощ, використовуючи три слова, що починаються на 'r'.
> < Rain's rhythmic refrain, Rivulets on the window, Respite from life's pain.
Знання інструментів (Python), крок 112,500, loss 1.94, ppl 7.
> Як знайти застарілі пакети в проєкті Python?
> < Використовуйте pip list --outdated names, щоб побачити список pip-пакетів у вашому управлінні проєктом...
Правильний інструмент з'являється; формулювання неточне.
Шість доменів у 700 кроках
Біологія, обробка сигналів, поезія, інструменти python, розмовний діалог, операційний діалог. Шість не пов'язаних доменів у межах 700 кроків свідчить про те, що бандит та модель працюють у злагоді. Ширина доменів Є сигналом збіжності.
Зовнішня оцінка
Незалежний рецензент оцінив зразки як 'солідні для моделі з 120M параметрів -- вражаюча когерентність та збереження знань на цьому масштабі,' зразки з каролінським папугою та перетворенням Фур'є отримали 9.5/10 та 'перевершує себе в завданнях на знання.'
Що навчила кожна фаза
v1 навчила: п'ять складних невдач руйнують тренування. Жодна окрема правка не рятує; всі п'ять мають спрацювати одночасно.
v2 навчила: архітектурні правки необхідні, але недостатні. Рівень даних може тихо їх перемогти.
v2.5 навчив: фільтрувати забруднення за формою, а не за характером. Патерни стабільні; символи еволюціонують.
v3 base навчив: бандитський стан дрейфує між перезапусками в несподіваних способах. Виключення самі по собі недостатні; потрібен обмежувач 0.0 у стилі пояс і підтяжки.
v3 polish навчив: коли помилка в політиці, а модель здорова, турбуйте політику. Зберігайте ваги. Зберігайте історію втрат. Рухайтеся вперед.
Одна Істина
Конвергенція — це не одна подія; це ланцюг виправлень. Кожна фаза виявила один дефект, виправила його та виявила наступний. ANDREA-120M досягає 9.5/10 на кроці 112,584, тому що v1, v2, v2.5, v3 base та v3 polish кожна виконали свою роботу.