Ембеддинг — це пошук, а не функція
Перший шар після токенізатора
Токенізатор передає моделі цілочисельні ідентифікатори: [256, 1842, 7301, ...]. Перше, що робить трансформер: перетворює кожен ідентифікатор на вектор із d_model дійсних чисел. Цей вектор існує в d_model-вимірному просторі (768 вимірів для ANDREA-120M).
Ембеддинг-шар — це таблиця пошуку, а не функція. Уявіть велику матрицю:
shape: (V, d_model)
row 0: [e_0_0, e_0_1, ..., e_0_767]
row 1: [e_1_0, e_1_1, ..., e_1_767]
...
row 8448: [e_8448_0, e_8448_1, ..., e_8448_767]
Token ID i вибирає рядок i. Прямий доступ до масиву. Без арифметики, без активації. Просто індекс.
Навчальні числа з плаваючою комою
Кожне значення в цій таблиці спочатку є невеликим випадковим числом з плаваючою комою (зазвичай з нормального розподілу, масштабованого на 1/sqrt(d_model)). Зворотне поширення помилки оновлює кожен рядок, коли його Token ID з’являється в батчі. Після навчання схожі токени (cat, dog, pet) отримують схожі вектори; несхожі токени (cat, Tuesday, xylophone) розташовуються далеко один від одного в векторному просторі.
ANDREA-120M Вартість вбудовування токенів
| Кількість | Значення |
|---|---|
| V | 8,449 |
| d_model | 768 |
| Параметри | 6,488,832 |
Приблизно 6,5 млн параметрів міститься лише в таблиці токенових ембеддінгів, що становить близько 5,4 % від загальної кількості параметрів ANDREA-120M. Кожна позиція словника отримує ці 768 чисел з плаваючою комою.
Розмір таблиць ембеддінгів
Скалярні добутки вимірюють подібність
Вектори як стрілки
768-вимірний вектор існує в просторі, який люди не можуть уявити, але та сама алгебра працює в будь-якій розмірності. Для трансформерів важливі дві ключові операції:
Модуль (довжина стрілки):
||v|| = sqrt(v_0² + v_1² + ... + v_767²)
Скалярний добуток (узгодженість між двома векторами):
u · v = u_0 × v_0 + u_1 × v_1 + ... + u_767 × v_767
Що показує скалярний добуток
Дві властивості, які виконуються в будь-якій розмірності:
- u · v = ||u|| × ||v|| × cos(theta), де theta — кут між ними.
- Вектори, що вказують в одному напрямку, дають великі додатні скалярні добутки.
- Вектори, що вказують у протилежних напрямках, дають великі від’ємні скалярні добутки.
- Вектори, що утворюють прямий кут, дають скалярний добуток, рівний нулю.
Скалярний добуток = ненормалізована схожість. Два навчені ембеддинги токенів для cat та dog отримують високий скалярний добуток, оскільки зворотне поширення помилки зблизило їх (обидва передбачають контексти, пов’язані з домашніми тваринами). cat та Tuesday стають майже ортогональними, бо передбачають різні контексти.
Чому трансформеру важлива геометрія
Activity 5 (grow_a_language_model_attention) будує увагу з скалярних добутків: вектор-запит, скалярно помножений на вектори-ключі, дає оцінки, які показують, які попередні токени важливі для передбачення наступного. Ембедінги та скалярні добутки разом несуть усі взаємодії всередині трансформера.
Передбачте подібність
ANDREA Використовує навчені позиційні вектори
Проблема
Вектор токена повідомляє моделі, яке слово знаходиться в цій позиції. Він не повідомляє моделі, де саме це слово розташоване. Без інформації про позицію трансформер сприймає the cat sat on a mat та mat a on sat cat the однаково: той самий набір токенів, без сигналу про порядок.
У літературі з трансформерів існують три рішення:
Синусоїдальні (Vaswani 2017). Фіксована математична формула на основі синусів і косинусів. Позиція 0 отримує конкретний 768-вектор; позиція 1 — інший; ніколи не тренуються, не оновлюються. Узагальнюються на будь-яку позицію через формулу.
RoPE (Rotary Position Embedding). Обертає вектори query та key залежно від позиції. Використовується в LLaMA, Qwen. Не потребує додаткових параметрів; обертання вбудоване в механізм уваги.
Learned. Окрема таблиця ембеддингів розміром (T, d_model), де T — довжина контексту. Кожен рядок навчається через зворотне поширення помилки, як і ембеддинги токенів.
Вибір ANDREA: Learned
ANDREA успадковує підхід learned-position від microGPT, який успадкував його від nanoGPT, який успадкував від GPT-2. Обґрунтування:
- Простота. У механізмі уваги немає спеціальної математики. Таблиця позицій виглядає як таблиця токенів.
- Сумісність з кастомним CUDA. Двигун ANDREA microgpt_cuda.cu обробляє два пошуки ембеддингів однаково; ядра sin/cos не потрібні.
- Достатньо для фіксованого контексту. ANDREA обмежує T значенням 1024. Навчена таблиця добре працює для послідовностей фіксованої довжини.
Вартість позиційного ембеддингу ANDREA-120M
| Величина | Значення |
|---|---|
| T (контекст) | 1,024 |
| d_model | 768 |
| Параметри | 786,432 |
0.79M параметрів для позицій. Разом із токенними ембеддінгами: 6.49M + 0.79M = 7.27M параметрів ембеддінгів загалом для ANDREA-120M.
Як вони поєднуються
На кожній позиції t у вхідній послідовності:
x_t = token_embedding[token_id_t] + position_embedding[t]
Два 768-вектори, додані поелементно. Результат, x_t, надходить у перший блок трансформера. Модель ніколи не розділяє їх знову; вона вчиться використовувати комбінований сигнал.
Вивчені проти синусоїдальних
Де живуть параметри ембеддінгів
Повний шар ембеддінгів ANDREA-120M
| Компонент | Форма | Параметри |
|---|---|---|
| Таблиця токен-ембеддінгів | 8,449 × 768 | 6,488,832 |
| Таблиця позиційних ембеддінгів | 1,024 × 768 | 786,432 |
| Всього | 7,275,264 |
Приблизно 7.3M параметрів. Загальна кількість параметрів ANDREA-120M: ~120M. Сам шар ембеддінгів: 6%. Решта 94% міститься в трансформер-блоках (attention + MLP, розглядаються в активностях 5-7).
Незв’язані vs Зв’язані ембеддінги
Багато архітектур трансформерів (включно з GPT-2) пов’язують токен-ембедінг із фінальною вихідною проєкцією: одна й та сама матриця V × d_model використовується на вході та на виході (логіти за словником). Зв’язування зменшує кількість параметрів V × d_model і часто покращує якість.
ANDREA використовує незалежні ембедінги: вхідний ембедінг та вихідна проєкція тренуються як окремі матриці. Активність 7 (grow_a_language_model_transformer_block) охоплює фінальний шар.
Прямий прохід на даний момент
Вхід: ID токенів [256, 1842, 7301, ...] (1024 штуки). Кожен ID шукає 768-вектор. Кожна позиція шукає 768-вектор. Поелементне додавання. Результат: матриця (1024, 768) x векторів токенів + позицій. x надходить у трансформер-блок 1.
Активність 5 (grow_a_language_model_attention) описує, що робить блок 1: scaled dot-product attention з causal mask та softmax.