Галоўная / Артыкулы

Як працуюць трансформеры: ад вузкіх месцаў RNN да ўвагі, агентаў і акна кантэксту

Пакрокавы агляд трансформера: чаму RNN забуксавалі, як працуюць токены і эмбедынгі, увага, QKV, галовы, пазіцыі, структура блока, маштаб і агенты.

Выдавец: REACTAPP.TOP40 хв чытання9221 слоў

Крыніцы: **“Attention Is All You Need,” Finally Explained : Before You Build Another AI Agent, Understand This**

Будзь-хто, хто вікорыстовуе лішэ інструменты штучного інтэлекту, можа працюваты, не розуміючы дэталей іхняй працы. Ты ж, хто хочэ створуваты, віправляты помілкі чы розвіваты ці сістэмі, не можуць гэтага зробіты. Усі пошырэні мадэлі велікіх мов базуюцца на одній архітэктуры, опісаній у 2017 році у п’ятнадцятысторынковій статты під назвою „Attention Is All You Need“. Мало які дослідніцькі праці апошняга дэсятылітця так сільно змінілі напрамок розвітку штучного інтэлекту. Ідэі, што ляжаць в основі ціеі архітэктуры, не ёсць настылькі складнімі, як здаецца, а матэматычні працэсі стаюць зрозумілімі, калі іх розглядаты у правільній послідовносты. Пасля гэтага ты самі ідэі зустрычаюцца всюды: у способах планування агентаў, у прынцыпах працы навчання в кантэксты, у здатносты мадэляў перэходыты між тэмамі під час розмові і у важлівосты довшых вікон кантэксту.

Наведэный ніжчэ маршрут почынаецца з старого послідовного підходу і пояснюе, чому ён зазнав затрымкі; далі йдэцца про тыя, як тэкст перэтворуецца на чысла, потым — про механізмі увагі і повну структуру блоків, а нарэшты — про тыя, як гэты дызайн розвінувся у сучасні мадэлі мовлення і агенты.

Чому чытання тэксту по одному слову віклікало трудношчы

До появі трансформерыв мова перэважно апрацоўвалася за допомогою рэкурэнтніх нейронніх мерэж, які зазвічай скорочуваліся до RNN. Ідэя проста: мерэжа проходыць праз послідовнісць слів по одному і перэдае актуальній стан, які ёсць підсумком усяго побачэного досі.

Проста апрацоўка: хтось чытае роман, але можа залішыць толькі адну змітку, і ўсё трэба чытаць сторунку за сторункай, не прыскакаючы наперад чы не вяртаючыся назад. Пасля кожнага рэчэння змітку перапішуць, дадаўшы там тое, што здаецца важлівым, але змітка мала. Да 300-й сторункі практычна нічага з першай сторункі не застаецца. Таксама немагчыма даць другі роздзіл другу людзі, каб тая чытала яго адночасна, адколі спачатку трэба завершыць зміткі з першага роздзілу.

Такі строгі парадак вызвалі два окрэжныя проблемы з масштабаваннем.

Першая — гэта знікненне градыента. Навчанне налагоджуе вагі за дапамою методу бэкпропагацыі, якаі вырахоўвае, насколькі кожны параметр спадзяўся на памылку. У RNN, якай чытае дзейніцу дліга, гэты сігнал трэба перадаваць назад праз кожны крок часу. Калі ён доходзіць да самых першых крокаў, ён часта вялікая часткаю зменшыўся, таму сетка практычна не можа навучыцца на тым, што зрабілі тые першыя словы.

Другій прынцып — гэта последоватэльныя узкія месцы. Расчыткі для пазычнага положэння n не можаць быць выконаны раней, чым будзе завершаны расчыткі для пазычнага положэння n-1, адколькі кожны крок выкарыстоўвае пярэдній скрыты стан. Сучасныя GPU створаны для выканання вельмі вялікай колькасці операцыяў адразу, а RNN практычна не дае ўсё таго, што можна было бы выконваць паралельна. Дакумент з 1 000 слоў выконвае 1 000 крокаў адразу, пры чым апаратная частка большасцю часу застаецца без працы.

На дыяграме ніжэй прадстаўлены два спосабы апрацоўкі токэнаў: з адной стороны — по аднаму з поступовым згасаннем скрытага стану, а з іншай — кожная пара падключаецца адразу:

╔══════════════════════════════════════════════════════════════════════════════╗
║              RNN vs TRANSFORMER: HOW TOKENS ARE PROCESSED                  ║
╠══════════════════════════════════════════════════════════════════════════════╣
║                                                                              ║
║  ┌─────────────────────────────────────────────────────────────────────┐    ║
║  │  RNN  ── Sequential (slow, forgets early context)                   │    ║
║  └─────────────────────────────────────────────────────────────────────┘    ║
║                                                                              ║
║   "The"    "cat"    "sat"    "on"     "the"    "mat"                        ║
║     │         │        │       │        │        │                           ║
║     ▼         ▼        ▼       ▼        ▼        ▼                           ║
║  ┌─────┐   ┌─────┐  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐                       ║
║  │ RNN │──▶│ RNN │─▶│ RNN │▶│ RNN │▶│ RNN │▶│ RNN │                       ║
║  │  1  │   │  2  │  │  3  │ │  4  │ │  5  │ │  6  │                       ║
║  └─────┘   └─────┘  └─────┘ └─────┘ └─────┘ └─────┘                       ║
║     h₁ ──▶   h₂ ──▶   h₃ ──▶  h₄ ──▶  h₅ ──▶  h₆                         ║
║                                                                              ║
║   Step 1   Step 2   Step 3  Step 4   Step 5   Step 6   (must wait!)        ║
║   ⚠ "The" signal is diluted through 5 hops by the time we reach "mat"      ║
║                                                                              ║
╠══════════════════════════════════════════════════════════════════════════════╣
║                                                                              ║
║  ┌─────────────────────────────────────────────────────────────────────┐    ║
║  │  TRANSFORMER  ── Parallel (fast, every token sees all others)       │    ║
║  └─────────────────────────────────────────────────────────────────────┘    ║
║                                                                              ║
║   "The"   "cat"   "sat"    "on"    "the"    "mat"    ◀── ALL AT ONCE       ║
║     │╲╲    │╲ ╲╲   │╲╲ ╲   │ ╲╲    │ ╲╲     │                             ║
║     │  ╲╲  │  ╲ ╲╲ │  ╲╲ ╲ │   ╲╲  │   ╲╲   │                             ║
║     ├───╫──┼───╫───┼───╫───┼────╫──┼────╫───┤  ← every token             ║
║     │  ╱╱  │  ╱ ╱╱ │  ╱╱ ╱ │   ╱╱  │   ╱╱   │    attends to              ║
║     │╱╱    │╱ ╱╱   │╱╱ ╱   │ ╱╱    │ ╱╱     │    every token             ║
║     ▼       ▼       ▼       ▼        ▼        ▼                             ║
║  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐                         ║
║  │ out │ │ out │ │ out │ │ out │ │ out │ │ out │  ← all computed          ║
║  │  1  │ │  2  │ │  3  │ │  4  │ │  5  │ │  6  │    simultaneously        ║
║  └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘                         ║
║   ✓ "The" has DIRECT connection to "mat" — no information decay             ║
║                                                                              ║
╠══════════════════════════════════════════════════════════════════════════════╣
║  LEGEND:  ──▶  sequential dependency     ╲╱╱  all-pairs attention           ║
║           h₁   hidden state              ⚠    information bottleneck        ║
╚══════════════════════════════════════════════════════════════════════════════╝

Вораткі дапамаглі, але не змянілі сутнасць проблэмы

Сеткі з дзейнаемайамі мемарыямі дзейнаўшага і кароткага тэрміну, якія былі адкрытыя Хохрайтэром і Шмідхубэрам у 1997 годзе, дадалі вораткі, якія давалі чысты кантроль над тым, што застаўляць, што адмовіцца і што выдаваць на кожным кроцы. Яны працавалі добра. У 2010-х гадох яны выконвалі большасць практычных задач у галі обработкі мовы, уключаючы раннюю машынную перакладчыку, аналіз настрою і генераванне тэксту.

Яны застаўаліся сэквэнцыйнымі. Дужа далёкія залежнасці яшчэ заставаліся складнымі, а паралельныя апараты яшчэ не маглі быць выкарыстоўваныя на павную. LSTMs не зазналі нявясці таму, што паслаба мадэліравалі мову. Яны зазналі нявясці таму, што не маглі расшырвацца: адбавленне вычыслювальных моцаў давала ўсё меньшыя рэзультаты, а спосаб пераканаць гэтыя меры выклікаў патрэбу ў абоўсцю іншым стылю вычыслаў.

З тэксту да цячэнняў

Нейральныя сеткі з’ядзеюць цыфры, а мова складаецца з слоў, таму перад тым, як ужо прыменяць атэнцыю, неабходна здзейсніць пераклад. Для этага трэба два крокі: токенізацыя і эмбедынг.

Токенізацыя

Токенізацыя ператварае строку на серыю цэлых ID, якія беруцца з фіксаванага слоўніка. Перша важнае рашчуранне — токены не ўсё тое ж самае, што і словы. Сучасныя токенізаторы дзеляць тэкст на часткі падслоў, зазвычай за дапамогою метода Byte-Pair Encoding або WordPiece, і рэзультаты выглядаюць так:

"Hello world"               → ["Hello", " world"]           → [15496, 995]
"unbelievable"              → ["un", "believ", "able"]      → [256, 9391, 540]
"ChatGPT"                   → ["Chat", "G", "PT"]           → [14126, 38, 2969]
"antidisestablishmentarianism" → ["ant", "idis", "est", "ablish", "ment", "ari", "an", "ism"]

Частае словы атрыбутуюцца своім сабэйтом, тады калі рэдкія чыста складовыя словы дзелюцца на меншыя часткі. Гэта дае хораша паверага за дапамою слоўніцы разумных размараў, адколі няма патрэбы ствараць ентры для кожнага можлівага слова. Размах слоўніц у разных мадэлях крыецца ад прыблізна 30,000 для BERT і 50,257 для GPT-2 да пад 100,000 у новейшых мадэлях.

Практычны пераклад на англійскую: сабэйт — гэта прыблізна тры чвярткі слова, а слова — прыблізна 1,3 сабэйта. Таму роман з 100,000 слоў станавіць прыблізна 133,000 сабэйтаў, што мае значэнне калі дзейнуюць ліміты кантэкстовага вікна.

Эмбеддынгі

