Наскільки здивованою повинна бути модель?
Від Логітів до Ймовірностей
Після 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). Одне скалярне число на кожен тренувальний крок. Саме це число відображається на кривій втрат.
Обчислення втрат для однієї позиції
Перплексія = exp(втрата)
Дружніша шкала
Значення втрат, такі як 2.0 або 3.43, не відразу передають, що може робити модель. Перплексія переводить втрату на більш інтуїтивну шкалу:
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 | Територія фінального SMMA для ANDREA-12M |
| 3.0 | 20.1 | Розумний текст, але з невизначеністю |
| 3.43 | 30.9 | Мінімум ANDREA-120M v1 (до шліфування) |
| 5.0 | 148 | Раннє навчання, вивчення розподілу словника |
| 9.04 | 8449 | Базовий рівень випадкового вибору для словника ANDREA-120M |
Perplexity ставить значення втрат у контекст: втрата 2.0 означає, що модель ефективно вибирає з ~7 токенів, а не з 8449.
Базовий рівень випадковості
Модель, яка нічого не знає та вгадує рівномірно, призначає ймовірність 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
Будь-яка втрата вище цієї базової лінії означає, що модель працює гірше, ніж випадково. Будь-яка втрата нижче неї означає, що модель навчилася чомусь: вона концентрує масу ймовірності на меншій підмножині токенів, ніж рівномірний розподіл.
Читання значення втрати
Згладжування шуму на рівні кроків
Сирий Loss є шумним
Loss на кожному кроці коливається. Бандит ANDREA вибирає різне джерело кожні 7-42 кроки; деякі джерела (визначення словника) виробляють легкі loss; інші (абзаци з Gutenberg) виробляють важчі loss. Побудова графіка сирого loss кроку проти номера кроку дає хаотичний розкид.
Згладжена модифікована ковзна середня (SMMA) послаблює шум та виявляє тренд. Навчальний проксі ANDREA обчислює SMMA як:
SMMA[0] = loss[0]
SMMA[t] = (SMMA[t-1] * (N-1) + loss[t]) / N
З N = 100 (стандартне вікно згладжування ANDREA), кожне нове значення SMMA змішує 99% попереднього SMMA з 1% нової втрати кроку. Раптові стрибки поглинаються; стійкі зсуви з'являються поступово.
Чому не просто середнє?
Просте ковзне середнє за останні 100 кроків вимагає зберігання 100 значень втрат. SMMA зберігає одне значення (бігове середнє) та одну константу (розмір вікна). Економно за пам'яттю, обчислювально тривіально та достатньо гладко, щоб читати криву.
Різні ваги згладжування відповідають на різні питання:
- N = 10: відстежує короткострокові зміни; корисно під час фазових переходів
- N = 100: значення за замовчуванням ANDREA; відстежує середньостроковий прогрес
- N = 1000: лише довгостроковий тренд; корисний наприкінці тренування
Що відстежує ANDREA
Кожні 100 кроків проксі тренування записує loss.json з поточним SMMA, сирим loss, номером кроку та розбивкою за джерелами. Панель приладів на training.ai.unturf.com/dashboard опитує цей файл кожні 10 секунд. Зовнішні глядачі бачать живий прогрес; панель приладів тільки для читання.
Реальна крива 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 | Введено дані Hermes + перезапуск LR |
| 30K--35K | 2.35 | Hermes інтегровано, нові мінімуми |
| 35K--40K | 2.10 | 4-руковий фокус, крутий спуск |
| 40K--43.6K | 2.00 | Територія знань, SMMA нижче 2.0 |
Вирізняються три фази:
1. Крутий ранній спуск (0-10K). Втрата падає з 4.50 до 3.30, коли модель вивчає розподіл словникового запасу та базову структуру ходів. Базовий рівень випадкового шансу ln(2305) ≈ 7.74 знаходиться високо над цією кривою; модель швидко концентрує масу ймовірності, щойно стабілізуються вбудування.
2. Плато (20K-25K). Втрата зупиняється на 2.40. Бандит вичерпав запас на поточній суміші джерел. Дані Hermes додаються на кроці 25K, плюс теплий перезапуск LR, зламали плато.
3. Фінальний спад (35K-43.6K). Навчальна програма звузена з 16 джерел до 4 (hermes3-general + dictionary + gutenberg + chat). Крутіший спад втрат, ніж у повнорукавому бандиті. Фінальний SMMA: 2.0.
ANDREA-120M v1: Попереджувальна крива
Такий самий розрахунок словникового запасу: ln(8449) ≈ 9.04. ANDREA-120M v1 досягла SMMA 3.43 на кроці 110K (її мінімум), потім розійшлася:
| Кроки | EMA Втрати | Тренд |
|---|---|---|
| 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) додала паралельний сигнал: різноманітність біграм, різноманітність триграм, наявність англійських слів, різноманітність символів. Коли всі чотири показники залишаються нижче 30 протягом 5 послідовних зразків, навчання автоматично зупиняється. Цей сигнал виявив би v1 на кроці 132K, заощадивши 3,8 дні обчислень.
Що розповідає кожна фаза
Урок 120M v1
Два незалежні сигнали
ANDREA-120M v1 досяг SMMA 3.43 на кроці 110K. Чисельно: 273× краще за випадковий шанс (перплексія 31 проти розміру словника 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]
< чорна павучиха монтана жива, ка Carolina parakeet вимерла.
Обидва факти правильні. Carolina parakeet оголошено вимерлою у 1939 році; чорна павучиха мавпа існує. Низька втрата (0.30) ТА когерентне фактичне відтворення.
Крок 112,500, втрата 1.94, ppl 7::
> Як знайти застарілі пакети в проєкті Python?
< Використовуйте pip list --outdated names, щоб побачити список пакунків pip...
Вища втрата (1.94 → ppl 7), але правильний інструмент з'являється з тренувальних даних. Плавність формулювань все ще розвивається на 56% етапі тренування.
Дисципліна двох сигналів
Сучасні тренувальні конвеєри моніторять ОБИДВА:
- Крива втрат. Показує, чи модель навчається чомусь кількісному.
- Аудит зразків. Показує, чи те, що модель вивчила, є корисним.
v2 додав coherence-gated early stopping (activity 78). v3 polish був perturbation навчальної програми, викликаний аудитом зразків, а не значеннями втрат. Втрати самі по собі необхідні, але ніколи не достатні.