Головна / Статті / Як працює LLM: токени, увага та передбачення наступного токена

Як працює LLM: токени, увага та передбачення наступного токена

Проста екскурсія архітектурою LLM: від токенів і ембеддингів через увагу й каузальне маскування до генерації, а також чим навчання відрізняється від інференсу.

1801 слів

Введіть у вікно чату коротку фразу, наприклад "The cat is sleeping." («Кіт спить.»), і за мить модель відповість рядком, поясненням чи цілим абзацом. Ззовні це виглядає легко. Але що насправді відбувається в проміжку?

Кожен, хто читав про ШІ, натрапляв на купу термінів: токени, ембеддинги, трансформери, увага, Q/K/V, передбачення наступного токена. Разом вони можуть створити враження, що мовні моделі набагато складніші, ніж є насправді. Добра новина: щоб зрозуміти базову архітектуру, не потрібна математика, яка за нею стоїть. Досить зрозуміти, як поєднуються кілька деталей.

Наскрізним прикладом слугуватиме одне речення: "The cat is sleeping." Простежмо його шлях крізь увесь механізм.

Загальна картина

Якщо дивитися здалеку, LLM обробляє текст поетапно:

Text
 ↓
Tokens
 ↓
Embeddings
 ↓
Transformer
 ↓
Attention
 ↓
Next-token prediction
 ↓
Next token
 ↓
Repeat

Під усім цим лежить велика нейронна мережа, параметри якої налаштовано під час навчання. Кожен етап варто розглянути докладніше.

1. Нейронні мережі — фундамент

Велика мовна модель по суті — одна дуже велика нейронна мережа. Це система машинного навчання, яка вловлює закономірності в даних, підлаштовуючи числові параметри, які зазвичай називають вагами.

Найпростіша картинка — коробка, яка перетворює вхід на вихід:

Input
  ↓
Neural Network
  ↓
Prediction

Під час навчання мережа робить здогадку, вимірює, наскільки помилилася, і трохи підправляє параметри, щоб наступного разу вгадати краще. Після достатнього обсягу даних вона засвоює закономірності мови. Бачачи "The cat is ___", вона дізнається, що правдоподібними продовженнями будуть слова на кшталт "sleeping", "hungry", "running" чи "outside".

Головне, що варто запам'ятати: LLM — це велика нейронна мережа, яка вивчила закономірності з даних. Математику нейромереж можна пропустити й однаково зрозуміти решту.

2. Токени — як модель читає

Ви читаєте слова. Модель поводиться зі словами не так, як ви. Спершу текст розрізається на дрібніші одиниці, які називають токенами. Концептуально це виглядає так:

"The cat is sleeping."
          ↓
["The", " cat", " is", " sleeping", "."]

Які саме шматки вийдуть, залежить від моделі та її токенізатора. Токеном може бути ціле слово, його фрагмент, розділовий знак чи інший шматок тексту. Потім кожному токену зіставляється число — його ID, тож конвеєр поки що виглядає так:

Text
 ↓
Tokens
 ↓
Token IDs

На цьому етапі модель уже може працювати з текстом як із числами.

Чому токени важливі на практиці

Токени — не примітка. Для будь-якого користувача ШІ-продуктів вони пояснюють кілька повсякденних речей:

  • чому моделі мають обмеження на контекст
  • чому довгі промпти витрачають більше токенів
  • чому використання API зазвичай тарифікується за токени
  • чому зайвий вміст у промпті збільшує рахунок

Для тих, хто будує застосунки, токени впливають на дизайн промптів, керування контекстом і контроль витрат.

Проте самого лише ID недостатньо. Моделі потрібно для кожного токена щось змістовніше.

3. Ембеддинги — зміст у числах

Візьмімо токен "cat". Його ID може бути чимось на кшталт 582, але це число нічого не каже про котів. Це просто мітка, не більше.

Тому модель замінює кожен ID ембеддингом — вектором із безлічі числових значень:

"cat"
  ↓