Матрыца уявлення, якая складаецца з аднаго рэядка на кожную елемента слоўніку і d_model столбцоў, ператварае кожны ID токена на ўпакоўаны вектар. Чырабатка інформацыі пра токен адбываецца проста праз выбіранне яго рэядка. ID токена 995, які пазначае слова „world“, вядзе да рэядка 995 і вяртае значэння d_model – напрыклад, 0.24, -0.83, 0.17 і так далей аж да 0.91.

Этыя рэядкі выучваюцца пад час трэнавання, і апыляецца корыстная якосць: токены з супаўзелічнымы значэнням маюць вектары, якія геаметрычна знаходзяцца блізка адзін да другога.

Cosine similarity in embedding space:
  similarity("cat", "lion")   ≈ 0.89  ← very similar
  similarity("cat", "moon")   ≈ 0.12  ← not similar
  similarity("king", "queen") ≈ 0.91  ← very similar

Адзін застэрэжны момент па час аналізу знаменітага прыклада: каралева = чалавек – чалавек + жанчына. Гэтыя арыфметычныя вырахункі былі здзейснены за дапамою Word2Vec у 2013 году, а не за дапамою трансфармерных эмбеддзінгаў. Трансфармеры выучаюць своі эмбеддзінгі разам з усіма іншымі параметрамі, таму чыстая вектарная арыфметыка ў такіх случаях менш надзеяна. Аднак застаёцца прынцып, што словы з супакоўzanымі значэннямі знаходзяцца ў суседзкіх рэгіонах прастору.

Однаковая шыроць усюды

Фіксаваная вялічынь d_model з’яўляецца ўсюды в трансфармерах: у эмбеджынгах, выходных даных атэнцыі, а таксама у вхідных і выходных даных шароў з падаючымі сігналамі. Гэта робіцца навмесна. Кожны компонент чытае і запісвае даныя у вектарны поток фіксаванага розмеру, які называецца потокам залішку і праходзіць праз кожны шар. Паколькі всі компоненты працуюць з вектарамі однаковага розмеру і дадаюць своія рэзультаты назад у яго, ўсе элементы гармонійна складаюцца. Гэта таксама прычына, чаму інфармацыю пра пазіцыю можна проста дадаць да эмбеджынга токена: у обох ёсць адна і тая ж форма, і сума безпосерэдньа прайшоў у поток.

Такім чынам, даныя для першага блока — гэта токен-эмбедынг плюс вектар пазыціі. Паколькі яны знаходзяцца ў аднам прасторэ, ўсуненне дагэтуль не выклікае дапаможных параметраў, а інфармацыя пазыціі ўключаецца ў тыя ж вектары, якія несу значэнне. Мадэлі у стыле BERT, якія чытаюць два рэчэнні разам, напрыклад, пад час адпаведзення на запытанні з запытаннем і урывкам тэксту, дадаюць эмбедынг сегмента, які пазначае, да каго рэчэнню належы кожны токен: 0 для першага і 1 для другога. Мадэлі у стыле GPT яго прыменяюць не трэба.

Увага: навучанне таму, куды дывіцца

У 2014–2015 гадах досліднікі, які працювалі над машыннім перэкладом, помітылі недолік навіць у сістэмах LSTM. Мадэль складала всю інформацыю про вхідне рэчэння у одын вектор фіксованого розміру перад тым, як початы генеруваты рэзультат, што створувало шчэ одну перэшкоду. Вінікло очэвідне запітання: чы можа мадэль на кожному кроці генераціі озірнутыся на весь вхідній тэкст. Адказам на гэта запітання став механізм увагі, які змінів підхід до мадэлявання послідовностэй.

Два повсякдэнні прыклады робляць цю ідэю зрозумілою.

На шумній вечырці, дэ трывае дэсяць розмов, мозок не надае кожному звуку однаковоі вагі під час прослуховування розмові друга. Ён посілюе голос і напрамок розмові друга, зменшуючы гучнісць іншых звуків, але не вімікаючы іх цалкам. Гэта посілення ёсць контынуальнім, а не перэмікачэм «ввімкнено/вімкнено».

Калі ў чалавека ёсць фота класу і яго папросяць знайсці вучыльніка, ён не скануе кожны піксель аднойчы. Пошук спрамовываецца безпосерэдна да тых атрыбутаў, якія вказуюць на дорослага чалавека, такіх як высота у параўнанні з іншымі і пропорцыі ліца. Тое, што шукаецца, керуе тым, куда будуць спрамованы вочы.

Комп’ютарная увага ператварае гэтыя інтуіцыі на чатыры крокі: павінна быць прычына для пошуку, тое ўсё, што выступае як запіт; павінен быць набор кандыдатаў, якія можаць быць рэлевантнымі; кожнаму кандыдату павінен быць прызначаны цэнз рэлевантнасці; і пасля гэтага інфармацыя спраўляецца разам, з узважэнням да гэтых цэнзаў.

Аднойчы трэба раз’ясніць адны злучанне: увага не значыць, што мадэль фіксуецца на адной рэчы і ігнаруе все іншае. Рэзультат — цэ функцыя ваг, да якой кожны элемент прыносіць свой вялічыну, пры чым дзеякія з іх прыносяць яе набагато больш, чым іншыя. Цэ ўзважаная адгукі, а не дваякі фокус.

Аўтэнскі, даданы пазьней фармат

У сваім першым варыянце атэнцыя была дадатковым элементам для модэляў RNN і LSTM. На кожным кроку дэкадавання модэль:

  1. бачыла ўсе скрытые станы анкодэра;
  2. рачыла паказначык рэлевантнасці между тэкушчым станам дэкадэра і кожным станам анкодэра;
  3. ператварала гэтыя паказначыкі на вагі за дапамою функцыі softmax;
  4. взяла суму ваговых значэнняў станаў анкодэра як кантэкст атэнцыі.

Функцыя softmax заслуговае на короткое поясненне. Яна ператварае вектар дазволеных рэальных чысоў у распад верыятнасцяў. Кожны паказначык стае значэнням e, паднятым да гэтага паказначыка, аддзеленым на суму значэнняў e, паднятых да кожнага паказначыка. Усе выходныя значэння ўжо паўназначальныя і яны дадаюцца да 1; калі ж экспанэнцыя перацягвае разлік между велікімі і малымі паказначыкамі, элемент з найвышэйшым паказначыкам отрымае самую большую частку вагі.

Гэта было значныя палёгчэнне, адколі мадэль цяпер могла дасягнуць будзь-каго часткі вхідных дадзенняў на кожным кроку. Пасля таго автары працы „Attention Is All You Need“ запыталіся пра ўсё смелейшае: што, якбы рэкурэнтныя механізмы былі адключаны, а атэнцыя стала не дадатковай часткай, а самай модэллю?

Самаатэнцыя і тройка элементаў — кэю, ключ і значэнне

Центральная ідэя працы 2017 года — самаатэнцыя. У працоўцы не атэнція з адной последовальнасці на іншую, а кожны токен у адной последовальнасці прыкладвае атэнцыю да кожнага іншага токена ў той жа последовальнасці. Самэ так трансфармеры ствараюць кантэкст, а ўсёрасумеванне яго выклікае троха вектараў, якія з’являюцца ў кожным вычысленні атэнцыі: кэю, ключ і значэнне.

Сервіс пошуку відэа

Калкаванне фразы «як зробіць хлеб з закваскай» у відэо-сайт не парабелівае тэкст з кожным кадрам кожнага відэа. Кожны відэа мае метаданные-етыкеткі, якія выступаюць у ролі ключоў: заглавле, тэгі, ключавыя словы апісання. Сайт парабелівае запіт з гэтымі етыкеткамі, каб атрымаць рэйтынгі рэлевантнасці, і паказваюцца відэа з найвышымі рэйтынгамі, ў якіх можна знайсці ўсё іх фактычнае змест, тыя самыя значэнні.

У гэтым працэсе ёсць адна важлівая дэталі. Рэзультатам не ёсць адзін відэа. Гэта ўзвешаная сума всіх відэа адразу, пры чым кожны з іх відтвораецца на такой гучнасці, якая прылегліва да ўзнаковасці. Найболей рэлевантны відэа домінуе, а менш значыцьвыя відэа дадаюць свой вклад у меншым ступені. Спосаб паўзначэння такі:

| YouTube Concept | Attention Concept | Question it Answers |
|----------------|------------------|---------------------|
| Search query | **Query (Q)** | "What am I looking for?" |
| Video metadata/tags | **Key (K)** | "What do I contain?" |
| Actual video content | **Value (V)** | "What should I contribute?" |

Чаму тры разлічныя вектары

Чаму не пораўняваць эмбедынгі безпосерэдзя? Возьмем рэчэнне "Кацкале сядзела на калошку, бо ёй было вялікае вымучэнне." Ёжчы разбіраць, да каго адносіцца "ёй", слову неабходна звернуць увагу на "кацкале". Аднак у первісным прасторы эмбедынга займеннік і імя не ўзначальна схожыя. Раздзелэнне на запіты і ключы дазволяе модэлю выучыць, што запіт займенніка павінен адпавядаць ключам імен, да каго ён можа адносіцца, нават калі займеннік і імя выглядаюць абсалютна не схожаямі ў своіх базовых эмбедынгах. Выучаныя проекціі ствараюць прастор рэлевантнасі, які ўскладнены ад прастора схожасці первісных эмбедынгаў. Рэлевантнась і схожасць — гэта разныя рычы, і дызайн QKV дазволяе модэлю кодаваць аба явы.

Атэнцыя на масаваным скалярным добутку за чатыры крокі

Першым крокам ўсьмоўленне. Эмбеддынг кожнага токена умножаецца на тры выучаныя матрыцы — W_Q, W_K і W_V — што дае запіт, ключ і значэнне для таго токена.

Другі крок вырахоўвае сумаспадобнасць. Пытанне заключаецца у тым, насколькі добра токен a падходзіць да токена b, а адпаведны адказ — гэта скалярны добутак запіта для a і ключа для b. Вялікі значэнне означае, што токен a павінен уважна старацца пры ўваге да токена b. Скалярныя добуткі зростаюць з розмерам вектара і з размераннем ключа d_k, а не толькі з напраменнем; самэўчынаста наступны крок ўскладнюе іх.

Трэці крок — ускладненне і нормалізацыя. Калі d_k вялікі, неаскладненыя скалярныя добуткі стаюць вялікімі і прычыняюць тое, што функцыя softmax працуе ў рэгіонах, дзе градыенты мінімальныя. Дзеленне на квадратны корань d_k перад застосаваннем softmax запобегае гэтаму, і самэўчынаста звяртаецца да гэтага методу як «ускладнены скалярны добутковы атэнцыя». Рэзультатам яе ёсць набор ваг alpha_ab.

