Семантична відстань як евклідова відстань
Багатовимірний векторний простір
Кожен токен у словнику ANDREA-120M обсягом 8449 токенів відображається в одну точку в R^768. Матриця вкладень токенів має розмірність 8449 × 768: 8449 рядків, по одному на кожен токен словника; 768 стовпців, по одному на кожну вимірність вкладення.
Три властивості роблять це векторним простором
1. Додавання. v_a + v_b належить R^768. Сума двох вкладень є коректним вектором.
2. Множення на скаляр. alpha * v належить R^768 для будь-якого дійсного alpha. Розтягування або стиснення вздовж того самого напрямку.
3. Лінійність. alpha v_a + beta v_b належить R^768. Лінійні комбінації залишаються всередині простору.
Ці властивості дають нам геометричні інструменти: відстань, кут, проекцію, базис, ортогональність.
Відстань як семантична подібність
Косинусна подібність двох ембеддингів вимірює кут між ними: cos(theta) = (v_a . v_b) / (||v_a|| * ||v_b||). Діапазон: від -1 (протилежні) до +1 (паралельні).
Емпірична закономірність після навчання: токени з подібними контекстами утворюють ембеддинги з високою косинусною подібністю. ANDREA-120M розміщує parakeet та monkey близько (обидва біологічні, обидва види, обидва живі чи вимерлі категорії). Вона розміщує Fourier та transform близько (контекст обробки сигналів). Вона розміщує parakeet та Fourier далеко (крос-доменна ортогональність).
Чому R^768, а не R^384
ANDREA-12M використовувала d_model = 384. ANDREA-120M подвоїла до 768. Подвоєння має значення: простір розмірності 384 має менше доступних «кутів», і крос-доменна дезамбігуація страждає. Подвоєння ємності дає моделі простір для розрізнення bank (річка) та bank (фінансовий) у різні басейни простору ембеддингів, не дозволяючи одному згортатися в інше.
Оновлення ембеддингів як векторне переміщення
Кожен крок градієнта додає delta_v до v_token. Геометрично: невеликі переміщення в R^768 зсувають позицію кожного токена до областей, що зменшують втрати. За 200K кроків кожен токен мігрує з випадкової ініціалізації до вивченої позиції.
Обчислення відстані
Три навчені ембеддинги (спрощені до R^3 для арифметики):
- v(parakeet) = (1.0, 0.5, 0.0)
- v(monkey) = (1.2, 0.3, 0.1)
- v(Fourier) = (0.0, 0.0, 1.5)
Проєкція на підпростір запитів
Що обчислює увага
Для токена в позиції t увага обчислює:
softmax(Q K^T / sqrt(d_k)) V
Де Q — запит (питання поточного токена), K — ключі (ідентифікатори всіх попередніх токенів), V — значення (вміст усіх попередніх токенів). Результат — це суміш V, зважених за ступенем відповідності запиту до кожного ключа.
Геометричне тлумачення
Уявіть K як список векторів у R^d_k. Кожен рядок — це ключ одного попереднього токена. Q — один вектор у R^d_k: запит поточного токена.
Q K^T проєктує кожен ключ на Q. Скалярний добуток q . k_i показує, наскільки k_i лежить уздовж напрямку q. Довга проєкція = ключ сильно релевантний до запиту. Коротка проєкція = ключ майже нерелевантний.
softmax нормалізує проєкції у ваги, що сумуються до 1. Зважена сума V — це єдиний вектор: суміш попереднього контенту, зважена за релевантністю до поточного запиту.
Багатоголовкова увага як проєкція в кілька підпросторів
ANDREA-120M використовує 12 голів уваги. d_model = 768; d_k = 768 / 12 = 64. Кожна голова проєктує у різний 64-вимірний підпростір R^768. Дванадцять голів дають дванадцять незалежних поглядів на ту саму послідовність: одна голова може відстежувати граматичну роль, інша — семантичну подібність, третя — далекі посилання.
Геометрично: кожна голова визначає 64-вимірний орієнтований підпростір («вікно»), через яке вона переглядає минуле.
Причинна маска
Моделі типу decoder-only додають причинну маску: кожне значення Q K^T над діагоналлю замінюється на -infinity перед softmax. Геометрично: проекція на будь-який майбутній токен отримує нульову вагу. Токен t може бачити лише токени від 0 до t.
Чому це важливо: навчання та інференс стають симетричними. Один і той самий forward pass, однакові масковані проекції, без спеціальної логіки генерації.
Масштабування sqrt(d_k)
Без масштабування скалярні добутки зростають разом із d_k. Великі добутки переводять softmax у режим one-hot (одна вага близька до 1, решта — до 0). Ділення на sqrt(d_k) зберігає проекції в масштабі одиничної дисперсії, підтримуючи чіткість softmax у широкому діапазоні значень d_k.
Геометрично: sqrt(d_k) нормалізує довжини проекцій, щоб softmax бачив порівнянні величини незалежно від розмірності підпростору.
Читання проекції
Три ключі та один запит у R^4 (спрощено для обчислень):
- q = (1, 0, 1, 0)
- k_1 = (1, 0, 0, 0) [минулий токен 1]
- k_2 = (0, 0, 1, 0) [минулий токен 2]
- k_3 = (0, 1, 0, 1) [past token 3]
d_k = 4, тому sqrt(d_k) = 2.
Gradient Descent як шлях по рельєфу
Поверхня у 120M+1 вимірах
Кожна конфігурація ваг моделі ANDREA-120M — це одна точка в R^120,000,000. Функція втрат L(w) відображає кожну точку в дійсне число: значення втрат на тренуванні для цієї конфігурації. Разом значення втрат утворюють (120M+1)-вимірну поверхню над простором параметрів.
Геометрично неможливо візуалізувати безпосередньо. Концептуально: це рельєф. Гори (високі втрати), долини (низькі втрати), сідлові точки, плато, хребти, улоговини.
Градієнт як локальний нахил
grad L(w) — вектор у R^120M, що вказує в напрямку найшвидшого ЗРОСТАННЯ L. Його заперечення: -grad L(w) вказує в напрямку найшвидшого спуску.
Один крок AdamW зміщує w у напрямку, протилежному градієнту (з адаптивним масштабуванням від m та v). Геометрично: крихітний крок уздовж поверхні вниз, з розміром кроку, що контролюється lr.
Погана улоговина v1
v1 зробив свій перший крок при LR = пік (0.0003) на щойно ініціалізованих вагах. Геометрична картина: w_0 знаходиться в області з дуже високою кривизною (випадкова ініціалізація має високу кривизну в багатьох напрямках), і крок з піковим LR приземляє модель у неправильну улоговину. Наступні кроки не можуть вийти з неї. Модель застрягає, генеруючи «region region region», бо ця улоговина має найнижчі втрати, яких модель може досягти з того місця, куди вона потрапила.
Шлях розігріву v2
v2 робить 2000 маленьких кроків з LR, що поступово зростає від 0 до піку. Геометрична картина: w_0 спочатку м’яко рухається вздовж гладких напрямків (де кривизна низька). До кроку 2000 w переміщується в більш придатну для навігації область; потім піковий LR може вести модель до кращої улоговини без перестрибування.
Розігрів — це протокол ініціалізації з урахуванням геометрії: спочатку модель знаходить безпечну локальну околицю, а потім її активно «підштовхують».
Широкі та вузькі басейни
На кроці 112K ANDREA-120M перебуває в басейні. Питання: наскільки він широкий?
Широкий басейн = багато сусідніх конфігурацій ваг також досягають низьких значень функції втрат на тренуванні. Узагальнення зазвичай добре (ширина басейну передбачає продуктивність на тесті; див. урок PAC-Bayes, Розділ 3).
Вузька улоговина = лише тонка множина ваг досягає низьких втрат. Узагальнення зазвичай погіршується.
v3 polish на кроці 112,619 підштовхнув модель уздовж поверхні (без скидання) до ширшої улоговини через curriculum perturbation: зміна функції втрат (інший bandit, інша навчальна суміш), SGD знаходить близьку плоску область під новою політикою.
Зомбі-скеля
Аномальні втрати 0.13 на кроці 112,080 були СКЕЛЕЮ: різка, вузька область, де один конкретний вхідний патерн (підрядок запам’ятованих repo-docs) дає майже нульові втрати. Модель зірвалася з ширшої улоговини в вузьку балку. hard-exclusion repo-docs у Polish-pivot заповнив цю балку, тож SGD більше не міг її знайти.
Читання рельєфу
Змішування навчальних програм як прогулянка дискретним симплексом
Що таке симплекс
n-вимірний симплекс (зокрема, стандартний (n-1)-симплекс) — це множина n-кортежів (w_1, w_2, ..., w_n), де кожне w_i >= 0 і sum(w_i) = 1.
Для n = 2: відрізок прямої від (1, 0) до (0, 1). Для n = 3: трикутник з вершинами (1, 0, 0), (0, 1, 0), (0, 0, 1). Для n = 16 (повний список джерел ANDREA): 15-вимірний симплекс, що лежить у R^16.
Вагові коефіцієнти бандита як координати симплексу
Бандит ANDREA на кожній фазі видає вектор ваг w над джерелами даних. Кожна компонента w_i — це ймовірність вибірки джерела i. Ймовірності невід’ємні та в сумі дорівнюють 1: кожен вектор ваг лежить на симплексі.
Вершини = чисті стратегії (вибірка лише одного джерела). Внутрішність = змішані стратегії (вибірка кількох джерел, кожне з додатною ймовірністю). Ребра = суміші лише двох джерел.
Підлоги джерел як обмежена область
ANDREA накладає мінімальні ваги: hermes3-general на рівні 0.7 (після полірування). Це виокремлює підобласть симплексу: досяжними є лише вектори ваг, де w_hermes3-general >= 0.7.
Геометрично: підлога перетинає симплекс гіперплощиною. Досяжна область — це частина симплексу, що лежить по правильний бік кожної гіперплощини підлоги.
Обмеження як інше обмеження
ANDREA також накладає максимальні ваги: dictionary на рівні 0.25 (після полірування). Кожне обмеження — це ще одна гіперплощина, і досяжна область має лежати по правильний бік кожної такої гіперплощини.
Виключення джерела повністю (cap = 0.0) — найсильніше обмеження: координата фіксується на нулі, зменшуючи ефективний симплекс на один вимір.
Фазові переходи як блукання по симплексу
[BLOCK_TYPE SECTION/STEP]Кожен фазовий перехід (кожні 7–42 кроки) породжує новий вектор ваг. Кожен новий вектор — це точка на симплексі. За 200 тис. кроків бандит прокладає довгий шлях через досяжну область симплексу. [BLOCK_TYPE SECTION/STEP]
Випадкові фази = телепортація до рівномірно-випадкової точки всередині досяжної області. [BLOCK_TYPE SECTION/STEP]
Керовані бандитом фази = крок до найкращої вершини UCB, узгодженої з межами та обмеженнями. [BLOCK_TYPE SECTION/STEP]
Polish pivot = перерисування досяжної області (нові межі, нові обмеження, деякі джерела виключено), і блукання продовжується з нової початкової точки. [BLOCK_TYPE SECTION/STEP]
Чому вершини небезпечні
Чисті фази джерел (одна w_i = 1, решта = 0) розташовані у вершинах симплексу. Різноманітність дорівнює нулю. Модель тренується лише на одному розподілі. Частковий колапс v1 пов’язаний з тим, що бандит «таборував» біля вершини repo-docs; зразки відтворювали виключно розподіл цього джерела.
Флори запобігають «таборуванню» у вершинах: флора на рівні 0.7 означає «ніколи не дозволяй вазі будь-якого джерела опуститися нижче 0.7» (або будь-якого іншого значення флори для пріоритетних джерел).
Прогулянка досяжною областю
Три джерела: hermes3-general (H), gutenberg (G), dictionary (D). Обмеження: флора H = 0.5, кап D = 0.25. (Неявно: усі ваги ≥ 0, сума = 1, інших обмежень немає.)
Обмеження вимірів протягом перших 20K кроків
Що зробив Curriculum Warmup v2
v2 встановив curriculum_warmup_sources на сім джерел: hermes3-general, hermes3-creative, hermes3-roleplay, chat, smoltalk, oasst, gutenberg. Протягом перших 20K кроків ТІЛЬКИ ці сім джерел брали участь. Після кроку 20K активувався повний 16-джерельний потік.
Геометричне тлумачення
Повний 16-джерельний симплекс знаходиться в R^16. Обмеження до 7 джерел згортає 9 з 16 координат до нуля. Ходьба бандита відбувається в 6-вимірному підсимплексі (на один менше за кількість джерел, через обмеження суми до 1).
Геометрично: це ПІДМНОГОВИД повного симплексу. Нижча розмірність, гладкіший, легший для навігації.
Чому це допомагає на ранніх етапах навчання
На ранніх етапах навчання модель ще не засвоїла зв’язну мову. Різноманітні джерела її плутають: кожне джерело має власний стиль, власний розподіл словникового запасу, власні патерни. Змішування 16 джерел на випадковій ініціалізації створює надто широку цільову розподілу, яку модель не може підігнати.
Обмеження до 7 розмовних/прозових джерел дає більш однорідну ціль. Модель спочатку вивчає стабільне представлення, а потім розширює його.
Геометричний шлях під час тренування
1. Кроки 0–20K (розігрів). Хід відбувається на 6-вимірному суб-симплексі. У моделі формуються стабільні мовні патерни.
2. Кроки 20K–112K (повний потік). Хід розширюється до 15-вимірного повного симплексу. З’являється широта доменів.
3. Крок 112K і далі (полірування). Хід знову обмежується: виключаються repo-docs та repo-docstrings, підвищуються межі розмовних поверхів. Менший багатокутник у межах повного симплексу; закріплюється якість розмов.
Чому під час полірування curriculum_warmup_steps = 0
Полірування починається на кроці 112K. Модель уже володіє зв’язною мовою. Обмеження до суб-симплексу зараз призведе до втрати широти без жодного виграшу (користь розігріву стосується лише моделей із нульової ініціалізації). Значення warmup_steps = 0 означає: залишатися на повному симплексі, але з новими обмеженнями та межами.
Три геометрії, один тренувальний запуск
v2 warmup: низьковимірний суб-симплекс.
v2 firehose: повний 15-вимірний симплекс.
v3 polish: повний симплекс з меншим багатокутником (більше обмежень).
Той самий запуск на 200K кроків, три різні геометричні режими. Кожен був налаштований для іншої фази зрілості моделі.