Розкладання спільної ймовірності, Точно
Уявіть, що вам потрібно моделювати ймовірність повної послідовності токенів x_1, x_2, ..., x_n — речення, рядок коду або музична фраза. Моделювання цієї спільної розподіленої ймовірності p(x_1, ..., x_n) безпосередньо здається неможливим: кількість можливих послідовностей експоненційно зростає з довжиною, тому немає способу просто занести всі результати. Правило ланцюга рятує нас і не обмежує точності. Воно стверджує, що будь-який розподіл ймовірностей можна точно записати як добуток умовних розподілів: p(x_1, x_2, ..., x_n) = ∏_{t=1}^{n} p(x_t | x_1, ..., x_{t-1}). Іншими словами, ймовірність всієї послідовності дорівнює ймовірності першого токена, помноженій на ймовірність другого токена за умови першого, ймовірності третього за умови перших двох і так далі. Це не наближення чи спрощення – воно безпосередньо випливає з визначення умовної ймовірності, яке застосовується повторно. Що це дає нам – величезне: замість одного незбагненно складного об'єкта (спільного розподілу по всіх послідовностях), нам потрібно моделювати лише один набагато простіший об'єкт, p(x_t | x_1, ..., x_{t-1}), розподіл наступного токена за умови всього, що було до нього. Модель, яка добре розв’язує цю повторювану підзадачу, автоматично стає моделлю всієї спільної розподіленої ймовірності згідно з правилом ланцюга.
Навчання мережі для прогнозування наступного токена
Авторегресивна модель – це просто нейронна мережа, навчена для наближення p(x_t | x_1, ..., x_{t-1}) з параметрами тети, що записується як p_тета(x_t | x Трансформери обробляють весь послідовність одночасно, а не по токену за раз, що чудово для швидкості навчання, але створює тонку небезпеку: механізм самовваги природно дозволяє кожній позиції дивитися на всі інші, включаючи ті, що йдуть пізніше. Якщо цього не зупинити, мережа може «розв’язувати» задачу передбачення наступного токена, просто копіюючи відповідь з майбутньої позиції, яку вона вже бачить — це обхідний шлях, який забезпечує майже ідеальний показник втрат під час навчання, але повністю марну модель під час генерації тексту, оскільки майбутні токени очевидно не існуватимуть, коли ви насправді пишете текст. Каскадне маскування вирішує цю проблему, змушуючи механізм уваги на позиції t розглядати лише позиції від 1 до t, зазвичай реалізоване шляхом додавання негативної нескінченності до оцінок уваги для всіх майбутніх позицій перед softmax, що призводить до колапсу ваги уваги до нуля. Це єдина константа, яка перетворює звичайний бідиректівний Трансформер на справді авторегресивну модель, гарантуючи обчислення p_theta(x_t | x_1, ..., x_{t-1}) лише за допомогою інформації, яка була б доступна під час генерації. Це невелике архітектурне правило з надзвичайно великими наслідками: це саме те, що забезпечує математичну узгодженість між передбаченням наступного токена під час навчання та генерацією тексту під час виведення. Після навчання модель більше не бачить істинних продовжень послідовності – генерація повинна будувати її з нуля, крок за кроком. Саме це пояснює назву «авторегресивна»: модель базується на своїх власних попередніх виходах. Починаючи з певного запиту x_1, ..., x_k, процес повторюється простим циклом: обчислюється p_θ(x_{t} | x_1, ..., x_{t-1}) для наступної позиції, вибіркось (або обирається найоптимільніший варіант) токен x_t з цього розподілу, додається він до послідовності та розширена послідовність подається назад у модель для обчислення розподілу для x_{t+1}. Це пояснює, чому генерація за своєю суттю є послідовною та порівняно повільною порівняно з навчанням: кожен новий токен вимагає свіжої прямої передачі, враховуючи все, що було згенеровано до цього моменту. Стратегії вибірки різняться – greedy декодування завжди приймає найімовірніший токен, а стратегії з використанням температури, top-k та nucleus (top-p) вносять керовану випадковість, щоб модель не генерувала однакову нудну та повторювану послідовність продовження кожного разу. Який би принцип вибірки не використовувався, ймовірність, з якої відбувається вибірка на кожному кроці, є точно умовною p(x_t | x Сила факторизації на основі ланцюгового правила полягає в тому, що вона перетворює нерозв’язну задачу моделювання на уніфіковану та безкінечно повторювану: незалежно від того, наскільки довго стає послідовність, модель завжди повинна відповідати лише одне й те саме питання – «враховуючи все, що було до цього, що далі?» Ця однорідність означає, що одна й та сама архітектура та рецепт навчання масштабуються майже без зусиль від коротких речень до документів, що містять тисячі токенів, а також від невеликих мереж до моделей з сотнями мільярдів параметрів, просто додаючи більше шарів, більше увагових головок та більше навчальних даних. Це також пояснює, чому передбачення наступного токена – завдання, яке здається майже занадто простим, щоб мати значення – змушує модель неявно вивчати граматику, фактичні асоціації, логічні патерни та стиль: досягнення p(x_t | x Ні. p(x_1, ..., x_n) = product_{t=1}^{n} p(x_t | x_1, ..., x_{t-1}) є точним математичним ідентифікатором, що випливає з визначення умовного ймовірності, для будь-якого розподілу спільності будь-якої послідовності. Приближення в практиці повністю походить від того, наскільки добре нейронна мережа p_theta оцінює кожну справжню умовну p(x_t | x Одночасне прогнозування всіх токенів (як це роблять деякі неавторегресивні моделі) обходить послідовний вузол генерації, але є значно складнішою навчальною задачею, оскільки токени залежать один від одного ускладженими способами, які одночасне паралельне прогнозування важко захопити. Правило ланцюга обходить цю складність шляхом розбиття спільної розподілу на послідовність набагато простіших, добре визначених умовних прогнозів, на шкоду необхідності кількох послідовних прямих проходів для генерації. Воно запобігає тому, щоб обчислення уваги позиції включало інформацію з будь-якого токена, який стоїть після нього в послідовності. Без цього маскування Трансформер, навчений на наступному токені, міг би безпроблемно звертати увагу на саме той токен, який він повинен передбачити, оскільки цей токен вже присутній у вхідних даних під час навчання, що робить втрату навчання беззмістовним і непотрібним для моделі для фактичної генерації. Ні, вони поділяють абсолютно однакову навчальну мету, максимізуючи sum_t log p_theta(x_t | x Під час навчання цілий цільовий рядок вже відомий, тому причинно-замаскований Трансформер може обчислювати втрати для всіх позицій в одному паралельному прямому проході. Під час генерації кожен токен залежить від тих, що були згенеровані безпосередньо перед ним, тому модель повинна запустити свіжий прямий прохід для кожного нового токена, що є інтуїтивно послідовним процесом, який пришвидшують техніки, такі як кешування ключів-значень, але не можуть повністю усунути. Усе, що вище, працює прямо у вашому браузері — відкрийте Autoregressive Models: Generating Sequences One Token at a Time via the Chain Rule і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.Каскадне маскування: Без погляду в майбутнє
Генерація: Вибірка одного токена та його подальше використання
Чому ця проста ідея масштабується до моделей, подібних GPT
Frequently asked questions
Чи є правило факторизації приблизним?
Чому не просто передбачати всі токени одночасно замість одного?
Що саме запобігає причинному маскуванню?
Використовують RNN та Трансформери різку математичну мету?
Чому генерація відчувається повільнішою за навчання?
Спробуйте наживо