Чэтырты ўзел — аграгацыя. Раслік для токена a — гэта сума, па кожным токену b, з alpha_ab умножанага на вектар значэнняў для b.

Усе токены можна обрабатваць разам як матрыцы, у адной стыснутай формуле: Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) V. У дыяграме паказана яго працэўнасць для трывербовага фразы „the cat sat“:

╔══════════════════════════════════════════════════════════════════════════════╗
║              SCALED DOT-PRODUCT ATTENTION  ── "the cat sat"                ║
╚══════════════════════════════════════════════════════════════════════════════╝

STEP 1: Input embeddings - ALL tokens are stacked into one matrix X
  ┌─────────────────────────────────────────┐
  │   "the"→x₁      "cat"→x₂      "sat"→x₃  │ X ∈ ℝⁿˣᵈ
  └──────────────────┬──────────────────────┘
                     │   the SAME X feeds all three projections
  STEP 2: Three separate linear projections (each applied to every token)
       ┌─────────────┴─────────────┐
       ▼             ▼             ▼
  ┌─────────┐   ┌─────────┐   ┌─────────┐
  │   W_Q   │   │   W_K   │   │   W_V   │ ← learned weight matrices
  └────┬────┘   └────┬────┘   └────┬────┘
       ▼             ▼             ▼
  ┌─────────┐   ┌─────────┐   ┌─────────┐
  │ Q rows  │   │ K rows  │   │ V rows  │
  │ q₁      │   │ k₁      │   │ v₁      │
  │ q₂      │   │ k₂      │   │ v₂      │
  │ q₃      │   │ k₃      │   │ v₃      │
  └────┬────┘   └────┬────┘   └────┬────┘
       │             │             │
  STEP 3: score = QKᵀ, scale by 1/√dₖ, then softmax row-wise
       │             │             │
       └──────┬──────┘             │
              ▼                    │
   ┌─────────────────────┐         │
   │  softmax(QKᵀ / √dₖ) │         │
   │   the   cat   sat   │         │
   │  the[.72  .20  .08] │         │  each row
   │  cat[.12  .71  .17] │         │  sums to 1.0
   │  sat[.09  .28  .63] │         │
   └──────────┬──────────┘         │
              │                    │
  STEP 4: multiply weights by Values V  (weighted sum)
              └──────────┬─────────┘
                         ▼
                ┌─────────────────┐
                │ output for "cat"│  0.12·v₁ + 0.71·v₂ + 0.17·v₃
                └────────┬────────┘  ← rich context-aware vector
                         │
  OUTPUT: contextualized token representations
  ┌──────────┐  ┌──────────┐  ┌──────────┐
  │"the"     │  │"cat"     │  │"sat"     │
  │knows it  │  │knows it  │  │knows     │
  │precedes  │  │sat, and  │  │who was   │
  │"cat"     │  │where     │  │sitting   │
  └──────────┘  └──────────┘  └──────────┘

Практычны прыклад: банк слоў

Возьмем фразу "Ўя пайшла ў банк, каб здаць грошы". Калі трансфармер кодуе слова "банк", механізм самай увагі дазваляе гэтаму слову адразу пераканаліцца ў кожным іншым слове. Высокія вагі надаюцца словам "здаць" і "грошы", што прыносіць фінансавы значэнне ў адпрацоўкі слова "банк". Кантэкст усуняе неодназначнасць.

╔══════════════════════════════════════════════════════════════════════════════╗
║       SELF-ATTENTION RESOLVES AMBIGUITY: What does "bank" mean?            ║
╚══════════════════════════════════════════════════════════════════════════════╝

Sentence: "I  went  to  the  bank  to  deposit  money"
             t₁   t₂  t₃  t₄    t₅  t₆    t₇       t₈
  ATTENTION WEIGHTS for token "bank" (t₅) attending to all other tokens:
  Token     │ Weight │ Visualization
  ──────────┼────────┼───────────────────────────────────────────
  "I"       │  0.03  │ ░
  "went"    │  0.04  │ ░
  "to"      │  0.02  │
  "the"     │  0.03  │ ░
  "bank"    │  0.08  │ ░░
  "to"      │  0.05  │ ░
  "deposit" │  0.38  │ ████████████████████████░░░░░░░░  ← strong!
  "money"   │  0.37  │ ████████████████████████░░░░░░░   ← strong!
  FULL ATTENTION HEATMAP (rows = query token, columns = key token):
  Higher weight → more ░/▒/▓/█
       Q\K  │  I  went  to  the  bank   to deposit money
  ──────────┼──────────────────────────────────────────────
  I         │  ▓    ░    ░    ░    ░    ░    ░      ░
  went      │  ░    ▓    ░    ░    ░    ░    ░      ░
  bank      │  ░    ░    ░    ░    ▒    ░    █      █  ← "bank"→"deposit","money"
  deposit   │  ░    ░    ░    ░    █    ░    ▓      ▒  ← "deposit"→"bank"
  money     │  ░    ░    ░    ░    █    ░    ▒      ▓  ← "money"→"bank"
  BEFORE attention:  "bank" = ambiguous (river bank? financial bank?)
  AFTER attention:   "bank" ≈ 0.38·v(deposit) + 0.37·v(money) + ...
                     → "bank" representation is now strongly financial ✓
  The model learned this WITHOUT any explicit disambiguation rules.

У той ілюстрацыі вагі паказаны для яснасці і не ўзяты з рэальнага мадэлю. Рэальныя патэрны зазвычай ўжо більш хаотычныя, а доследжэння таго, як вагі увагі адносуюцца да таго, пра шта «думае» мадэль, яшчэ трываюць. Практычны выгода не залежыць ад картонкі: сама-увага да всіх токенав яўляе ся множэннем матрыц, тое ўзьме на сябе адна операцыя GPU. Тое, што для RNN коштае n последоўных крокаў, для трансфармера коштае адна паралельная операцыя, і самэ гэта ўчыніла трансфармеры эфектывнымі.

Калькі галав, калькі лэнз

Адзін процэсар вырахоўвае аднаго роду сутнасць на раз, таму што будзе, калі разам маюць значэння калькі роду адносоў? Паглядзіце на фразу «Музыкант, які выступіў на фестывале, завязаў прыз». Ёй зрозумець значыць адразу сочыць за калькамі залежнасцяў: «завязаў» і «музыкант» як падмет і дзеяслова, «музыкант» і «выступіў» праз адносную частку, «выступіў» і «фестывале» як месца, а таксама «прыз» і «завязаў» як дзеяслова і об’ект.

Адзін «галава» быў змушаны ўпакоўваць усе гэтыя даныя ў адны набор ваг. У зьвярзанні з калькольнікаў з адной галавой жа функцыя увагі выканана h разоў паралельна, кожны раз з адзінамі сваімі выучанымі проекціямі для запітоў, ключоў і значэнняў. Рэзультаты h вычыслаў накладаюцца і праходзяць праз ўжо адну выучаную матрыцу W_O, якая перадае даныя назад у высоту модэлю. Кожны «галава» працуе ў меньшым падпросторы, дзе d_k равнае d_model дэленаму на h, таму аб’ём вычыслаў для всіх «галава» прыбліжна такі ж, як і для аднай «галавы» з цэлай шыроцы.

Уявіце рукапіс, які надаёцца рэдакцыйскаму комітэту. Рэдактор граматыкі пераглядае сінтаксіс, рэдактор стылю стэжы за наратывным прайзнікам, пераканальнік шукае сэмантычную адпаведнасць, а рэдактор структуры разглядае далекае падзеяванне. Усі яны чытаюць адночасова і незалежна, а ўсія ўжо зьвярненняяе ў адну рэцэнзію. Калькольнік з калькольнікаў з адной галавой працуе так сама.

╔══════════════════════════════════════════════════════════════════════════════╗
║                     MULTI-HEAD ATTENTION  (3 heads shown)                  ║
╚══════════════════════════════════════════════════════════════════════════════╝

Input Embedding  x  ∈ ℝᵈ_model
                    ┌────────────────────────────┐
                    │   [ x₁  x₂  x₃  ... xₙ ]  │
                    └──────────┬─────────────────┘
                               │
          ┌────────────────────┼────────────────────┐
          │                    │                    │
          ▼                    ▼                    ▼
  ╔══════════════╗    ╔══════════════╗    ╔══════════════╗
  ║   HEAD  1    ║    ║   HEAD  2    ║    ║   HEAD  3    ║
  ║  "Syntax"    ║    ║ "Semantics"  ║    ║  "Position"  ║
  ║              ║    ║              ║    ║              ║
  ║  W_Q¹ W_K¹  ║    ║  W_Q² W_K²  ║    ║  W_Q³ W_K³  ║
  ║        W_V¹  ║    ║        W_V²  ║    ║        W_V³  ║
  ║              ║    ║              ║    ║              ║
  ║ ┌──────────┐ ║    ║ ┌──────────┐ ║    ║ ┌──────────┐ ║
  ║ │ Scaled   │ ║    ║ │ Scaled   │ ║    ║ │ Scaled   │ ║
  ║ │   Dot-   │ ║    ║ │   Dot-   │ ║    ║ │   Dot-   │ ║
  ║ │ Product  │ ║    ║ │ Product  │ ║    ║ │ Product  │ ║
  ║ │Attention │ ║    ║ │Attention │ ║    ║ │Attention │ ║
  ║ └────┬─────┘ ║    ║ └────┬─────┘ ║    ║ └────┬─────┘ ║
  ║      │       ║    ║      │       ║    ║      │       ║
  ║ learns:      ║    ║ learns:      ║    ║ learns:      ║
  ║ subject-verb ║    ║ word meaning ║    ║ nearby-word  ║
  ║ agreement    ║    ║ similarity   ║    ║ relationships║
  ╚══════╤═══════╝    ╚══════╤═══════╝    ╚══════╤═══════╝
         │  head₁ ∈ ℝⁿˣ⁽ᵈ/ʰ⁾ │  head₂            │  head₃
         └───────────────────┼───────────────────┘
                             ▼
              ┌──────────────────────────────┐
              │    CONCATENATE all heads      │
              │  [head₁ ║ head₂ ║ head₃]     │   ∈ ℝⁿˣᵈ_model
              └──────────────┬───────────────┘
                             ▼
              ┌──────────────────────────────┐
              │   Final linear projection W_O │   blends info from all heads
              └──────────────┬───────────────┘
                             ▼
              ┌──────────────────────────────┐
              │   Multi-Head Attention Output │   ∈ ℝⁿˣᵈ_model (same shape as input)
              └──────────────────────────────┘