Token ID
  ↓
Embedding
  ↓
[0.21, -0.73, 0.44, ...]

Ембеддинг — це числове представлення токена, з яким нейромережа може проводити обчислення. Цю відмінність варто запам'ятати: ID токена називає токен, а ембеддинг описує його в числах. Саме ембеддинги подаються на вхід трансформеру.

4. Трансформери — де відбувається обробка

На цей момент речення пройшло ось такий шлях:

Text
 ↓
Tokens
 ↓
Token IDs
 ↓
Embeddings

Ембеддинги потрапляють у трансформер — нейромережеву архітектуру, створену для роботи з послідовностями і, що особливо важливо для мови, для вловлювання зв'язків між токенами. У спрощеному вигляді:

Embeddings
    ↓
Transformer layer
    ↓
Transformer layer
    ↓
Transformer layer
    ↓
...
    ↓
Prediction

У реальних моделях одне на одне накладено багато шарів трансформера. Але як шар розуміє, які слова важливі одне для одного? За допомогою self-attention, механізму самоуваги.

5. Самоувага — робота з контекстом

Візьмімо довше речення: "The cat climbed onto the couch because it was tired." («Кіт виліз на диван, бо втомився»). Щоб обробити слово "it", моделі треба роззирнутися й вирішити, на що воно вказує. Самоувага дає змогу переглянути інші токени й оцінити, які з них релевантні:

The  cat  climbed  onto  the  couch  because  it  was  tired
      ↑                              ↑       ↑
      └──────── relevant context ────┘

Механізм можна сформулювати як питання, яке ставить собі кожен токен: на які інші токени мені подивитися, щоб зрозуміти себе? Модель обчислює зв'язки між токенами й використовує їх, щоб будувати представлення з урахуванням контексту. Ця здатність — одна з головних причин, чому трансформери так добре дають раду мові.

6. Q, K і V — як увага обирає важливе

Увага спирається на три ролі:

  • Query (Q, запит): що шукає цей токен?
  • Key (K, ключ): що пропонує кожен токен як мітку для зіставлення?
  • Value (V, значення): який вміст токен передає, коли його обирають?

У вигляді потоку:

Query
  ↓
Compare with Keys
  ↓
Determine relevance
  ↓
Use relevant Values
  ↓
Updated representation

Добре порівняння — бібліотека. Ваше питання — це запит. Кожна книжка має картку в каталозі, з якої видно, чи вона підходить, — це її ключ. Знайшовши потрібні книжки, ви читаєте їхній вміст — це значення. Увага робить щось подібне. Формула для розуміння ідеї не потрібна: Q, K і V допомагають моделі вирішити, яка інформація в інших токенах релевантна.

7. Багатоголова увага — багато точок зору

У мові одночасно присутні різні види зв'язків: граматика, зміст і те, які слова до яких відсилають. Тому трансформери запускають кілька голів уваги паралельно:

Input
                   ↓
          ┌────────┼────────┐
          ↓        ↓        ↓
        Head 1   Head 2   Head 3
          ↓        ↓        ↓
       Pattern   Pattern   Pattern
          └────────┼────────┘
                   ↓
                Combined

Кожна голова може спеціалізуватися на своєму типі зв'язків. Одна голова дає одну точку зору, кілька голів — кілька. Щоб зрозуміти загальний задум, не потрібно розбиратися в поведінці кожної голови окремо.

8. Каузальне маскування — не підглядати вперед

Тепер пов'яжемо увагу з генерацією тексту. Припустімо, модель бачить "The cat is" і має передбачити наступний токен. Їй не можна дозволити спершу прочитати відповідь. Це забезпечує каузальне маскування:

The → can see The
cat → can see The, catis → can see The, cat, issleeping → can see The, cat, is, sleeping

Кожна позиція може використовувати те, що було раніше, але нічого з того, що йде пізніше. Це особливо важливо для авторегресійних моделей у стилі GPT з простої причини: модель має передбачати майбутнє, не бачачи його.

