Семантическое расстояние как евклидово расстояние
Многомерное векторное пространство
Каждый токен в словаре 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 сдвигают позицию каждого токена в сторону областей, которые уменьшают loss. За 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.
Почему это важно: обучение и инференс становятся симметричными. Один и тот же проход вперёд, одни и те же маскированные проекции, без специальной логики генерации.
Масштабирование sqrt(d_k)
Без масштабирования скалярные произведения растут вместе с d_k. Большие скалярные произведения переводят softmax в одноразрядные области (один вес близок к 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 = peak (0.0003) на только что инициализированных весах. Геометрическая картина: w_0 находится в области с сильной кривизной (случайная инициализация имеет высокую кривизну во многих направлениях), и шаг с пиковым LR приводит в неправильную впадину. Последующие шаги не могут из неё выйти. Модель застревает на генерации «region region region», потому что эта впадина имеет наименьшую ошибку, которую модель может найти из точки приземления.
Путь разогрева v2
v2 делает 2000 маленьких шагов с LR, плавно растущим от 0 до пикового значения. Геометрическая картина: w_0 сначала мягко перемещается вдоль гладких направлений (где кривизна низка). К шагу 2000 w уже переместился в более удобную для навигации область; теперь пиковый LR может вести его к лучшей впадине без перелёта.
Разогрев — это протокол инициализации с учётом геометрии: модель сначала находит безопасную локальную окрестность, прежде чем её сильно «подталкивать».
Широкие и узкие бассейны
На шаге 112K модель ANDREA-120M находится в бассейне. Вопрос: насколько он широк?
Широкий бассейн = множество соседних конфигураций весов также дают низкое значение функции потерь на обучении. Обобщающая способность обычно хорошая (ширина бассейна предсказывает тестовую производительность; см. урок PAC-Bayes, Глава 3).
Узкий бассейн = только узкий набор весов даёт низкий loss. Обобщение обычно страдает.
v3 polish на шаге 112,619 сдвинул модель по поверхности (без сброса) в более широкий бассейн через curriculum perturbation: изменили функцию потерь (другой bandit, другой training mix), и SGD нашёл рядом плоскую область под новой политикой.
Зомби-обрыв
Аномальный loss 0.13 на шаге 112,080 был ОБРЫВОМ: узкая, резкая область, где один конкретный входной паттерн (подстрока из repo-docs) даёт почти нулевой loss. Модель сорвалась с широкого бассейна в узкое ущелье. Жёсткое исключение repo-docs в polish-pivot заполнило это ущелье, и SGD больше не мог его найти.
Чтение рельефа
Смешивание учебных данных как прогулка по дискретному симплексу
Что такое симплекс
n-мерный симплекс (в частности, стандартный (n-1)-симплекс) — это множество n-кортежей (w_1, w_2, ..., w_n), где каждое w_i >= 0 и сумма(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) — это максимально жёсткое ограничение сверху: соответствующая координата фиксируется в нуле, и эффективная размерность симплекса уменьшается на единицу.
Фазовые переходы как прогулки по симплексу
Каждый фазовый переход (каждые 7–42 шага) порождает новый вектор весов. Каждый новый вектор — это точка на симплексе. За 200K шагов бандит прочерчивает длинный путь по достижимой области симплекса.
Случайные фазы = телепортация в равномерно-случайную точку внутри достижимой области.
Фазы, управляемые бандитом = шаг к лучшей вершине UCB, согласованной с ограничениями снизу и сверху.
Polish pivot = перерисовка достижимой области (новые ограничения снизу, новые ограничения сверху, исключение некоторых источников), и прогулка продолжается из новой стартовой точки.
Почему вершины опасны
Чистые фазы источника (один 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 шагов
Что делал разогрев учебной программы 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, повышаются conversational floors. Меньший полигон внутри полного симплекса; консолидируется качество разговора.
Почему Polish задаёт curriculum_warmup_steps = 0
Polish начинается на шаге 112K. Модель уже говорит coherent language. Ограничение до суб-симплекса теперь приведёт к потере широты без какой-либо выгоды (польза разогрева предназначена для моделей с нуля). Установка warmup_steps = 0 означает: оставаться на полном симплексе, но с новыми caps & floors.
Три геометрии, одна тренировка
v2 warmup: низкоразмерный суб-симплекс.
v2 firehose: полный 15-мерный симплекс.
v3 polish: полный симплекс с меньшим полигоном (больше ограничений).
Один и тот же запуск на 200K шагов, три разных геометрических режима. Каждый был настроен под разную фазу зрелости модели.