Калі чыніцься праца галавак

Аналізы навучаных модэляў паказалі наявнасць спецыялізаваных галавак. Дзеянне каляк, якія стараюцца адстаўляць сінтаксіс — напрыклад, зусімленне падмета і вербы, а таксама атрыбуты, прыўязаныя да іменаў. Іншыя каляк працуюць на вялікіх адстанях, павяязываючы займеннікі з іх праменамі. Ешчае каляк маюць локальную дзеяннё і фокусуюцца на суседніх словах і патэрнах біграм. Дзеянне каляк, якія фіксуюць ступень адстані між токенамі, а таксама тые, якія выявляюць тэматычныя ролі, тое есць хто зрабіў шта для каго. Ніхто гэта не програмуе. Навучэнне адзякае за точныя прыказы, і сетка выявляе, што разпад працы між спецыялізаванымі галавакамі ёсць эфектываў.

Адзінакавасць тэй разы: гэтыя катагорыі ў большай часці выйшлі з работ па інтэрпрэтабельнасці меньшых модэляў. У вялікіх модэлях багато частак не можна чытальна адгледзець, і эксперыменты паказваюць, што такія модэлі часта вытрымваюць адсечку багато частак без значных втырок. Архітэктура дазволяе спецыялізацыю, але не гарантуе чыстых, для людзей чытальных раздэлэнняў.

Надаць словам адрэс

Сама атэнцыя вырахоўвае зв’язак між кожной парай токэнаў, але пры гэтым последоўнасць спрыймаецца як безпорадковы набор. Рэйтынг між будзь-якімі токэнамі a і b залежыць толькі ад ўжоўванага кантэнту, а не ад таго, калькі з іх являецца першым чы як далека яны адстояць адзін ад другога. Мова ў вялікай меры залежыць ад последоўнасці. Фразы „Слань куса чалавека“ і „Чалавек куса сланя“ маюць тыя ж словы, але значэнне ў іх працоўна разнае, а выраз „не ўсміхнёны“ значыць штось цалкам іншае, чым „усміхнёны не“. Паколькі трансфармер обрабоцоўвае всі пазіцыі паралельна, за замовчаннем нічога ў яму не кодуецца пра последоўнасць, таму пазіцыю трэба явна дадаць. Гэта і ёсць задача пазіцыйнага кодавання.

Уявіце саброўканне метадаў да кожнага будынку ў горадзе. Кожны з іх патрэбуе адрэсы, якая вказвае яго месца, паказвае абставітную пазыцыю (будынак 402 знаходзіцца поблізу 404) і працюе без падачы полнага плану горада загадзя. GPS-коордынаты чыста выкананяюць гэта задачэ. Кодаванне пазыцыі — гэта яго лінгвістычны адпаведнік: матэматычная коордыната, якая дадаецца к кожнаму прэдставленню слова.

Хвілі сінуса і косынуса

Першыя трансфармеры выкарыстоўвалі сінусоўскія функцыі, пры чым для кожной пары выразных вімераў існавала адна частота. Для пазыцыі pos і індэкса вімера k у вектар заполняюцься сінусы і косынусы значэння pos, раздзеленыя на ступеню 10000 і масштабаваныя па значэнню k. Памедлілі, нізкачастотныя хвілі паказваюць крупную пазыцыю, а швыя, высокачастотныя — тонкую пазыцыю; разам яны даўаюць кожнай пазыцыі унікальны «відблеск».

╔══════════════════════════════════════════════════════════════════════════╗
║                  SINUSOIDAL POSITIONAL ENCODING                         ║
╚══════════════════════════════════════════════════════════════════════════╝

GRID: exact values for a tiny d_model=8 - positions 0-4, dims 0-7
  (frequency denominators are 1, 10, 100, 1000 for dim-pairs 0,1,2,3)
         dim→  d=0    d=1    d=2    d=3    d=4    d=5    d=6    d=7
               sin    cos    sin    cos    sin    cos    sin    cos
  pos↓        ──────────────────────────────────────────────────────
  pos=0   │  0.000  1.000  0.000  1.000  0.000  1.000  0.000  1.000 │
  pos=1   │  0.841  0.540  0.100  0.995  0.010  1.000  0.001  1.000 │
  pos=2   │  0.909 -0.416  0.199  0.980  0.020  1.000  0.002  1.000 │
  pos=3   │  0.141 -0.990  0.296  0.955  0.030  1.000  0.003  1.000 │
  pos=4   │ -0.757 -0.654  0.389  0.921  0.040  0.999  0.004  1.000 │
          ↑ fast-changing          ↑ medium-changing  ↑ very slow
            (high frequency)         (mid frequency)    (low freq)
            unique per position      gradual shift      global structure
  WAVE PATTERNS (each row = one dimension across positions):
  dim 0 (sin): █ ▇ ▄ ▁ ▂ ▅ ▇ █ ▇ ▄ ▁  ← fast oscillation
  dim 2 (sin): █ █ ▇ ▇ ▆ ▅ ▄ ▃ ▂ ▁ ▁  ← medium oscillation
  dim 4 (sin): █ █ █ █ █ █ ▇ ▇ ▇ ▇ ▆  ← slow oscillation
  dim 6 (sin): █ █ █ █ █ █ █ █ █ █ █  ← very slow oscillation
  HOW IT'S USED: Added to the token embedding elementwise
  ┌─────────────────┐         ┌─────────────────┐         ┌──────────────────┐
  │  Token Embedding│         │ Positional Enc. │         │  Final Input x_t │
  │  "cat"          │         │  position = 2   │         │                  │
  │  [0.2, 0.8,     │         │ [0.9,-0.4,      │         │  [1.1, 0.4,      │
  │   0.1, 0.5,     │   +     │  0.2, 1.0,      │   =     │   0.3, 1.5,      │
  │   0.9, 0.3]     │         │  0.0, 1.0]      │         │   0.9, 1.3]      │
  │  (meaning)      │         │ (where in seq)  │         │ (meaning+position)│
  └─────────────────┘         └─────────────────┘         └──────────────────┘
  WHY SINUSOIDS?
  ✓ Each position gets a unique encoding across all dimensions
  ✓ Distance between nearby positions is consistent and learnable
  ✓ Can represent any position mathematically (unlike learned embeddings)
  ✓ Model can attend to relative positions via linear combinations

Ніжчы віміры швідко коліваюцца і фіксуюць дробове положэння, тады як вышэйшыя віміры змінююцца поволі і фіксуюць глобальны парадак. Вектор проста додаецца да эмбедынгу токена.

Фіксаваныя хвілі, навучаныя табліцы і ротацыя

Сінусоўскі прыемкі мае корысную матэматычную власць: кодаванне на пазіцыі pos+k ёст калінейным функцыям кодавання на пазіцыі pos. Таму вялікія зсувы прэдставлены ўніверсальна, што спрыяе лёгшаму запам’ятовванню пазіцыйных стосункоў.

Позыцыйяныя імбеддынгі, якія являюцься окрамленай табліцай з адным элементам па пазыцыі, як іх вікорыстоўвае BERT, ёсць простыяя, але не можуць экстраполаваць да пазыцыйяў, якія не бачыліся пад час трэнавання, тады калі сінусоіды ў прынцыпе можуць прэдставляць будзь-яю пазыцыю. Хоця так, сінусоіды не рашаюць пытання гэнералізацыі ў дужа дзяўялых кантэкстах цалкам. Мадэлі яшчэ страждаюць з серыямі, якія ў дзесяткі разоў дзяўялей за ўсі даныя для трэнавання, таму што самыя патэрны атэнцыі таксама должны гэнералізаваць да невідомых адстаней.

Мадэлі, такія як Llama, выкарыстоўваюць Rotary Position Embeddings, або RoPE. Перш чым вылічваюцца дзейсныя прарады, запіты і ключы роціруюцца на кут, прапорцыйны ўсёй іх пазіцыі. У дзейсным прарадзе запіта з аднай пазіцыі і ключа з іншай пазіцыі вялікі кут роціювання безпасэчна фіксуе ўзмоц зсуву. Выкарыстоўванне вялікага кута роціювання як явнага вхіднага даных для расчытку балу увагі, замест таго каб гэта было неявнае і выучанае за дапамой матрыц праектываціі, спрабоўвае падтрымаць дужа дзялёныя кантэксты.

Полная архітэктура

Цяпер можна склець усі элементы. На дыяграме паказана сучасная форма структуры з прыемам Pre-LayerNorm:

╔═══════════════════════════════════════════════════════════════════════════════════════╗
║             THE COMPLETE TRANSFORMER ARCHITECTURE  (Pre-LayerNorm, modern)            ║
╠═══════════════════════════════════════════╦═══════════════════════════════════════════╣
║            ENCODER  (×N layers)           ║            DECODER  (×N layers)           ║
╠═══════════════════════════════════════════╬═══════════════════════════════════════════╣
║                                           ║ ┌───────────────────────────────────────┐ ║
║                                           ║ │    Linear → Softmax → P(next token)   │ ║
║                                           ║ └───────────────────────────────────────┘ ║
║                                           ║                     ▲                     ║
║                                           ║ ┌───────────────────────────────────────┐ ║
║                                           ║ │           ⊕  Add  (residual)          │ ║
║                                           ║ └───────────────────────────────────────┘ ║
║                                           ║                     ▲                     ║
║                                           ║ ┌───────────────────────────────────────┐ ║
║                                           ║ │          FFN( LayerNorm(x) )          │ ║
║                                           ║ └───────────────────────────────────────┘ ║
║                                           ║                     ▲                     ║
║   Encoder output  →  K, V  (to decoder)   ║ ┌───────────────────────────────────────┐ ║
║                     ▲                     ║ │           ⊕  Add  (residual)          │ ║
║ ┌───────────────────────────────────────┐ ║ └───────────────────────────────────────┘ ║
║ │           ⊕  Add  (residual)          │ ║                     ▲                     ║
║ └───────────────────────────────────────┘ ║ ┌───────────────────────────────────────┐ ║
║                     ▲                     ║ │            Cross-Attention            │ ║
║ ┌───────────────────────────────────────┐ ║ │              Q ← decoder              │ ║
║ │          FFN( LayerNorm(x) )          │ ║ │         K, V ← encoder output         │ ║
║ └───────────────────────────────────────┘ ║ └───────────────────────────────────────┘ ║
║                     ▲                     ║                     ▲                     ║
║ ┌───────────────────────────────────────┐ ║ ┌───────────────────────────────────────┐ ║
║ │           ⊕  Add  (residual)          │ ║ │           ⊕  Add  (residual)          │ ║
║ └───────────────────────────────────────┘ ║ └───────────────────────────────────────┘ ║
║                     ▲                     ║                     ▲                     ║
║ ┌───────────────────────────────────────┐ ║ ┌───────────────────────────────────────┐ ║
║ │       Multi-Head Self-Attention       │ ║ │    Masked Multi-Head Self-Attention   │ ║
║ │   ( on LayerNorm(x), bidirectional )  │ ║ │      ( on LayerNorm(x), causal )      │ ║
║ └───────────────────────────────────────┘ ║ └───────────────────────────────────────┘ ║
║                     ▲                     ║                     ▲                     ║
║ ┌───────────────────────────────────────┐ ║ ┌───────────────────────────────────────┐ ║
║ │   Input Embedding + Positional Enc.   │ ║ │   Output Embedding + Positional Enc.  │ ║
║ └───────────────────────────────────────┘ ║ └───────────────────────────────────────┘ ║
║                     ▲                     ║                     ▲                     ║
║ ┌───────────────────────────────────────┐ ║ ┌───────────────────────────────────────┐ ║
║ │    Source: "The cat sat on the mat"   │ ║ │  Target (shifted): <BOS> "Le" "chat"… │ ║
║ └───────────────────────────────────────┘ ║ └───────────────────────────────────────┘ ║
╠═══════════════════════════════════════════╩═══════════════════════════════════════════╣
║ Data flows UPWARD (▲). Each sub-layer is a residual branch over a                     ║
║ LayerNorm-ed input:   h = x + SubLayer( LayerNorm(x) )                                ║
║ The encoder's output (K, V) flows into the decoder's Cross-Attention.                 ║
╚═══════════════════════════════════════════════════════════════════════════════════════╝

