Розуміння трансформаторів: кодер, декодер і архітектурний розкол
У попередніх статтях цієї серії розглядалися RNN і LSTM/GRU — моделі послідовності, які підтримують прихований стан і обробляють маркери по одному. Вони працюють, але мають дві структурні проблеми. По-перше, прихований стан має стиснути все, що бачили досі, у вектор фіксованого розміру — довгі послідовності втрачають інформацію. По-друге, навчання є послідовним за побудовою; ви не можете розпаралелювати вздовж осі часу, оскільки кожен крок залежить від попереднього.
У документі 2017 року «Увага — це все, що вам потрібно» замінено повторення на увага — механізм, за допомогою якого кожен маркер може безпосередньо переглядати кожен інший маркер у послідовності. Відсутність вузьких місць через прихований стан, відсутність послідовних залежностей під час навчання, набагато довший ефективний контекст. Архітектура, яку вони запровадили, — Transformer, і протягом року вона розділилася на три сімейства — Лише кодер (BERT), Тільки декодер (GPT) і Кодер-декодер (T5) — які сьогодні домінують у НЛП. Ці три мітки є основним способом характеристики будь-якого трансформатора: ви класифікуєте модель за тим, який стек(и) оригінальної архітектури вона зберегла. Таким чином, фраза на кшталт «перетворювач лише кодера» не є загальним описом — вона прикріплює модель до однієї специфічної гілки (стиль BERT: двонаправлена, орієнтована на розуміння), на відміну від лише декодера (GPT, генерація) або кодера-декодера (T5, послідовності до послідовності).
Ця стаття розповідає про цей розподіл: звідки взялися Трансформери, що BERT і GPT взяли з оригінального дизайну, і чому вибір між ними насправді є вибором між двома способами використання уваги.
Оригінальний трансформер
Стаття 2017 року — Увага — це все, що вам потрібно, написана вісьмома дослідниками з Google — була спрямована на конкретну проблему: машинний переклад. Дано речення англійською мовою, складіть еквівалентне речення французькою мовою. Одну річ легко неправильно прочитати назву: газета представила Трансформер, а не саму увагу. Механізм уваги прийшов від Багданов та ін. (2015), як помічника, який прикрутився до RNN seq2seq. Трансформатор додав твердження, що однієї уваги достатньо — збережіть її, відкиньте повторення та побудуйте всю модель із самоуважності (плюс мультиголовка, позиційне кодування та блоки прямої передачі). Отже: Google представив архітектуру; Зверніть увагу, механізм передує цьому. Архітектура складається з двох частин, призначених для цієї форми перекладу:
Кодер зчитує все вихідне речення одночасно. Кожна лексема в “I love you” може звертати увагу на будь-яку іншу токен — двонаправлена увага, жодних обмежень. Вихід – це послідовність контекстуалізованих представлень: по одному на вхідний маркер.
Декодер генерує цільове речення по одній лексемі за раз. На кожному кроці він виконує дві дії:
- Самоувага над цільовими токенами, згенерованими на даний момент («Je t»), з каузальною маскою — токен N може звернути увагу лише на токени 1…N-1, ніколи не на майбутнє. Це важливо, тому що під час висновку модель генерує зліва направо; він не може переглядати токени, які ще не створив.
- Перехресна увага від декодера назад до виводу кодера, дозволяючи кожному згенерованому токенові звертатися до представлення вихідного речення.
Варто чітко пояснювати, чому декодеру потрібні обидва, тому що природним запереченням є «якщо кодер уже пропустив своє розуміння, навіщо декодер взагалі звертається?» Дві уваги виконують різну роботу. Перехресна увага полягає в тому, як використовується інформація кодера — вона не вводиться автоматично; декодер повинен звертати увагу на вихід кодера, щоб прочитати його, тому видалення перехресної уваги залишить роботу кодера невикористаною. І декодер також потребує самоуважності для того, з чим кодер не може допомогти: кодер бачив лише джерело (англійська), але декодер створює ціль (французьку) одну лексему за раз — тому він повинен звертати увагу на цільові слова, які він уже створив, щоб зберегти узгодженість, порядок слів і плавність. Кодер нічого не знає про ціль; мета навіть не існує, коли кодер працює. Отже: перехресна увага витягує з джерела, самоувага відстежує результат, коли він генерується.
Два механізми уваги, два стеки. Ця форма — читати все в одному стеку, генерувати одне за одним із посиланням на перший стек — це те, що потрібно для перекладу і для чого було створено оригінальний Transformer.
Збільшено до повної архітектури, від кінця до кінця, тобто це — токенізер і вбудовування внизу, доданий позиційний сигнал, кожен стек повторюється шість разів, і кінцевий linear-plus-softmax, що проектує вихідні дані декодера на ймовірності маркерів:
Деталі на рівні блоку — те, що насправді робить кожен Add і LayerNorm — є предметом Всередині трансформаторного блоку. Для покрокового огляду варіантів у стилі кодера та декодера довжиною в книгу, Трансформатори у стилі кодера та декодера Себастьяна Рашки (ML Q та AI, гл. 17) є хорошим компаньйоном.
Два види масок уваги
Форк, який дав нам BERT і GPT, насправді стосується маски уваги — які токени дозволено переглядати кожному токену.
Механічно обидва є одним і тим самим шаром самоуважності з кількома головками — ті самі матриці запитів/ключів/значень, той самий softmax, ті самі скалярні добутки. Єдина різниця полягає в тому, чи застосовуєте ви трикутну маску перед softmax. Встановіть замасковані позиції на -infinity, softmax обнулить їх, і токени більше не можуть перебувати через маску.
Отже, розгалуження між двонаправленою та причинно-наслідковою увагою — це одна частина архітектури, але вона має величезні наслідки:
- Двостороння увага дозволяє кожному маркеру бачити всю послідовність за один прохід. Чудово підходить для розуміння завдань (класифікація, NER, вбудовування), де потрібен повний контекст для кожного токена. Не можна використовувати для створення авторегресії — маркер у позиції N побачить маркер N+1, якого ще не існує.
- Причинна увага обмежує кожен маркер переглядом лише своїх попередників. Необхідно для авторегресійної генерації: ви можете навчити модель передбачати маркер N+1 з маркерів 1…N у кожній позиції одночасно, а потім під час логічного висновку генерувати по одному маркеру за один раз, використовуючи ту саму пряму передачу.
Зробивши цей вибір, ви визначилися, у чому хороша модель — і яка навчальна мета їй підходить. Правило в один рядок: ціль випливає з маски — передбачення замаскованого маркера (MLM) для двонаправленого кодера, передбачення наступного маркера для каузального декодера. Потім відбулися BERT і GPT.
BERT: залишити кодер
BERT (2018) взяв стек кодувальника з Transformer і повністю відмовився від декодера. Ні причинної маски, ні перехресної уваги, ні авторегресійної генерації. Просто двонаправлені шари самоуважності.
Original Transformer encoder:
[bidirectional self-attention] → [feed-forward] → repeat × N → output
BERT:
[bidirectional self-attention] → [feed-forward] → repeat × 12 → [CLS] vectorМета попереднього навчання, моделювання замаскованої мови (MLM), відповідає двонаправленій формі: приховати ~15% вхідних токенів і навчити модель передбачати їх з урахуванням повного навколишнього контексту — ліворуч і праворуч від кожного замаскованого токена. Це те, чого принципово не може зробити причинна модель; це було б обманом.
Для подальших завдань BERT виводить послідовність контекстуалізованих векторів — по одному на вхідний маркер — плюс спеціальний маркер [CLS], який об’єднує інформацію з усієї послідовності. Класифікація: візьміть вектор [CLS], проведіть його через маленьку лінійну головку. NER: візьміть вектор кожного маркера, пропустіть його через класифікатор для кожного маркера. Вбудовування: об’єднайте вектори токенів в один вектор речень.
Чого не може BERT: авторегресійна генерація. Двонаправлена маска означає, що її не можна використовувати для генерації зліва направо стандартним способом.
Сімейство BERT сьогодні: сам BERT, RoBERTa (краще навчений BERT), ALBERT (спільний доступ до параметрів), DistilBERT (дистильована зменшена версія), DeBERTa-v3 (розмежована увага + навчання в стилі ELECTRA), ModernBERT (оновлений дизайн 2024). Усі лише кодери.
GPT: залишити декодер, відкинути перехресну увагу
GPT (2018) взяв стек декодера — але з однією важливою модифікацією.
Оригінальний декодер Transformer має два рівні уваги на блок: причинно-наслідкова увага до цільової послідовності, потім перехресна увага до кодера. Без кодера перехресній увазі нема чого звертати увагу. Тому GPT видалив його:
Original Transformer decoder block:
[causal self-attention] → [cross-attention to encoder] → [feed-forward]
GPT decoder block:
[causal self-attention] → [feed-forward]Те, що залишилося, це причинна самоувага плюс шар прямої подачі — такої ж форми, як блок кодера BERT, за винятком маски уваги. Ось чому люди іноді плутаються з іменуванням: GPT насправді є «просто стеком декодера», але без перехресної уваги він структурно схожий на BERT, відрізняючись головним чином маскою.
Мета попереднього навчання, прогнозування наступного маркера, точно відповідає причинно-наслідковій формі: у кожній позиції прогнозувати наступний маркер, враховуючи все, що було раніше. Причинна маска робить це ефективним — один прохід вперед по всій послідовності навчає модель прогнозувати кожну позицію одночасно.
Для подальших завдань GPT генерує текст. Класифікація за GPT працює двома способами:
- Генеративний: запитайте модель із введенням + описом завдання («Це конфіденційно? Так чи ні: …») і прочитайте згенеровану мітку як текст.
- Дискримінаційна головка: візьміть прихований стан остаточного маркера, приєднайте головку лінійного класифікатора — такої ж форми, як головка
[CLS]BERT, але використовуючи останню позицію, а не спеціальний префіксний маркер.
Що добре робить GPT: генерація тексту, діалог, код, будь-що авторегресійне. Що він робить гірше з точки зору архітектури: класифікація з чітким лексичним сигналом. Двонаправлений контекст, який BERT отримує безкоштовно, — це те, що причинна модель має стискати під час читання.
Сімейство GPT сьогодні: GPT-3/4/5, Llama 1/2/3, Qwen, Mistral, Gemma, DeepSeek, Phi. Все лише для декодера.
T5 і BART: збережіть обидві половини
Менше третє сімейство зберегло оригінальну форму кодера-декодера, де кодер зчитує вхідні дані двонаправлено, а декодер генерує вихід авторегресійно з перехресним зверненням уваги до кодера.
T5 (2019) переробляє кожне завдання NLP як текст у текст: класифікація, переклад, узагальнення, навіть регресія — усе «вхідний текст → вихідний текст». Метою попереднього навчання є пошкодження діапазону (варіант мови з масками), а архітектурою є оригінальний Transformer з обома стеками.
BART (2019) — це та сама форма, із завданням автокодувальника знешумлення: пошкодити вхід (проміжки масок, перетасувати речення тощо), а потім навчити кодер-декодер реконструювати його.
Whisper (перетворення мовлення в текст OpenAI) діє за тією самою схемою: кодер зчитує звукові характеристики двонаправлено, декодер генерує розшифровку авторегресійно.
Це особливо добре для завдань структурованої генерації, де у вас є чітке відображення введення-виведення: переклад, підсумовування, розпізнавання мовлення. Двонаправлений кодер забезпечує повне розуміння вхідних даних, причинно-наслідковий декодер генерує вихідні дані, а перехресна увага дозволяє декодеру звертатися до закодованих вхідних даних на кожному кроці генерації. Це оригінальна форма Transformer, і для завдань у формі перекладу вона залишається справді міцною.
Сімейство кодерів-декодерів сьогодні: T5, FLAN-T5, mT5, BART, mBART, Whisper, NLLB, Pegasus.
Перехресна увага: та сама голова, два потоки
Іграшка з однією головою обчислює запити, ключі та значення з однієї послідовності. Перехресна увага змінює їх джерела. Поточні представлення декодера забезпечують запити; вихід кодера надає ключі та значення:
Q = decoder_states @ Wq # (n_target, d_k)
K = encoder_states @ Wk # (n_source, d_k)
V = encoder_states @ Wv # (n_source, d_v)
A = softmax(Q @ K.T / sqrt(d_k), axis=-1)
H = A @ V # (n_target, d_v)Матриця уваги прямокутна: (n_target, n_source). Кожна цільова позиція отримує суміш вихідних значень. Після об’єднання головок і проектування на ширину декодера цей внесок входить до залишкового доповнення до потоку декодера. Він не замінює представлення кодувальника та не додає маркери джерела до цільової послідовності.
I→Je, want→veux, it→le one-to-one;not spread over ne … pas; and to, petboth pulling from the single caresser. The matrix is rectangular(7 queries × 6 keys) and deliberately off-diagonal — word order differs between the languages, so cross-attention learns the alignment rather than assuming position i maps to position i. Hover a column to isolate one query's distribution. Weights are illustrative, chosen to show the shape, not dumped from a model.Ці ваги створені вручну, щоб проілюструвати можливе вирівнювання, а не виміряні за моделлю перекладу. На діаграмі цільові запити розміщуються в стовпцях, на відміну від угоди про запити рядків у коді. Кожен стовпець розподіляє вагу за вихідними ключами. Запит може збиратися з кількох вихідних позицій (not від ne і pas), а також кілька запитів може збиратися з однієї вихідної позиції (to, pet від caresser).
Самоувага декодера є причинно-наслідковою залежністю від цільових позицій. Його перехресна увага може перевірити повне закодоване джерело, яке вже доступне; відступи все ще можуть бути замасковані. Це додатковий підрівень в оригінальному кодері-декодері. Модель лише з декодером не має окремого потоку кодувальника для перегляду.
Три родини, пліч-о-пліч
| Сім’я | Що воно зберегло | Увага | Попередня підготовка | Найкраще в |
|---|---|---|---|---|
| Лише кодер (BERT) | Стек кодера | Двонаправлений | Маскований Л.М | Класифікація, NER, вкладення |
| Лише декодер (GPT) | Стек декодера мінус перехресна увага | Причинний | Прогноз наступного токена | Генерація тексту, діалог, код |
| Кодер-декодер (T5) | Обидві стопки | Двостороння + причинна + перехресна увага | Пошкодження діапазону / зменшення шуму | Переклад, реферат, структурований seq2seq |
Назва асиметрична та заплутана — «лише декодер» передбачає «частину, яка декодує», що означає, що десь має бути кодер. У GPT немає. Модель обробляє свою вхідну підказку, запускаючи маркери підказок через той самий стек причинно-наслідкових зв’язків, який пізніше генеруватиме вихідні маркери; окремого етапу кодування введення немає. «Лише декодер» насправді означає «ми залишили стек декодера єдиним стеком, усунувши перехресну увагу».
Чому архітектурна вилка має значення на практиці
Розвилка між двонаправленою і причинною увагою має два практичні наслідки, про які варто пам’ятати.
Для завдань класифікації моделі кодувальників виконують більше роботи з точки зору архітектури. Класифікатор BERT на моделі зі 100 М параметрами може зрівнятися або перевершити причинний LLM 7B із дискримінаційною головкою, оскільки двонаправлена увага дозволяє кожному токену бачити один інший за один прохід. Мета попереднього навчання MLM також ближча до «даного контексту, заповніть», ніж передбачення наступного токена до «даного тексту, яка мітка». Класифікатори кодерів досягають високої точності за допомогою на два порядки меншої кількості параметрів і ~5–25 мс висновків замість 100–500 мс.
Для завдань генерації моделі декодера є обов’язковими, а не лише бажаними. Ви не можете використовувати двонаправлену увагу для авторегресійної генерації — модель побачить майбутні токени, які вона має передбачити. Що б ще ви не хотіли від генеративної моделі, причинна маска не підлягає обговоренню.
Сімейство кодувальників-декодерів виграє, коли обидві половини виконують реальну роботу. Для перекладу потрібне глибоке розуміння вхідних даних (кодер) ТА плавна генерація вихідних даних (декодер) ТА спосіб для кожного вихідного токена звертатися до вхідних даних (перехресна увага). Архітектура 2017 року була створена саме для такої форми, і T5 / Whisper / BART все ще тримаються у своїх сферах.
Але моделі загального призначення зійшлися лише з декодером — і не лише через масштаб. Модель лише з декодером виконує послідовність у послідовність без окремого кодувальника: розмістіть джерело безпосередньо в підказці та згенеруйте ціль, а звичайне причинне самоуважність дозволяє згенерованим токенам повернутися до нього — ви отримуєте перевагу перехресної уваги безкоштовно, в одному стеку. Таким чином, одна архітектура, одна мета (next-token) і вхідні дані просто живуть у контексті. Ця простота, а також той факт, що будь-яке завдання («перекласти це», «узагальнити це», «відповісти на це») перетворюється на «описати це в підказці та продовжити», є причиною того, що нова модель загального призначення призначена лише для декодера — навіть незважаючи на те, що виділені кодери-декодери все ще перемагають у вузьких завданнях у формі перекладу, для яких вони були створені.
Тенденція 2024+ полягає в тому, що моделі лише з декодерами беруть на себе завдання, для яких вони архітектурно неоптимальні (класифікація, вбудовування, ранжування) через самий масштаб і можливість налаштування інструкцій. Це працює, але за значних витрат — Llama-Guard 3 (8B) робить те, що добре робить DistilBERT (66M), за 100-кратну вартість висновків. Архітектури не зникли; мода має.
Резюме
Документ Transformer 2017 представив одну архітектуру для перекладу: кодер, який зчитує вхідні дані двонаправлено, декодер, який генерує вихідні дані авторегресійно, і перехресне поєднання уваги. Протягом року ця архітектура розділилася на три способи:
- BERT зберіг лише стек кодувальника, надав нам двонаправлений контекст для розуміння завдань і навчався за допомогою моделювання замаскованої мови.
- GPT зберігав лише стек декодера (за вирахуванням його перехресної уваги), зберіг причинно-наслідкову маску, необхідну для генерації авторегресії, і навчався з прогнозуванням наступного маркера.
- T5 / BART зберігає обидві половини та перехресну увагу для завдань у формі перекладу.
Вибір однорозрядної архітектури — двонаправлена або причинно-наслідкова увага — вирішує майже все інше щодо того, в чому хороша модель. Кодер для розуміння, декодер для генерації, обидва для послідовності. Сучасні варіанти — DeBERTa-v3, Llama-3, Qwen-2.5, Whisper — розташовані на цій же карті.
Коли ви обираєте модель у 2026 році, ви насправді вибираєте, яку половину Transformer 2017 ви хочете, а також кілька рішень щодо масштабу, токенізера та даних навчання. Розкол — це архітектура.
Робочі примітки — видалити перед публікацією.
- Продовжує серію
understanding-*(adaline,linear-models,rnns-sequences-hidden-state,rnns-lstm-gru-sequence-recognition).- Перехресне посилання з цієї статті: вперед до статей про тонке налаштування (Vast/Kinetic/local-classifier), назад до серії RNN і до статті MoE (яка використовує трансформатори як будівельні блоки).
- Перехресне посилання на цю статтю з: підрозділ статті C «Чим відрізняються архітектури» — наразі вбудовано в
fine-tuning-safety-classifier-workstation-gpu. Обріжте цей розділ до посилання з одного абзацу, коли ця стаття з’явиться.