Інтерактивний мінікурс — від токенів до агентів
Модель не розуміє букви — вона працює тільки з числами. Тому перший крок — розбити текст на шматочки (токени) і перетворити кожен на набір чисел (вектор). Цей набір чисел називається ембедінг — він кодує значення слова.
Уяви, що кожне слово — це точка у великому просторі. Слова зі схожим значенням опиняються поруч: «кіт» і «собака» будуть близько, а «кіт» і «математика» — далеко.
Ембедінг-вектор для «кота» може мати 4096 чисел — тут ми спрощено показуємо це у 3D. Але принцип той самий: модель «розуміє» схожість через відстань між точками.
Коли ти читаєш речення «Кіт сів на килимок, бо він був м'яким», ти одразу розумієш, що «він» — це килимок. Модель робить це через механізм уваги: кожне слово «дивиться» на всі інші і вирішує, які з них для нього важливі.
Технічно: кожен токен перетворюється на три вектори — Query (запитання), Key (ключ) і Value (значення). Query одного токена множиться на Key кожного іншого, і результат показує, наскільки вони пов'язані.
Натисни на слово «він» — побачиш, що найбільша увага (42%) йде до «килимок». Модель сама навчилася, що займенник відноситься саме до килимка.
Формула: скалярний добуток двох векторів, поділений на √d (розмірність вектора). Потім усі оцінки перетворюються на відсотки через функцію softmax (щоб сума дорівнювала 100%).
Один шар уваги — це лише початок. У реальній моделі таких шарів десятки, а у великих LLM — часто багато десятків. Кожен шар «розуміє» щось нове: перші ловлять граматику, середні — значення, останні — складніші залежності, логіку та факти.
Дані рухаються знизу вгору: ембедінги входять у перший шар, проходять через увагу (слова обмінюються інформацією), потім через нейромережу (кожен токен окремо обробляє зібрану інформацію), і так далі через усі шари.
Але що всередині цих шарів? Кожен шар — це набір параметрів: звичайних десяткових чисел на кшталт 0.00142 або -0.0538. На початку вони випадкові, а під час тренування модель підбирає кожне число так, щоб краще передбачувати наступне слово. Саме ці числа і є «знаннями» моделі.
Після всіх шарів модель отримує фінальний вектор для останнього токена. Цей вектор перетворюється на числові оцінки — логіти (logits) — для кожного токена у словнику (vocabulary) моделі (30–100 тисяч токенів). Потім функція softmax перетворює логіти на розподіл ймовірностей: кожен токен отримує значення від 0 до 1, а сума всіх дорівнює 1. З цього розподілу модель обирає наступний токен — і повторює процес знову і знову.
Повзунок «Температура» регулює випадковість: при низькій (0.1) модель майже завжди вибирає найімовірніше слово, при високій (2.0) — вибір стає «креативнішим».
Тренування трансформера зводиться до однієї простої гри: модель бачить початок речення і намагається вгадати наступне слово. На старті вона вгадує випадково. Але після кожної спроби їй кажуть правильну відповідь, і вона трохи коригує себе.
Після кожного передбачення потрібно виміряти, наскільки модель помилилась. Якщо правильне слово — «Київ», а модель дала йому ймовірність 80% — втрата мала. Якщо лише 2% — втрата величезна.
Математично це від'ємний логарифм ймовірності правильної відповіді: Loss = -log(p).
Як модель виправляє помилки? У неї мільярди чисел-параметрів (ваги). Уяви, що loss — це висота гірського ландшафту, а параметри — координати на карті. Задача: знайти найнижчу точку. Модель робить маленькі кроки «вниз по схилу» — це і є градієнтний спуск.
Learning rate (швидкість навчання) — це розмір кроку, яким модель рухається до мінімуму на кожній ітерації. В інтерактиві це буквально довжина стрілки. Занадто великий — кулька «перестрибує» мінімум і не збігається. Занадто малий — навчання працює, але дуже повільно. Підбір оптимального learning rate — одне з ключових рішень при тренуванні моделі. У реальності тут не одна крива, а ландшафт у мільярдах вимірів.
Як дізнатись градієнт для кожного з мільярдів параметрів? Помилка «протікає назад» від виходу до входу через усі шари. Кожен параметр дізнається, наскільки саме він відповідальний за помилку — це правило ланцюжка (chain rule).
Модель обробляє пакети тексту, і після кожного кроку loss трохи зменшується. На початку модель генерує сміття, через тижні — зв'язний текст, через місяці — розумні відповіді.
Після базового тренування модель вміє продовжувати текст — але не вміє відповідати на запитання. Якщо написати «Яка столиця Франції?», вона може продовжити: «А яка столиця Німеччини? А Іспанії?» — бо в інтернеті так часто пишуть.
Supervised Fine-Tuning (SFT) — це коли моделі показують тисячі прикладів «запитання → правильна відповідь», написаних людьми. Вона вчиться відповідати замість того, щоб просто продовжувати.
Зверни увагу: базова модель знає відповідь (вона засвоїла факти під час тренування) — але не знає формату. SFT вчить саме формату: відповідай коротко, структуровано, корисно.
Навіть після SFT модель може відповідати токсично, вигадувати факти або бути занадто багатослівною. RLHF (Reinforcement Learning from Human Feedback) — це коли люди порівнюють варіанти відповідей і вибирають кращий. З цих оцінок модель вчиться, що «добре», а що «погано».
Процес RLHF: 1) зібрати пари відповідей, 2) люди вибирають кращу, 3) натренувати reward model (модель оцінки), 4) оптимізувати LLM, щоб вона отримувала високі оцінки від reward model.
Повний fine-tuning змінює всі мільярди параметрів — це дорого і повільно. LoRA (Low-Rank Adaptation) — розумний трюк: заморозити основну модель і додати маленькі матриці-адаптери. Замість оновлення величезної матриці W, додаємо добуток двох маленьких: ΔW = A × B.
При ранзі r=8 замість 4 мільйонів параметрів оновлюємо лише ~32 тисячі — це в 125 разів менше. Якість при цьому залишається близькою до повного fine-tuning. Саме тому LoRA став стандартом для адаптації великих моделей.
Модель не бачить букв і слів — вона працює з токенами. Токенізатор розбиває текст на шматочки за алгоритмом BPE (Byte Pair Encoding): спочатку кожна буква — окремий токен, потім найчастіші пари зливаються. Результат: часті слова = 1 токен, рідкісні = кілька.
Зверни увагу: «Hello world» — лише 2 токени, а «Привіт світ» — цілих 7. Тому LLM «витрачає» більше ресурсів на неанглійський текст — одна з причин, чому моделі краще працюють англійською.
Коли модель генерує текст, вона щоразу рахує attention для всіх попередніх токенів. Але Key і Value для вже згенерованих токенів не змінюються! KV-кеш зберігає їх — і на кожному кроці рахується attention тільки для нового токена.
Чим довший текст, тим більша перевага кешу: для 100 токенів без кешу потрібно понад 170 тисяч обчислень attention, а з кешем — лише ~5 тисяч. Прискорення в 30+ разів. Ціна — пам'ять під кеш, яка зростає з довжиною тексту.
Кожен параметр моделі — число з плаваючою комою. При тренуванні використовують 16-бітну точність (FP16). Квантизація — це зменшення точності до 8, 4, або навіть 2 біт. Менше біт = менше пам'яті = швидший інференс, але з втратою якості.
На практиці 4-бітна квантизація (Q4) — золота середина: модель на 7B параметрів займає ~4 ГБ замість 14 ГБ, а якість падає лише на 1–3%. Саме тому моделі на телефонах і ноутбуках — це майже завжди квантизовані версії.
Attention сам по собі не знає порядку слів — для нього «кіт з'їв рибу» і «рибу з'їв кіт» — просто однаковий набір токенів. Потрібен спосіб закодувати позицію кожного слова.
RoPE (Rotary Position Embedding) робить це елегантно: уяви, що вектор кожного токена — це стрілка компаса. RoPE обертає цю стрілку на кут, пропорційний позиції: слово на позиції 0 — вказує вверх, на позиції 3 — трохи вправо, на позиції 10 — значно вправо.
Чому саме обертання? Коли модель обчислює attention між двома словами, вона порівнює їхні вектори (скалярний добуток). Оскільки вектори обернені, результат залежить від різниці кутів — тобто від відстані між словами. Близькі слова → схожий кут → висока увага. Далекі → різний кут → нижча увага. І головне: слова на позиціях 3 і 5 мають ту саму різницю кутів, що й слова на позиціях 100 і 102 — значення має лише відносна відстань.
Реальний RoPE використовує різні швидкості обертання для різних вимірів вектора — одні кодують близькі зв'язки, інші — далекі. Це дозволяє моделі узагальнювати на довші контексти, ніж бачила під час тренування.
Контекстне вікно (context window) — це максимальна кількість токенів, яку модель може «бачити» одночасно: і твій запит, і свою відповідь. Все, що не вміщується у вікно, модель просто не бачить — ніби читає книжку через вузьку щілину.
Розмір вікна стрімко зростає: GPT-2 (2019) мав лише 1 024 токени, GPT-4 — до 128 000, а Claude та Gemini підтримують до 200 000–1 000 000 токенів. Але більше вікно — це більше обчислень: self-attention має складність O(n²) від довжини контексту.
Чому це важливо на практиці? Якщо ти вставляєш у запит довгий документ — він «з'їдає» частину вікна, і на відповідь залишається менше місця. А якщо розмова довга — старі повідомлення можуть «випасти» з контексту, і модель перестане на них спиратися. Саме тому чат-боти іноді «втрачають пам'ять» у довгих діалогах.
Техніки розширення контексту: Sliding window attention обмежує увагу локальним вікном для кожного шару, зменшуючи складність. RoPE scaling дозволяє «розтягнути» позиційне кодування на довший контекст без повного перетренування. RAG (розділ 22) частково обходить обмеження вікна — замість вставки всього тексту, шукає лише релевантні фрагменти.
Одне з найважливіших відкриттів: якість моделі передбачувано зростає зі збільшенням трьох речей — кількості параметрів (N), обсягу даних (D) і обчислювальних ресурсів (C). Це — закони масштабу (scaling laws).
Формула Chinchilla: L ≈ A/Nα + B/Dβ + L∞, де L — loss, N — параметри, D — токени даних. Кожен фактор дає свій внесок, і є «нередуковна» помилка L∞, яку не можна усунути навіть нескінченними ресурсами.
Ключовий інсайт: немає сенсу збільшувати лише параметри, якщо бракує даних — і навпаки. Практичний висновок роботи Chinchilla: параметри й дані треба масштабувати збалансовано. Сучасні великі моделі часто тренують на трильйонах токенів, але точні числа для закритих систем зазвичай не розкривають.
Звичайний трансформер активує всі параметри на кожному токені. MoE — це хитрий трюк: feed-forward шар замінюється на кілька «експертів» (окремих підмереж), і маршрутизатор (router) для кожного токена вибирає лише 1–2 з них.
Результат: модель може мати 141 мільярд параметрів (як Mixtral 8x22B), але на кожному токені працюють лише ~39B — це майже в 4 рази менше. Швидкість як у маленької моделі, якість як у великої.
Кожен експерт спеціалізується: один краще працює з кодом, інший — з математикою, третій — з мовами. Маршрутизатор вчиться направляти кожен токен до найрелевантніших експертів. MoE став дуже важливим підходом у сучасних великих моделях, але точні архітектури комерційних систем часто не розкриваються публічно.
Модель — це інструмент, і результат залежить від того, як ти формулюєш запит. Prompt engineering — набір технік, що дозволяють отримати кращі відповіді без зміни самої моделі.
Порада: комбінуй техніки. System prompt задає роль, few-shot — формат, а покрокові інструкції іноді допомагають у складніших задачах. Це працює, бо модель генерує «продовження» промпту — і чим кращий контекст ти даси, тим кориснішим зазвичай буде результат.
Модель не зберігає знання як перевірену енциклопедію — вона генерує найімовірніше продовження тексту. Іноді це продовження виглядає правдоподібно, але містить вигадані або змішані факти. Це називають галюцинацією (hallucination): модель впевнено видає неправду, бо статистично ці слова добре пасують одне до одного.
Чому це відбувається? Модель оптимізована на правдоподібність, а не на гарантовану правдивість. Вона не має вбудованого механізму фактчекінгу і не перевіряє кожну тезу сама по собі — просто продовжує текст найімовірнішим чином.
Як зменшити галюцинації: RAG (наступний розділ) дає моделі реальні документи; нижча температура іноді робить відповіді стриманішими; перевірка джерел і явне прохання позначати невпевненість допомагають виявляти ризиковані місця. Покрокові промпти можуть допомогти з міркуванням, але не гарантують фактичності. Жоден метод не усуває галюцинації повністю.
Модель спирається лише на те, що бачила під час тренування, якщо не дати їй зовнішній контекст. Для свіжих або приватних даних використовують RAG (Retrieval-Augmented Generation): спочатку шукаються релевантні документи, потім вставляються у промпт як контекст.
Без RAG модель частіше спирається лише на пам'ять параметрів і може вигадати відповідь. З RAG вона частіше спирається на реальні документи й може цитувати джерела, але відповідь усе одно варто перевіряти. Це дозволяє використовувати LLM для роботи з корпоративними базами знань, документацією, юридичними текстами.
Сама по собі модель лише генерує текст. Але якщо дати їй інструменти (пошук, калькулятор, API, код) — вона стає агентом: аналізує задачу, вирішує який інструмент використати, викликає його, обробляє результат і продовжує.
Сучасні агенти можуть: писати і запускати код, шукати в інтернеті, працювати з файлами, викликати API, навіть керувати іншими агентами. Ключова ідея — цикл «думка → дія → спостереження» повторюється, доки задача не вирішена.
— Кінець мінікурсу —