Трансфармэр складаецца з двух галоўных частэй — анкодэра і дэкадэра. У первасным артыкуле кожна з іх мела 6 шароў, 8 галавак атэнцыі і значэнне d_model равнае 512.

Анкодэр: разумеўце ў кантэксце

Анкодэр чытае вхідную последоўнасць і стварае кантэкстуальна адражаную версію кожнага токена, фіксуючы не тое, што значыць слова ў ізоляцыі, а тое, што яно значыць у конкрэтным рэчэнні. Ён выкарыстоўвае двунаправленую самаатэнцыю, таму кожны токен можа бачыць кожны іншы токен з обох бакоў. Саме так рашаецца вышэйзгаданая неодназначнасць слова „bank“: мадэль адразу бачыць „deposit“ і „money“.

Шась ляёў кодэра працуюць абоўязкова па спрабе, кожны з яных удосконаляючы атрыбуты прэдставлення. Раннія ляёўкі фокусуюцца на сынтаксі, такой як парадак слоў і часткая роля. Серэднія ляёўкі обрабоцваюць болей складную граматычную структуру. Пазнейшыя ляёўкі фіксуюць высокага рангу значэння, такія як тыпы аб’ектаў, структура падзеяў і прагматыка. Самэ гэта розпадзеў на ляёўкі ёсць прычыной таго, чаму метод перанесення навыкаў работае так добра: тонкая налаштовка пераважна зміняе пазнейшыя ляёўкі, тады калі загальныя лінгвістычныя шаблоны ў ранніх ляёўках застаюцься корыстнымі для розных задач.

Дэкадэр: стварэнне тэксту з выкарыстаннем памяці

Дэкадэр выдае токены выходу по аднаму, автарэгрэсіўна. Кожны новы токен залежыць ад усьго, што ўжо было выдана, плюс ад усьго закодаванага вхіднага тэксту. У яго ёсць тры падляёўкі.

Першым ёсць маскаваная самаатэнцыя, якая таксама называецца каузальной атэнцыяй. Дэкадэр можа бачыць толькі тые токены, якія ён ужо створыў, што забезпечваецца за дапамогою каузальнай маскі. Значэнні, якія знаходзяцца вышэй за дыягоналю, перад вычысленнем функціі softmax станавяцца равнымі мінус безканечнасці, чыяму спрыяе тое, што будучыя токены стаюць невіднымі. Тады працэс адучэння паўнасообразны прынцыпу інферэнса, адтолькі ўмоўкі мусі прыпускаць прыказванне кожнага токена на адной лэжачый у основе кантэкст.

╔══════════════════════════════════════════════════════════════════════════╗
║     DECODER SELF-ATTENTION: Causal (Autoregressive) Masking             ║
║     "Each token can only attend to itself and tokens before it"         ║
╚══════════════════════════════════════════════════════════════════════════╝

Tokens:  [The]   [cat]   [sat]   [on]    [mat]
             t₁      t₂      t₃      t₄      t₅
  ATTENTION SCORE MATRIX  (row = query,  col = key)
              KEY →    t₁      t₂      t₃      t₄      t₅
  QUERY ↓             "The"  "cat"   "sat"   "on"    "mat"
                      ──────────────────────────────────────
  t₁ "The"   │         ✓      ✗       ✗       ✗       ✗
  t₂ "cat"   │         ✓      ✓       ✗       ✗       ✗
  t₃ "sat"   │         ✓      ✓       ✓       ✗       ✗
  t₄ "on"    │         ✓      ✓       ✓       ✓       ✗
  t₅ "mat"   │         ✓      ✓       ✓       ✓       ✓
  ✓ = ALLOWED  (score kept, participates in softmax)
  ✗ = MASKED   (score → −∞, becomes 0 after softmax)
  When generating t₃ "sat":
  Raw scores:     [ 2.1   3.4   1.8   -∞    -∞  ]
  After softmax:  [ 0.18  0.68  0.14   0     0  ]
                                              ↑
                              future tokens are invisible
  WHY IS MASKING NECESSARY?
  ┌──────────────────────────────────────────────────────────┐
  │  TRAINING: We feed the whole target sequence at once     │
  │  (teacher-forcing). Without masking, t₃ could "cheat"   │
  │  by looking at t₄ and t₅ - the answers it should        │
  │  be predicting.                                          │
  │                                                          │
  │  INFERENCE: We generate one token at a time anyway,      │
  │  so future tokens literally don't exist yet. Masking     │
  │  makes training match inference behavior exactly.        │
  └──────────────────────────────────────────────────────────┘

Другій элемент — крос-атэнцыя, якая выступае ў ролі мосту межа адэнцэрам і дэкодэрам. Запіты падаюць з дэкодэра і выражаюць тэкушчы стан генеравання, тады як ключы і значэнні падаюць з адэнцэра і выражаюць тое, што было сказана ў вхідным даныя. Пераклад працюе так: калі дэкодэр генеруе французское слова „chat“, ён запрашвае прэдставленне цэлага англійскага выразу з адэнцэра, і крос-атэнцыя надае большую вагу слову „cat“.

Трэцій элемент — сетка з падачай наперад, якая выполняе тую ж функцыю, што і сетка в адэнцэрэ, і якая будзе рассмотрэна ніжэй.

Тры групы, створаныя з тых сабе элементаў

Паруванне адэнцэра і дэкодэра — тое ўсьго адна з можлівасцей выкарыстоўвання гэтых компонентаў, а разныя задачы выклікаюць разныя способы ўпорадкування:

| Model | Architecture | Training Objective | Best For |
|-------|-------------|-------------------|----------|
| **BERT** | Encoder-only | Masked Language Modeling | Understanding: classification, NER, QA |
| **GPT** | Decoder-only | Next token prediction | Generation: writing, coding, conversation |
| **T5** | Encoder-Decoder | Text-to-text seq-to-seq | Transformation: translation, summarization |
╔══════════════════════════════════════════════════════════════════════════════════════╗
║                    BERT  vs  GPT  vs  T5: Architecture Families                    ║
╠══════════════════╦═══════════════════════════╦═════════════════════════════════════╣
║       BERT        ║           GPT              ║              T5                     ║
║  Encoder-Only     ║      Decoder-Only          ║      Encoder + Decoder             ║
╠══════════════════╬═══════════════════════════╬═════════════════════════════════════╣
║ ATTENTION:        ║  ATTENTION:                ║  ATTENTION:                         ║
║ t₁ ● ● ● ●       ║  t₁ ●                      ║  Encoder: ● ● ● ●  (bidir)          ║
║ t₂ ● ● ● ●       ║  t₂ ● ●                    ║           ● ● ● ●                   ║
║ t₃ ● ● ● ●       ║  t₃ ● ● ●                  ║  Decoder: causal +                  ║
║ t₄ ● ● ● ●       ║  t₄ ● ● ● ●                ║           cross-attn to encoder     ║
║ (bidirectional)   ║  (causal/left-only)        ║                                     ║
╠══════════════════╬═══════════════════════════╬═════════════════════════════════════╣
║ BEST FOR:         ║  BEST FOR:                 ║  BEST FOR:                          ║
║ ✓ Classification  ║  ✓ Text generation         ║  ✓ Translation                      ║
║ ✓ NER / tagging   ║  ✓ Completion              ║  ✓ Summarization                    ║
║ ✓ Sentence embeds ║  ✓ Chat / dialogue         ║  ✓ Question answering               ║
║ ✓ Reading comp.   ║  ✓ Code generation         ║  ✓ Any seq-to-seq task              ║
╠══════════════════╬═══════════════════════════╬═════════════════════════════════════╣
║ EXAMPLES:         ║  EXAMPLES:                 ║  EXAMPLES:                          ║
║ BERT, RoBERTa     ║  GPT-4o, Claude 4,         ║  T5, BART,                          ║
║ DeBERTa           ║  Llama 4, Gemini 2.5       ║  mT5, FLAN-T5                       ║
╚══════════════════╩═══════════════════════════╩═════════════════════════════════════╝

BERT чытае тэкст у обох направленнях і падходзіць для задач розумеўння. GPT генеруе тэкст з левага на правы пад дэйствам цалявага маскавання. T5 выкарыстоўвае цэлую архітэктуру для структураванага ператварэння аб’ектаў з аб’екта ў аб’ект. Выбір між імі залежыць ад падбору архітэктуры пад конкрэтную задачу, а не ад таго, калькі з іх лепшы. Корача кажучы, кодэр стварае двунаправленыя кантэкстуальныя прэдставленні, дэкодэр генеруе тэкст аутарэгрэсіўна пад дэйствам цалявага маскавання і межавага атэнцыі, а разныя часткі архітэктуры налаштовваны для розумеўння, генеравання і ператварэння.