9. Передбачення наступного токена — як створюється текст

Це центральна ідея моделей у стилі GPT. LLM пише, передбачаючи, який токен буде наступним. Отримавши початок:

"The cat"
    ↓
Predict next token
    ↓
"is"

контекст стає таким:

"The cat is"

і вона знову передбачає:

"The cat is"
       ↓
Predict next token
       ↓
"sleeping"

потім ще раз:

"The cat is sleeping"
       ↓
Predict next token
       ↓
"."

і так далі. Відповідь зазвичай не створюється за один раз. Модель працює в циклі:

Read the available context
        ↓
Predict the next token
        ↓
Add that token to the context
        ↓
Predict again
        ↓
Repeat

Ось чому саме ідеї передбачення наступного токена варто триматися. Усе інше в архітектурі існує для того, щоб ці передбачення були кращими.

10. Навчання та інференс

Остання відмінність: навчання проти використання.

Під час навчання модель налаштовує свої параметри. У загальних рисах:

Input
 ↓
Prediction
 ↓
Compare with expected result
 ↓
Calculate error
 ↓
Adjust parameters
 ↓
Repeat

Це проганяється на величезних обсягах даних, і з часом модель дедалі краще передбачає токени й накопичує корисні закономірності мови.

Інференс — це те, що відбувається щоразу, коли ви користуєтеся навченою моделлю. Ви даєте їй "The cat is", і вона застосовує вивчені параметри, щоб передбачити наступний токен:

Your prompt
 ↓
Model
 ↓
Next-token prediction
 ↓
Next token
 ↓
Predict again
 ↓
Response

Коротко, щоб запам'ятати: навчання — це вчитися, а інференс — використовувати вивчене.

Усе разом

Повернімося до початкового речення. Його шлях виглядає так:

"The cat is sleeping."
          ↓
      Tokenization
          ↓
       Token IDs
          ↓
       Embeddings
          ↓
      Transformer
          ↓
    Self-Attention
          ↓
       Q, K, V
          ↓
  Multi-Head Attention
          ↓
     Causal Mask
          ↓
 Next-Token Prediction
          ↓
       Next Token
          ↓
         Repeat

Під усім цим працює велика нейронна мережа з вивченими параметрами. Це і є базова архітектура.

Навіщо це знати

Щоб користуватися ChatGPT, не потрібно знати його внутрішню будову. Але навіть приблизна ментальна модель підказує, що такі системи можуть, а чого ні. Звичайним користувачам вона пояснює, чому важливий контекст, чому довгі промпти з'їдають токени, чому модель може звучати впевнено й водночас помилятися і чому релевантна інформація дає кращі результати.

Для розробників кожне поняття окупається безпосередньо:

  • Токени пояснюють обмеження контексту й вартість.
  • Ембеддинги ведуть до семантичного пошуку та RAG.
  • Трансформери й увага показують, як моделі працюють із контекстом.
  • Передбачення наступного токена пояснює генерацію й поведінку.
  • Поділ на навчання та інференс проводить межу між використанням моделі, її донавчанням і навчанням з нуля.

Не обов'язково опановувати математику нейромереж, перш ніж будувати щось із ШІ. Але знання архітектури допомагає обирати моделі, вирішувати, яку інформацію подавати, проєктувати застосунок і передбачати обмеження.

Версія в одному абзаці

Якщо запам'ятати щось одне, хай це буде ось що: LLM розбиває текст на токени, перетворює токени на числові представлення, пропускає їх крізь шари трансформера, які використовують увагу, і раз у раз передбачає наступний токен.

Text
 ↓
Tokens
 ↓
Embeddings
 ↓
Transformer
 ↓
Attention
 ↓
Next-token prediction
 ↓
Repeat

Коли цей потік зрозумілий, такі теми, як RAG, векторні бази даних, донавчання, агенти, оцінювання й розробка застосунків, стають простішими, бо видно, яке місце кожна з них посідає в загальній картині.