Дапаможныя элементы

Атэнцыя і шар падаў-выхода прывлекаюць большую частку увагі, але ўсё ж тры іншыя элементы запобiegаюць занепаду глыбокіх трансфармэроў пад час навчання: самыя сеткі падаў-выхода, нормалізацыя шароў і залішковыя з’ўязкі.

Сеткі падаў-выхода: час обработкі кожнага токена

Пасля кожнага шара атэнцыі ў кожным блаке следуе сетка з падачай напраму за пазіцыяй. Вектар кожнага токена праходзіць праз тую ж двухшаровую сетку тыпу MLP, якая прыменяецца окрэма да кожнай пазіцыі: яе прадуваюць па W1, дадаюць скарыню, прыменяюць нелінейную функцыю GeLU, пасля чаго прадуваюць па W2 і дадаюць ўтрохтуючую скарыню. W1 перадае даны з розміру d_model у чатыры разы большы розмір, а W2 — назад. У первісных размерах гэта 512, якія расшыруюцца да 2048 і зменшуюцца да 512, што дае сетцы можлівасць зберагаць і ператвараць інфармацыю, яку сама атэнцыя не можа зафіксаваць.

Ключовым выразам ёсць «за пазіцыяй», адколі шар обрабоцвае кожны токен незалежна. Атэнцыя ёсць механізам комунікацыі, калі токены размовляюць адзін з другім, а сетка з падачай напраму — механізам вычыслаў, калі кожны токен обрабоцвае тое, што ён збірае.

Geva і яго сааверы (2021) выявілі, што гэтыя слоі паводзяцца адносна як пам’яткі тыпу «ключ-значэнне», і можна выявіць адзінаковыя нейроны, якіе актывуюцца для певных семантычных канцэпцый. Калі мадэль мовы «знае», што Парыж — століца Франціі, гэтае зв’язанне пераважна знаходзіцца ў вагах пры перэдачы сігналу. Гэта пояснюе два явышчы: тонкая наладка можа адкорэгаваць фактычныя знання, таму што ўсунець гэтыя вагі; а генераванне з падкрэпленнем за дапамогою выкарыстоўвання інформацыі працюе, таму што факт размешчаецца ў вікні кантэксту, дзе увага можа да яго безпосерэдна дасягнуць.

Рэзыдуальныя з’ўязкі

Градыянты, які праходзяць у зворачным напрамку праз глыбокую сетка, зменшаюцца праз многія шары. Рэзыдуальныя з’ёднання, якія таксама называюцца з’ёднанням прыпуску, чыстаўаюць гэтую проблему: выходны сігнал падшара ёсцца рэзультатам гэтага падшара плюс яго сопны вхід. Тады шару трэба выучыць толькі змяну, тое самае рэзыдуальную частку, а не весь мапавання. Гэта стварае «шосе», па якому градыянты праходзяць працоўна назад, абходзячы будзь-кі шар, і самэ гэта дазволяе сучасным трансфармацорам складваць 96 або больш шароў без таго, каб трэніраванне зламалася.

Нормалізацыя шароў: контроль над масштабамі

Лейерна нормалізація стандартызуе вектор актываціі кожнага токена до значэння нулявоі сярэдняі і одынічноі дысперсіі, пасля чого застосовуецца навчэній масштаб гамма і зсув бета. Статыстыка отрымуецца з характэрыстык d_model окрэмого токена: серэдня значэння — гэта проста арыфметычна серэдне яго элементаў, а дысперсія — гэта серэдне квадратычне відхілення ад ціеі сярэдняі. Мала константа епсілон, якая зазвічай дорывнюе 10 у мінус 5 ступенях, вводыцца під квадратній корынь, шчоб унікнуты дылення на нуль. На відміну ад батч-нормалізаціі, обчыслення віконуецца для кожнага токена окрэмо, а не для усяго батчу, што підходыць для послідовностэй рызноі довжыні.

Сучасній блоковій патэрн

У первыяй студзіі пасля дадзення залішку быў выкарыстоўваны LayerNorm, вядомы як Post-LN. Практычна кожны сучасны мадэль — ад GPT-2 і GPT-3 да Llama, а таксама практычна всі мадэлі, навучаны з 2020 года, — выкарыстоўвае Pre-LayerNorm і нормалізуе даныя перад кожным падшарэдам. Pre-LN дазволяе стабільнейшае навчанне і не выклікае патрэбы ў прадзеянні шчылынкі навчання.

Кожны блок пасля нормалізацыі дадзеных додае галузь атэнцыі і галузь фід-фарвард. Першы промежуточны стан — гэта вхідныя даны плюс атэнцыя, застосаваная да нормалізаваных дадзеных, а другі стан — гэта той жа самы стан плюс сетка фід-фарвард, застосаваная да ўсё тады ж нормалізаванай версіі дадзеных. Аналіз коду будзь-каго сучаснага трансфармера паказвае, што LayerNorm знаходзіцца перад атэнцыяй і перад крокам фід-фарвард. Павтарыце гэты блок N разоў, пры чым значэнне N можа быць 6, 12, 24, 96 або больш, залежна ад размеру модэлі, і тады будзе створэны весь трансфармер.

Механізм адаптавання ўвагі — гэта гэяя ідэя. Шырокі спектар дапаможных элементаў — гэта інжынерныя рашэння, якія дазволяюць гэйай ідэі працаваць. Слойы з перэдачай сігнала з падачы ў выход дазволяюць выконваць вычысленні для кожнага токена, якія зберагаюць фактычныя асоцыяціі; залішковыя шляхі даюць градыентам маршрут углублення, а функцыя Pre-LN падтрымляе стабільнасць актывацыяў. Разам яны дазволяюць ствараць структуру з дзесяткаў блакоў.

Шлях вырачэння рэчы

Одна павна праця выглядае так: токенізацыя, укладка токенаў у вектары, дадаванне інформацыі пра пазіцыю, кодавання, дэкадаванне аднаго токена за раз, пасля чаго выконуецца проекція на словнік. Наступныя дыяграмы паказваюць, як перакладаецца фраза „Hello world“:

╔══════════════════════════════════════════════════════════════════════════╗
║           END-TO-END DATA FLOW: "Hello world" → Translation             ║
╚══════════════════════════════════════════════════════════════════════════╝

STAGE 1: Tokenization
  ┌─────────────────────────────────────────────────────────────────┐
  │  Raw text:   "Hello world"                                      │
  │                   ↓  Tokenizer (BPE / WordPiece)               │
  │  Token IDs:  [ 7592,  2088 ]    ← integers into vocabulary      │
  └──────────────────────┬──────────────────────────────────────────┘
                         ↓
  STAGE 2: Embedding Lookup   e_t = E[t]  ∈ ℝ^512
  ┌─────────────────────────────────────────────────────────────────┐
  │  7592 → [0.21, -0.54, 0.88, ...]  "Hello"                      │
  │  2088 → [0.67,  0.12,-0.34, ...]  "world"                      │
  └──────────────────────┬──────────────────────────────────────────┘
                         ↓
  STAGE 3: Add Positional Encoding   x_t = e_t + PE(t)
  ┌─────────────────────────────────────────────────────────────────┐
  │  embedding + PE = input vector carrying BOTH meaning AND order  │
  └──────────────────────┬──────────────────────────────────────────┘
                         ↓
  STAGE 4: Encoder Stack  (× N layers)
  ┌─────────────────────────────────────────────────────────────────┐
  │  ╔═══════════════════════════════════╗                          │
  │  ║  Each Encoder Layer:              ║  × 6                    │
  │  ║  h₁ = x + Attn(LayerNorm(x))     ║                          │
  │  ║  h₂ = h₁ + FFN(LayerNorm(h₁))   ║                          │
  │  ╚═══════════════════════════════════╝                          │
  │  After 6 layers: rich contextual reps - "Hello" knows context  │
  └──────────────────────┬──────────────────────────────────────────┘
                         ↓ (K, V flow into decoder cross-attention)
  STAGE 5: Decoder Stack  (generates tokens autoregressively)
  ┌─────────────────────────────────────────────────────────────────┐
  │  Step 1:  <BOS>           → Decoder → predict "Hola"           │
  │  Step 2:  <BOS> "Hola"    → Decoder → predict "mundo"          │
  │  Step 3:  <BOS> "Hola mundo" → Decoder → predict <EOS>         │
  │                                                                 │
  │  Each step: ① Masked self-attention on generated tokens         │
  │             ② Cross-attention: Q←decoder, K,V←encoder          │
  │             ③ LayerNorm → FFN → residual                       │
  └──────────────────────┬──────────────────────────────────────────┘
                         ↓
  STAGE 6: Output Projection & Softmax
  ┌─────────────────────────────────────────────────────────────────┐
  │  hidden state → W_vocab → logits over 50k vocab items          │
  │               → softmax → probability distribution              │
  │               → sample or argmax → next token                  │
  └──────────────────────┬──────────────────────────────────────────┘
                         ↓
               "Hola mundo"  ✓

Як артыкул працы па перакладзе стала модэлю мовы

У ёй опісваецца цэлая архітэктура, але як дыяграма машыннага перакладу ператворылася ў сістэмы, якія пішу эсэі, код і рашаю складныя задачы? Короткая адказ — масштаб.

У прыказанай ніжэй хроналагічнай шкале паказаны пераходы ад трансфармера 2017 года да сучасных перэдовых модэляў:

YEAR  MODEL             PARAMS        KEY DEVELOPMENT
────────────────────────────────────────────────────────────────────────────────
2017  Transformer       65M           "Attention Is All You Need" published
2018  GPT-1             117M          First successful generative pre-training
2019  GPT-2             1.5B          Improved fluency; staged release
2020  GPT-3             175B          Few-shot in-context learning emerges
2022  ChatGPT           175B+         InstructGPT + RLHF = aligned conversational AI
2023  GPT-4             undisclosed   Multimodal input + stronger reasoning
2024  GPT-4o            undisclosed   Natively multimodal, faster & cheaper (May)
2024  o1                undisclosed   "Reasoning" model: thinks before answering (Sep)
2025  o3 / o4-mini      undisclosed   Stronger reasoning, tool use, long-horizon
2025  Claude 4          undisclosed   Anthropic: Opus 4 / Sonnet 4 (May)
2025  Gemini 2.5        undisclosed   Google: 1M-token context, multimodal
2025  Llama 4           undisclosed   Meta: open weights, up to 10M-token context
2026  GPT-5 series      undisclosed   OpenAI flagship (GPT-5.4 / 5.5); 272K-1M ctx
2026  Gemini 3.x        undisclosed   Google: frontier reasoning; 1M context
2026  Claude 5 family   undisclosed   Anthropic: Opus 4.8, Sonnet 5, Fable 5
2026  Grok 4.x          undisclosed   xAI frontier line (Grok 4.5, Jul 2026)

(Every one is the same core transformer from 2017 — scaled and refined, not replaced)

Асалітная архітэктура практычна не зменілася между GPT-1 і сучаснымі перэдовымі мадэлямі. Змяніліся наступныя аспекты:

  1. Масштаб, тое ўзначае большыя параметры, большыя даны і большыя вычысловыя рэсурсы.
  2. Супараднасць, дзе за дапамой падкрэплення навыку на адзінаках людзей мадэлі становяцца корыстнымі і безпечнымі.
  3. Настроюванне па інструкцыях, якое навчае мадэлі следаваць вказванням, а не проста продовжваць тэкст.
  4. Навчанне на абдумаванні, дзе вялкамасштабная методыка падкрэплення навыку прыменяецца да пераканальваных задач. Гэта ўскладненне, якое лежыць у основе модэлей абдумавання, такіх як серыя o-модэляў OpenAI і рэжымы расшырэнага абдумавання, якія сёньня ўжо ёсць стандартам у Claude, Gemini і іншых, якія перад тым, калі адпаведзаць, выканаюць дадатковыя вычысловыя задачы для абдумавання.

Здольнасці, якія, здаецца, актывацуюцца

Калі модэлі раслі, адбылася нечаканая змена. Адзінкія спроможнасці не падвайваліся поступова, а здавалася, што растлі толькі праз падыход да адзінакоўых розмераў. Багатыя арыфметычныя вычысленні практычна не існавалі пры менш чым 10 мільярдах параметраў, але сталі надзейнымі пры 100 мільярдах. Разумаванне па ланцоўкі мыслей практычна не было, як толькі модэль не была дастаткова большая і яе не прасілі пра гэта. Генераванне коду значна падбылося пры масштабе вышэй за GPT-3. Нічога з гэтага не было запрограмавана — гэта проста адбылася сама сабою.

Спрэчаецься, насколькі рэальна глыбока шчыльнасць гэтых прыскок. Шырокаа практыкуемая аналіз 2023 года, якую практыкуюць Шэффер і ўзгалі колегі пад назвай „Чы гэтыя новыя здольнасці большых мовных модэляў — міраж?“ паказала, што дзеякія здаўнія рэзкія змены часткова вынікаюць з самай метрыкі. Оцэнка задання як „усё або нічога“, калі як гэта робіцца за прынцыпам точнасці падабенства, можа ператворыць стойкі, поступовы прогрэс у тое, што выглядае як рэзкі прыскок, тады калі ж метрыка, якая відображае становы прогрэс, паказвае рэальную стойкую дынаміку. Практычны аспект застаецца актуальным, адколі большыя модэлі можаць выконваць задачы, якія немагчымы для малых, але конкрэтныя значэння прагаў трэба спрыймаць як апрыксунак, а не як строгія фізычныя законамы.

Мэтая трэніравання кожнага модэлю у стылі GPT — гэта тая ж простая задача: праўдападобнае вычысленне наступнага токэна. Разумаванне, стварэнне коду, багатыяязычнае разумеўанне і творчая пісьменніцтва ніколі не трэнуюцца як окрэмыя аспекты. Яны выклікаюцца тады, калі модэль становіцца крашчай у праўдападобнай адгадцы наступнага токэна, за адналіквенных умовах: большым, высокакалітэтным, разнарадовым корпусам і модэлю, дастаткова большай, каб магчыма было зберагчы неабходныя шаблоны. Самэльга дыячынікі называюць гэты мэтай адвалююча простым. Мэтай сапраўды просты, але тое, што модэль павінна выучыць, каб добра яго выканаць, — не проста.

Вікна кантэксту як рабочая памяць

Для модэлі памяц працы — гэта аператыв кантэксту: максымальная колькасць токэнаў, якія ён можа прыjąць за адну процэсуру обработкі. Развіцце ў гэтым аспекты было рошальным. GPT-2 у 2019 годзе мог працаваць з 1,024 токэнаў, а GPT-3 у 2020 годзе — з 2,048. GPT-4o у 2024 годзе досяг 128,000 токэнаў. Да серэдзіны 2026 году прагрызкі ў можлівасцях значна расшырыліся: серыя GPT-5 ад OpenAI працуе з 272,000 токэнаў як стандарт і прыблізна з мільйонам праз API; Claude ад Anthropic і Gemini 3 ад Google таксама працуют з мільйонам токэнаў, а Llama 4 Scout ад Meta працуе з да 10 мільйонаў токэнаў, што адпавядае прыблізна 15,000 старонкам. Гэтыя цыфры продовжаюць растаць з кожным паколеннем.

Большы аператыв кантэксту мае значэнне, таму што ён дазволяе аналізаваць цэлы файл коду, а не толькі фрагменты, падтрымляць цэлеспрамованасць размовы пра многія крокі, ствараць апускі цэлых дакументаў і выкарыстоўваць багатыя проміжныя рэзультаты для багаташагоўневага аналізу.

Есць адзін прыём. Вычысленне цэлай матрыцы атанціі, якая з’ўязвае кожны токен з кожным іншым токенам, у процэсе навчання выклікае патрэбу ў часе і памяці прыблізна O(n квадрат). Падвоўкі дужыны кантэксту прыводзяць да чатырохкратнага збільшэння як часу, так і памяці. Пад час выкарыстоўвання мадэлі кэшаванне KV-даных зменшае вычысленні на кожны крок, але памяць продовжае растаць лінейна з дужыной кантэксту. Гэты квадратны бутлнэк у навчанні ёсць актыўной тэмай даследжэння. Розробляюцься методы такія, як рэдкая атанція, атанція з кантэйнерамі, якая выкарыстоўваецца ў Mistral і іншых эфектывных рашэннях, Flash Attention (точная атанція з ефектывным выкарыстоўванням памяці) і лінейныя апрыксіматы, якія прагнуць зменшыць вітраты.

Што стоіць на вершыне фундаменту

Атанція, QKV, калькі з несколькіма галавамі, позыцыйны кодуванне і структура энкодэр-дэкадэр ёсць інфраструктурой, і прычына ўвучання іх — гэта все, што будуецца на ўсім гэтым.

Генератыўскі ІІ — гэта павтарэнне працы з прагнозавання наступнага токена

Кожны аплікэцыя для генеравання, у сутнасці, ўскладнены тым жа цыклам, які выконваецца знова і знова:

Prompt: "Write a poem about autumn"
    ↓
Model predicts most likely next token: "The"
    ↓
Prompt + "The" → predicts: "leaves"
    ↓
Prompt + "The leaves" → predicts: "fall"
    ↓
... continues until <end-of-sequence> token predicted

Такы падход пазбярэйшча розныя прыемы:

  • Галюцінацыя. Мадэль прагнозуе верагодныя токены і не запошчае факты з базы дадзэнняў. Калі ёсць можлівысць выдатка правдападобнага, але некорэктнага токена, гэта можа выйсці.
  • Чаму кантэкст так важны. У кожным кроку генеравання прыкладзваецца увага да всіх элементаў кантэкстнага вікна, таму все, што прадаўаецца ў запіт, вплывае на вычысленне ваг увагі і, такім чынам, на рэзультат.
  • Якая тэмпература? Тэмпература прыкладываецца да выходных лоджытов, тое ўзраўненняў па всім слоўніку, прытаму як толькі пачынаецца выбір. Вышэйшая значэнне спявольна розпыляе распад, таму больш ліктавак стаюць правдападобнымі, а выход разнараджаецца болей; ніжэйшая значэнне концентруе верыгоднасць на найбольш правдападобным ліктаваку і робіць выход болей дэтэрміністычным. Гэта — аднае, а не тое ж самае, што фіксаваная масштабаванне 1/sqrt(d_k) у рамках атэнцыі.
  • Навчанне ў кантэксце: атэнцыя для выкарыстання інфармацыі

    Адзін з найболей выражаных спактэў большых трансфармэроў — гэта навчанне ў кантэксце, калі мадэль прыстосоўваецца да новага завадзя з прыкладаў, указаных у запытанні, без якога-лібо додатковага налаштавання. Гэты механізм паслужае падтверджэннем таго, што было расказана вышэй. Прыклады, якія вікорыстоўваюцца, займаюць певныя пазіцыі ў „вікні“ апрацоўкі даных. Калі мадэль обрабоцвае тэстовы прыклад, елементы даных гэтага прыклада пораўнююцца за дапамогою скалярнага добутку з елементамі кожнага паканальнага прыклада, уключаючы пары прыкладаў. Паколькі прыклады маюць аднаковую структурную схему з тэстовым прыкладам, ўсі іх елементы добра падходзяць адно да другога, і ўсе іх значэнні атрымуюць высокія вагі. Атэнцыя буквальна являе сабою механізм выкарыстоўвання інформацыі з прыкладаў, і самэ гэта прычына таго, што структура запытання, праз свой вплыв на патэрны атэнцыі, змінюе выходны рэзультат.

    Агенты: трансфармэр як механізм разумовых вычынэнняў

    Агенты AI — гэта сістэмы, якія самостоятэльна дзеляць задачы, запускаюць інструменты, адаптуюцься на падставе адзінакоў і досягаюць цялей праз адносна больш чым аднае крока. У 2023 годзе яны былі толькі об’ектам даследжэння. Чыразаць яны сталі продуктамі, такімі як Claude Code, GitHub Copilot, Cursor і Devin, якія ўсё чашчэ вікорыстоўваюцься распрацоўшчыкамі ў павсядневным жыцці. Кожны серйозны агент мае трансфармер у своім ядрэ.

    ╔══════════════════════════════════════════════════════════════════════════════╗
    ║           THE CONTEXT WINDOW AS AGENT WORKING MEMORY                       ║
    ╚══════════════════════════════════════════════════════════════════════════════╝
    
    TIME ──────────────────────────────────────────────────────────────────────▶
      ┌──────────────┬──────────────┬────────────────┬────────────┬──────────────┐
      │ SYSTEM       │ USER         │ AGENT          │ TOOL       │ AGENT        │
      │ PROMPT       │ MESSAGE      │ THOUGHT        │ RESULT     │ RESPONSE     │
      │              │              │ (reasoning)    │            │              │
      │ "You are a   │ "What is     │ <think>        │ {"temp":   │ "The current │
      │  weather     │  the weather │  I need to     │  22,       │  temperature │
      │  assistant   │  in Paris    │  call the      │  "unit":   │  in Paris    │
      │  ..."        │  today?"     │  weather API   │  "C",      │  is 22°C and │
      │              │              │  for Paris...  │  "cond":   │  cloudy."    │
      │              │              │ </think>       │  "cloudy"} │              │
      │ ~200 tokens  │  ~15 tokens  │  ~80 tokens    │ ~40 tokens │  ~25 tokens  │
      └──────────────┴──────────────┴────────────────┴────────────┴──────────────┘
            ▲               ▲               ▲               ▲             ▲
            └───────────────┴───────────────┴───────────────┴─────────────┘
                                            │
                                At each generation step:
                                Full self-attention runs over the
                                ENTIRE context simultaneously.
                                Cost: O(n²) in total context length.
      WHAT THIS MEANS FOR AGENTS:
      ✓ Tool results are just tokens  - the model attends to them like any text
      ✓ Reasoning traces are visible  - chain-of-thought shapes next generation
      ✓ Long task history             - "memory" without any separate mechanism
      ⚠ Context fills up              - very long loops need summarization/offload
      ⚠ O(n²) attention cost         - longer context = quadratically more compute
      KEY INSIGHT: There is no "working memory" separate from the context.
      The context window IS the agent's entire cognitive state.
    

    Для агента вікна ўособлівае плоскае, упорадкованае буфера токенав, і кожны крок генеравання абрацоўвае ўсё, што знаходзіцца ў ям, таму ўсё, што адбылася, застаецца у досяжнасці пакуль не будзе досягнута меры. Вікна — гэта рабочая памяць агента, увага — яго механізм разумавання, а цыкл наступнага токена — яго цыкл дзеяння. Для агентскага ІІ не была патрэбна новая архітэктура; патрэбна была толькі усведамленасць таго, што трансфармер, пры даскладзе, якога яму хватала, ужо мог утрымваць агентскія якосці.

    У практыці агенты, створэные у 2026 році, рыдко вікорыстовуюць лішэ саме вікно для апрацоўкі інформацыі. Шчоб ефектывно віконуваты трывалі задачы, яны додаюць зовнішню памяць: файлі для тымчасового зберыгання даных, шары для пошуку інформацыі чы базі знань, які агент постыйно оновлюе. Гэта не суперэчыць папярэднім тверджэнню, оскількі зовнішня памяць вплівае на мадэль лішэ шляхом іі зчытування назад у вікно. Яна розшыруе буфер, не замінюючы яго, а увага трансформера до гэтага кантэксту залішаецца едынім місцем, дэ відбуваецца апрацоўка інформацыі.

    У якому напрамку розвіваюцца досліджэння

    Ефектывнісць трансформерыв підпорадковуецца перэдбачуванім законам залежносты ад колькасці параметрыв, даных для навчання і обчыслювальніх рэсурсів, што дае досліднікам чыткій план розвітку. Розвіток галузі відбуваецца у кількох напрамках:

    • Ефектывні архітэктуры, які зменшуюць квадратычні вітраты на апрацоўку інформацыі завдзякі тэхналогіям Flash Attention, розрыджэноі увагі і лінійноі увагі.
  • Сумешанне экспертаў – актывацыя толькі адпаведных частак сеткі для кожнага токена.
  • Лепшыя даны для трэніравання – дзе якосьць і разнаўтворанне маюць такое ж значэнне, як і колькасць.
  • Мультымадальныя трансфармеры – з візуяльнай, аудыявой, кодавой і тэкстовай інфармацыяй у адной архітэктурэ.
  • Удосконаленні ў працэсе рассуджэння – такія як метод «ланцуга мыслей», модэлі награды за працэс і масштабаванне вычысленняў пад час тэстаў, якія відзначаюцца ў модэлях серыі o ад OpenAI і модэлях з розсунутым мышленням ад Anthropic.
  • Усе гэта стоіць на адной падставе – трансфармерах, таму разумэнне яго дапамагае легка разбірацца ў гэтых напрамках.

    У табліцы ніжчэй кожны компанент паказаны ў аднай візуальнай форме: проблема, якую ён рашае, спосаб работы і яго галоўныя характэрыстыкі:

    | Component | Problem it Solves | Core Mechanism | Key Properties |
    |-----------|------------------|----------------|----------------|
    | **Tokenization** | Text is not natively numeric | Subword BPE/WordPiece splitting | Vocabulary ≈ 30k–100k; subwords handle rare terms |
    | **Embeddings** | Discrete IDs have no geometry | $\mathbf{e}_t = E[t] \in \mathbb{R}^{d_{\text{model}}}$ | Semantic similarity → geometric proximity |
    | **Positional Encoding** | Parallel attention loses token order | sin/cos at different frequencies (or RoPE) | Multi-scale; encodes absolute and relative position |
    | **Self-Attention** | Long-range deps, sequential bottleneck | $\text{softmax}(QK^\top/\sqrt{d_k})V$ | $O(n^2)$ but parallel; dynamic contextual reps |
    | **Query/Key/Value** | Separating "what I seek" from "what I offer" | Three separate learned linear projections | Relevance ≠ similarity; flexible dependency modeling |
    | **Multi-Head Attention** | Single head captures only one relationship type | $h$ parallel heads, concatenated + $W^O$ | Simultaneously captures syntactic, semantic, positional |
    | **Encoder** | Understanding input in full bidirectional context | Full self-attention, no masking | Bidirectional; rich contextualized representations |
    | **Decoder** | Generating output autoregressively | Causal self-attention + cross-attention | Predicts one token at a time; teacher-forcing in training |
    | **Cross-Attention** | Connecting generation to input understanding | Q from decoder, K/V from encoder | Enables encoder→decoder communication |
    | **Feed-Forward Network** | Per-token computation + factual storage | $\text{GeLU}(\mathbf{x}W_1)\,W_2$ per token | Position-wise; stores factual associations in weights |
    | **Residual Connections** | Vanishing gradients in deep networks | $\mathbf{h} = \text{SubLayer}(\mathbf{x}) + \mathbf{x}$ | Creates gradient highway; enables 100+ layer models |
    | **Pre-LayerNorm** | Unstable activations in deep networks | Normalize before each sublayer | Stable training; standard in all modern transformers |
    

    Што было рассказана, і куды працаваць далей

    Элементы складаюцца так: паралельная атэнцыя працуе лепшая, чым пасляпасовая обработка, і болей эфектыва фіксуе далёкія залежнасці, таму-такі трансфармэры заменілі сеkwencyнальныя мадэлі. Даныя трапляюцца з тэксту, пераходзяць у токены, потым у інкапсуляціі, далей — у позыцыйнае кодаванне, пасля чаго — у атэнцыю і шары фід-форвард, і так па кругу. Сама атэнцыя ўтварае основную операцыю: кожны токен атрымлівае інфармацыю ад усіх іншых за дапамою навучаных проекцый Q, K і V, як у формуле Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) V. Калькі сама-атэнцыі фіксуюць разныя патэрны, пазычнае кодаванне вярнюе парадак, а праектаванне энкодэра-дэкадэра дапамагае як розумеенню, так і генераванню. Шары фід-форвард зберагаюць знання, рэзыдуальныя лінкі дазваляюць падняць глыбіну, а Pre-LayerNorm падтрымляе стабільнасць трэнавання. Прогназаванне наступнага токена у масштабе дае новыя можлівасці, вікна кантэксту служыць рабочай памяцю агента, а сама архітэктура...

    Статты прац з 2017 года ўпрымкуюць сучасныя найсавершэннейшыя сістэмы.

    Ёсць спосаб працаваць глыбэй — пасляпэльны план.

    Першыя две недзелі: матэматыка. Адгледзіце серыю Андрэя Карпаты «Neural Networks: Zero to Hero» на YouTube, у прыватнае відзеў, які стварае GPT з нуля. Потым напісце простыя шары самаўвагі ў NumPy. Канцэпцыі стаюць зрозумелыяя, калі іх вырахоўваеце вручную.

    Трэцяя і чатвёртая недзелі: статты. Прачытайце «Attention Is All You Need» (Vaswani і іншыя, 2017), якая заўтра ўжо чытаемая, а таксама артыкул пра BERT (Devlin і іншыя, 2018), артыкул пра GPT-3 «Language Models are Few-Shot Learners» (Brown і іншыя, 2020) і «Scaling Laws for Neural Language Models» (Kaplan і іншыя, 2020).

    Другі месцы: практыка з бібліятэкамі і API. Бібліятэка Hugging Face transformers дазволяе выкорыстоўваць гэтыя мадэлі з Python без значных налаштаванняў. Адточна настроюйце BERT або маленькую модэль з відкрытымі вагамі, такую як варыянт Llama або Qwen, для задач класыфікацыі. Потым за дапамою Python SDK ад Anthropic або OpenAI падыходзіце да сучасных перэдовых модэляў, такіх як Claude Sonnet 5 або аднай з модэляў GPT-5. Адрабатка як таго, так і другога спрыяе з’еднанню тэорыі з практыкай, адтолькі ў модэлях з відкрытымі вагамі і перэдовых API-модэлях праўільна дапрацоўваныя тэ ж самыя прынцыпы трансфармераў.

    Трэція месцы: глęбокая праця з адной галоўнай тэмай. Выберыце адна з фрэймворкаў для агентоў (LangChain, LlamaIndex) або практыкуйцеся з Claude Code або Cursor, каб спазірваць працэс агентскага паведання ў рэальным інструменце для працы, эфектывныя трансфармеры (Flash Attention, розрэджаная і лінейная увага) або настроюванне LLM за дапамою LoRA і PEFT. Хутчэй будзе, як зосерадзіцца на глęбокай працы з адной тэмай, чым прабаваць многа розных рэшэнняў.

    Актуальна інфармацыя: старайцеся быць у кантакце з навуковымі доследжэннямі. Раздзелы cs.CL і cs.LG на arXiv, блог Hugging Face, сторанка доследжэнняў Anthropic і форум AI Alignment — гэта хорашыы істочнікі інфармацыі. Галера стрэмкая, але вышэспомненыя рэсурсы дапамагаюць зрозумець новыя нарады.

    Нарада пра трансфармеры складаецца з апошніх падзесят параграфаў, а архітэктура, якую ён опісвае, настолькі простая, што ёе можна рэалізаваць за адні вечар. Тое, што было адкрыванае гэтымі доследжэннямі, а таксама тое, што продовжае адкрывацца завдзяк подальшым доследжэнням, зменіла уявлення людзей пра тое, што можу робіць машыны.