Loading AI tools
модель машинного навчання З Вікіпедії, вільної енциклопедії
Трансфо́рмер (англ. Transformer) — це архітектура глибокого навчання, що ґрунтується на механізмі багатоголової уваги, запропонована в статті 2017 року «Увага — це все, що вам треба».[1] Вона не має рекурентних вузлів, і відтак вимагає менше часу на тренування, ніж попередні рекурентні нейронні архітектури, як-от довга короткочасна пам'ять (ДКЧП),[2] і її пізнішу видозміну широко використовують для тренування великих мовних моделей на великих (мовних) наборах даних, як-от корпусі Вікіпедії та Common Crawl[en].[3] Вхідний текст розбивається на n-грами, закодовані як токени[en], й кожен токен перетворюється на вектор за допомогою пошуку таблицею вкладення слів. На кожному шарі кожен токен відтак узгоджується в межах контекстного вікна з контекстом інших (немаскованих) токенів за допомогою паралельного механізму багатоголової уваги, що дозволяє підсилювати сигнал для ключових токенів, і пригнічувати менш важливі токени. Стаття про трансформер, опублікована 2017 року, ґрунтується на механізмі уваги на основі softmax, запропонованому 2014 року Багдановим зі співавт. для машинного перекладу,[4][5] а подібний до трансформера контролер швидких ваг (англ. Fast Weight Controller) було запропоновано 1992 року.[6][7][8]
Ця стаття посилається на первинні джерела. (лютий 2024) |
Цю архітектуру тепер використовують не лише в обробці природної мови та комп'ютернім баченні,[9] але й в обробці звуку[10] та мультимодальній обробці. Вона також призвела до розробки попередньо натренованих систем, таких як породжувальні попередньо натреновані трансформери (англ. generative pre-trained transformers, GPT)[11] та BERT[12] (англ. Bidirectional Encoder Representations from Transformers, двоспрямовані кодувальні подання з трансформерів).
Перед трансформерами попередників механізму уваги додали до вентильних рекурентних нейронних мереж, як-от ДКЧП та вентильних рекурентних вузлів (ВРВ), які обробляли набори даних послідовно. Залежність від обчислень попередніх токенів перешкоджала їхній здатності розпаралелювати механізм уваги. 1992 року як альтернативу рекурентним нейронним мережам запропонували контролер швидких ваг, який може навчатися «внутрішніх центрів уваги» (англ. "internal spotlights of attention").[16][6] Теоретично, інформація від одного токену може поширюватися довільно далеко вниз за послідовністю, але на практиці проблема зникання градієнту лишає стан моделі наприкінці довгого речення без точної, добутної інформації про попередні токени.
Продуктивність старих моделей покращили доданням механізму уваги, який дозволив моделі мати доступ до будь-якої попередньої точки вздовж послідовності. Шар уваги зважує всі попередні стани відповідно до навченої міри доречності, надаючи доречну інформацію про віддалені токени. Це виявилося особливо корисним у мовному перекладі, де для значення слова в реченні може бути важливим віддалений контекст. Вектор стану був доступним лише після обробки останнього англійського слова, наприклад, під час перекладу його з французької моделлю ДКЧП. Хоча теоретично такий вектор зберігає інформацію про все оригінальне речення, на практиці ця інформація зберігається погано. Якщо додано механізм уваги, декодувальник отримує доступ до векторів стану кожного вхідного слова, а не лише останнього, й може навчитися ваг уваги, які вказують, скільки уваги приділяти кожному вхідному вектору стану. Розширення моделей seq2seq[en] механізмом уваги вперше втілили в контексті машинного перекладу Багданов, Чо та Бенжіо 2014 року.[4][5]
2016 року високорозпаралелювану розкладну увагу (англ. decomposable attention) успішно поєднали з мережею прямого поширення.[33] Це вказувало на те, що механізми уваги були потужними самі по собі, й що послідовна рекурентна обробка даних не була необхідною для досягнення приросту якості рекурентних нейронних мереж з увагою. 2017 року Васвані зі співавт. також запропонували замінити рекурентні нейронні мережі самоувагою й розпочали зусилля щодо оцінки цієї ідеї.[1] Трансформери, використовуючи механізм уваги, обробляючи всі токени одночасно, розраховували «м'які» ваги між ними на послідовних шарах. Оскільки механізм уваги використовує інформацію лише про інші токени з нижчих шарів, його можливо обчислювати для всіх токенів паралельно, що призводить до покращення швидкості тренування.
Архітектура звичайного трансформера мала труднощі зі збіжністю. У первинній статті[1] автори радили використовувати прогрівання темпу навчання. Тобто, темп навчання повинен лінійно збільшуватися від 0 до максимального значення на першій частині тренування (зазвичай радять 2 % від загальної кількості кроків тренування), перш ніж знову зменшуватися.
Праця 2020 виявила, що використання шарового нормування перед (а не після) багатоголової уваги та шарів прямого поширення стабілізує тренування, не вимагаючи прогрівання темпу навчання.[30]
Модель GT3 поєднує CWTE, SWTE та TTE за допомогою самопристосовного вентильного шару, уможливлюючи ефективне й дієве злиття трьох типів ознак для наскрізного керованого текстом передбачування ринку акцій.[34]
Трансформери, як правило, підлягають самокерованому навчанню, що складається з некерованого попереднього тренування, з наступним керованим тонким настроюванням. Попереднє тренування, як правило, виконують на більшому наборі даних, ніж тонке настроювання, через обмежену доступність мічених[en] тренувальних даних. До задач попереднього тренування та тонкого настроювання зазвичай належать:
У статті про трансформер T5[35] задокументовано велику кількість завдань для попереднього тренування. Деякі приклади:
Thank you <X> me to your party <Y> week.
-> <X> for inviting <Y> last <Z>
, де <Z>
означає «кінець виведення».translate English to German: That is good.
-> Das ist gut.
.cola sentence: The course is jumping well.
-> not acceptable
.Трансформер досяг великого успіху в обробці природної мови (ОПМ), наприклад, у задачах машинного перекладу та передбачування часових рядів. Багато великих мовних моделей, як-от GPT-2, GPT-3, GPT-4, Claude, BERT, XLNet, RoBERTa та ChatGPT, демонструють здатність трансформерів виконувати широкий спектр пов'язаних з ОПМ завдань, і мають потенціал знаходити застосування в реальному світі. До них можуть належати:
Окрім застосувань в ОПМ, він також досяг успіху в інших галузях, серед яких комп'ютерне бачення та застосування у згортанні білків (як-от AlphaFold[en]).
Як ілюстративний приклад, Ithaca — це трансформер з лише кодувальником із трьома головами виходу. Він бере на вході давньогрецькі написи як послідовності символів, але з нерозбірливими символами, заміненими на «-». Його три голови виходу відповідно виводять розподіли ймовірностей над грецькими символами, місцезнаходженням напису, та його датою.[37]
Трансформерову модель було втілено в стандартних системах глибокого навчання, як-от TensorFlow та PyTorch.
Transformers — бібліотека, яку надає Hugging Face, і яка пропонує архітектури на основі трансформерів та попередньо натреновані моделі.[11]
Всі трансформери мають однакові основні складові:
Трансформувальні шари можуть бути одного з двох типів, кодувальник (англ. encoder) та декодувальник (англ. decoder). У первинній статті використовували обидва типи, тоді як пізніші моделі містили лише один з них. BERT — приклад лише кодувальникової моделі, GPT — лише декодувальникові моделі.
Вхідний текст розбирає на токени токенувальник, найчастіше використовують токенувальник діграмним кодуванням[en], і кожен токен перетворюється на вектор шляхом пошуку в таблиці вкладення слів. Потім до вкладення слова додається позиційна інформація токена.
Подібно до раніших моделей seq2seq[en], оригінальна модель трансформера використовувала кодува́льно—декодува́льну (англ. encoder-decoder) архітектуру. Кодувальник складається з кодувальних шарів, що оброблюють токени входу ітеративно, шар за шаром, тоді як декодувальник складається з декодувальних шарів, які ітеративно оброблюють вихід кодувальника, а також токени виходу декодувальника до цього моменту.
Функція кожного кодувального шару полягає в породжуванні контекстуалізованих подань токенів, в яких кожне подання відповідає токену, який «примішує» інформацію з інших токенів входу через механізм самоуваги. Кожен декодувальний шар містить два підшари уваги: (1) перехресну увагу для охоплення виходу кодувальника (контекстуалізованих подань токенів входу) та (2) самоувагу для «примішування» інформації з-поміж токенів входу до цього декодувальника (тобто токенів, породжених до цього моменту під час висновування).[38][39]
Як кодувальні, так і декодувальні шари мають нейронну мережу прямого поширення для додаткової обробки виходів, та містять за́лишкові з'єднання й кроки шарового нормування (англ. layer normalization).[39]
Будівельними блоками трансформера є вузли масштабованої скалярнодобуткової уваги (англ. scaled dot-product attention units). Для кожного вузла уваги трансформерна модель навчається трьох вагових матриць: ваг запиту (англ. query weights) , ваг ключа (англ. key weights) , та ваг значення (англ. value weights) . Для кожного токена подання токена множиться на кожну з цих трьох матриць, даючи вектор запиту , вектор ключа , та вектор значення . Ваги уваги обчислюються з використанням векторів запиту та ключа: вага уваги з боку токена до токена є скалярним добутком на . Ваги уваги ділять на квадратний корінь розміру векторів ключа, , що стабілізує градієнти під час тренування, та пропускають через softmax, що унормовує ці ваги. Той факт, що та є різними матрицями, дає увазі можливість бути несиметричною: якщо токен звертає увагу на токен (тобто, є великим), то це не обов'язково означає, що токен звертає увагу на токен (тобто, може бути малим). Вихід вузла уваги для токена це зважена сума векторів значення всіх токенів, зважених на , увагу з боку токена до кожного з токенів.
Обчислення уваги (англ. attention) для всіх токенів можливо виразити одним великим матричним обчисленням з використанням функції softmax, що корисно для тренування завдяки обчислювальним оптимізаціям матричних операцій, які обчислюють матричні операції швидко. Матриці , та визначено як матриці, в яких -ті рядки є векторами , та відповідно. Тоді увагу можливо подати як
де softmax береться над горизонтальною віссю.
Один набір матриць називають головою уваги (англ. attention head), й кожен шар у трансформерній моделі має декілька голів уваги. В той час як кожна з голів уваги звертає увагу на токени, доречні для кожного з токенів, декілька голів уваги дозволяють моделі робити це для різних визначень «доречності». Крім того, поле впливу, що подає доречність, може поступово розширюватися в послідовних шарах. Багато трансформерних голів уваги кодують відношення доречності, змістовні для людей. Наприклад, одні голови можуть звертати найбільше уваги на наступне слово, в той час як інші переважно звертають увагу дієслів на їхні безпосередні об'єкти.[40] Обчислення для всіх голів уваги можуть виконуватися паралельно, що уможливлює швидку обробку. Виходи шару уваги зчіплюють, щоби передавати їх до шарів нейронних мереж прямого поширення.
Конкретно, покладімо, що декілька голів уваги проіндексовано через , тоді маємо де матриця — зчеплення вкладень слів, матриці — «проєкційні матриці», що належать окремій голові уваги , а — кінцева проєкційна матриця, що належить всій багатоголовій структурі уваги.
Може бути необхідно вирізати зв'язки уваги між деякими парами слів. Наприклад, декодувальник для позиції токена не повинен мати доступу до позиції токена . Цього можливо досягти перед етапом softmax додаванням матриці маски (англ. mask matrix) , що має значення у місцях, де зв'язок уваги має бути обрізано, й в інших місцях:
Кожен кодувальник (англ. encoder) складається з двох головних складових: механізму самоуваги (англ. self-attention mechanism), та нейронної мережі прямого поширення. Механізм самоуваги приймає кодування входів з попереднього кодувальника, та зважує їхню доречність одне одному, щоби породити кодування виходів. Нейронна мережа прямого поширення здійснює подальшу обробку кодування кожного виходу окремо. Ці кодування виходів відтак передають наступному кодувальникові як його вхід, так само як і декодувальникам.
Перший кодувальник отримує як вхід не кодування, а позиційну інформацію та вкладення послідовності входу. Позиційна інформація необхідна трансформерові, щоби використовувати порядок послідовності, оскільки жодна інша частина трансформера його не використовує.[1]
Кодувальник двоспрямований. Увага може звертатися на токени, розташовані як до, так і після поточного токена. Токени використовують замість слів для врахування багатозначності.
Позиційне кодування (англ. positional encoding) — це векторне подання фіксованого розміру, що охоплює відносні позиції токенів у цільовій послідовності: воно надає моделі трансформера інформацію про те, де знаходяться слова у вхідній послідовності.
Позиційне кодування визначають як функцію типу , де — додатне парне ціле число. Повне позиційне кодування, як визначено в первинній статті, задається рівнянням де .
Тут, — вільний параметр, який повинен бути значно більшим за найбільше , яке вводитимуть до функції позиційного кодування. У первинній статті[1] автори обрали .
Ця функція має простіший вигляд при записі як комплексна функція типу де .
Основна причина, через яку автори обрали цю функцію за позиційне кодування, полягає в тому, що вона дозволяє виконувати зміщення як лінійні перетворення: де — відстань, на яку потрібно здійснити зміщення. Це дозволяє трансформерові брати будь-яку закодовану позицію й знаходити кодування позиції на n кроків вперед або назад за допомогою множення матриць.
Беручи лінійну суму, будь-яку згортку також можливо втілити як лінійні перетворення:для будь-яких сталих . Це дозволяє трансформерові брати будь-яку закодовану позицію й знаходити лінійну суму закодованих позицій її сусідів. Ця сума закодованих позицій, коли її подати до механізму уваги, створюватиме ваги уваги на її сусідах, дуже подібно до того, що відбувається в моделі мови на згортковій нейронній мережі. За словами авторів, «ми припустили, що це дозволить моделі легко навчатися звертати увагу за відносною позицією».
У типових втіленнях усі операції здійснюються над дійсними числами, а не комплексними, але оскільки множення комплексних чисел можливо втілити як множення дійснозначних матриць 2-на-2, то різниця лише в записі.
Кожен декодувальник (англ. decoder) складається з трьох головних складових: механізму самоуваги, механізму уваги над кодуваннями, та нейронної мережі прямого поширення. Декодувальник працює подібно до кодувальника, але додатково вставляється механізм уваги, що натомість дістає доречну інформацію з кодувань, породжених кодувальниками. Цей механізм також можуть називати кодувально-декодувальною увагою (англ. encoder-decoder attention).[1][39]
Подібно до першого кодувальника, перший декодувальник бере як свій вхід не кодування, а позиційну інформацію та вкладення послідовності виходу. Трансформер мусить не використовувати для передбачування виходу поточний або майбутній вихід, тож послідовність виходу мусить бути частково масковано, щоби запобігти цьому зворотному потокові інформації.[1] Це уможливлює авторегресійне породжування тексту. Для всіх голів уваги не можна звертати увагу на наступні токени. За крайнім декодувальником йде завершальне лінійне перетворення та шар softmax, щоби виробляти ймовірності виходу над словником.
Всі моделі серії GPT від OpenAI мають лише декодувальну архітектуру.
У великих мовних моделях термінологія дещо відрізняється від термінології, використаної в оригінальній статті про трансформер:[41]
Тут «авторегресійний» означає, що до голови уваги вставляють маску для зануляння всієї уваги від одного токена до всіх токенів після нього, як описано в розділі «маскована увага».
Загалом, мовні моделі на основі трансформера існують двох типів: причинні (або «авторегресійні») та масковані. Серія GPT є причинною й лише декодувальною. BERT — маскована й лише кодувальна.[42][43] Серія T5 кодувально—декодувальна, з повним кодувальником та авторегресійним декодувальником.[35]
Оригінальний трансформер використовує передавальну функцію ReLU. Було розроблено й інші передавальні функції активації, як-от SwiGLU.[44]
Трансформери можуть використовувати й інші методи позиційного кодування, крім синусоїдного.[45]
RoPE (англ. rotary positional embedding, поворотне позиційне вкладення),[46] найкраще пояснювати, розглядаючи список 2-вимірних векторів . Виберімо деякий кут . Тоді кодування RoPE цеЕквівалентно, якщо записати 2-вимірні вектори як комплексні числа , то кодування RoPE це просто множення на кут:Для списку -вимірних векторів, кодувальник RoPE визначається послідовністю кутів . Тоді кодування RoPE застосовується до кожної пари координат.
Перевага RoPE полягає в тому, що скалярний добуток двох векторів залежить лише від їхнього відносного розташування:
для будь-якого цілого числа .
ALiBi (англ. Attention with Linear Biases, увага з лінійними зміщеннями)[47] не є заміною для позиційного кодувальника в оригінальному трансформері. Натомість, це додатковий позиційний кодувальник, який безпосередньо підключається до механізму уваги. Конкретно, механізм уваги ALiBi цеТут — дійсне число («скаляр»), а — матриця лінійного зміщення (англ. linear bias), визначена якіншими словами, .
ALiBi дозволяє здійснювати попереднє тренування на коротких контекстних вікнах, а потім тонке настоювання на довших контекстних вікнах. Оскільки її безпосередньо підключено до механізму уваги, її можливо поєднувати з будь-яким позиційним кодувальником, який підключено до «низу» всієї мережі (де розташовано синусоїдний кодувальник оригінального трансформера, а також RoPE та багато інших).
Кодування відносних позицій (англ. Relative Position Encodings)[48] подібні до ALiBi, але загальніші:де — матриця Тепліца, тобто за умови .
FlashAttention[49] — це алгоритм, що ефективно втілює механізм уваги трансформера на ГП. Він виконує множення матриць блоками, таким чином, що кожен блок уміщається в кеш ГП, і завдяки ретельному управлінню блоками мінімізує копіювання даних між кешами ГП (оскільки переміщення даних повільне).
Покращену версію, FlashAttention-2,[50][51][52] розробили для того, щоби задовольнити висхідний попит на мовні моделі, здатні обробляти довші контексти. Вона пропонує поліпшення в розподілі й розпаралелюванні роботи, дозволяючи досягати до 230 терафлопс/с на ГП A100 (FP16/BF16[en]), що вдвічі швидше за оригінальний FlashAttention.
До ключових досягнень FlashAttention-2 належать зменшення не пов'язаних з множенням матриць операцій з рухомою комою, покращене розпаралелювання над виміром довжини послідовності, кращий розподіл роботи між групами потоків ГП, а також додаткова підтримка розмірів голів до 256 та багатозапитової (БЗУ, англ. multi-query attention, MQA) й групозапитової уваги (ГЗУ, англ. grouped-query attention, GQA).
Еталонні перевірки показали, що FlashAttention-2 в до 2 разів швидше за FlashAttention, і в до 9 разів швидше за стандартне втілення уваги в PyTorch. Серед майбутніх розробок — оптимізація для нового обладнання, як-от ГП H100, та нових типів даних, як-от FP8.
Багатозапитова увага (англ. Multi-Query Attention) змінює механізм багатоголової уваги.[53] Тоді як традиційно
з багатозапитовою увагою, існує лише одне , тож
Це має нейтральний вплив на якість моделі та швидкість тренування, але підвищує швидкість висновування.
Трансформери використовують у великих мовних моделях для авторегресійного породжування послідовностей: породжування потоку тексту, по одному токену за раз. Проте в більшості постановок декодування з мовних моделей впираються в пам'ять, що означає, що нам доступні вільні обчислювальні потужності. Спекулятивне декодування (англ. speculative decoding)[54][55] використовує ці вільні обчислювальні потужності, обчислюючи декілька токенів паралельно. Подібно до спекулятивного виконання в ЦП, майбутні токени обчислюються паралельно, роблячи припущення щодо значень попередніх токенів, і пізніше відкидаються, якщо виявляється, що припущення були хибними.
Конкретніше, розгляньмо трансформерну модель на кшталт GPT-3 з розміром контекстного вікна 512. Для породження всього контекстного вікна авторегресійно з жадібним декодуванням її потрібно запускати 512 разів, кожного разу породжуючи токен . Проте, якби ми мали деяке обґрунтоване припущення щодо значень цих токенів, ми могли би перевіряти їх усі паралельно, за один запуск моделі, перевіряючи, що кожен справді є токеном із найвищою логарифмічною правдоподібністю на -тому виході.
При спекулятивному декодуванні використовують меншу модель або деяку іншу просту евристику для породження кількох спекулятивних токенів, які потім перевіряють більшою моделлю. Наприклад, припустімо, що мала́ модель породила чотири спекулятивні токени: . Ці токени пропускають крізь більшу модель, і приймаються лише та . Той же запуск великої моделі вже породив новий токен для заміни , а повністю відкидається. Процес потім повторюється (починаючи з 4-го токена) доки не буде породжено всі токени.
Для не жадібного декодування застосовують подібні ідеї, за винятком того, що спекулятивні токени приймають або відкидають стохастично, таким чином, що гарантується, що кінцевий розподіл виходу є таким самим, як якби спекулятивне декодування не використовувалось.[54][56]
Тренування архітектур на трансформерній основі може бути витратним, особливо для довгих даних входу.[57] До альтернативних архітектур належать Реформер (англ. Reformer, що знижує обчислювальне навантаження з до [57]), та моделі на кшталт ETC/BigBird (які можуть знижувати його до ),[58] де — довжина послідовності. Це здійснюється за допомогою просторово чутливого гешування[en] та оборотних шарів (англ. reversible layers).[59][60]
Звичайні трансформери вимагають обсягу пам'яті, квадратичного щодо розміру контекстного вікна. Трансформери без уваги (англ. attention-free transformers)[61] знижують цю вимогу до лінійної залежності, зберігаючи при цьому переваги трансформера шляхом зв'язування ключа зі значенням.
Long Range Arena (укр. Арена далекобійності, 2020)[62] — стандартний еталон для порівнювання поведінки трансформерних архітектур на довгих даних входу.
Увага з випадковими ознаками (англ. Random Feature Attention, 2021)[63] використовує випадкові ознаки Фур'є[en]:де — незалежні зразки з нормального розподілу . За цього вибору параметрів виконується , або Відповідно, одноголову увагу з одним запитом можливо записати як де . Аналогічно для кількох запитів, та для багатоголової уваги.
Це наближення можливо обчислювати за лінійний час, оскільки можливо спочатку обчислювати матрицю , а потім перемножувати її з запитом. По суті, нам вдалося отримати точнішу версію
Перформер (англ. Performer, 2022)[64] використовує ту саму увагу з випадковими ознаками, але спочатку незалежно вибирають із нормального розподілу , а потім обробляють їх обробкою Грама — Шмідта.
Трансформери також можливо використовувати/пристосовувати й для інших модальностей (даних входу або виходу), крім тексту, зазвичай шляхом знаходження способу «токенувати» таку модальність.
Зорові трансформери (англ. vision transformers)[28] пристосовують трансформер до комп'ютерного бачення, розбиваючи вхідні зображення на низку фрагментів, перетворюючи їх на вектори, й обробляючи їх як токени в стандартному трансформері.
Конформер (англ. Conformer)[29] та пізніший Whisper[65] дотримуються тієї ж схеми для розпізнавання мовлення, спочатку перетворюючи сигнал мовлення на спектрограму, яку потім обробляють як зображення, тобто розбивають на низку фрагментів, перетворюють на вектори, й обробляють як токени в стандартному трансформері.
Персівери (англ. Perceiver, укр. сприймач) від Ендрю Джейгла зі співавт. (2021)[66][67] можуть навчатися з великих масивів гетерогенних даних.
Стосовно зображень на виході[en], Піблс зі співавт. запропонували дифузійний трансформер (ДиТ, англ. diffusion transformer, DiT), який полегшує використання трансформерної архітектури для виробляння зображень на основі дифузії.[68] Також, Google випустила трансформероцентричний породжувач зображень під назвою «Муза» (англ. "Muse") на основі паралельного декодування й технології маскованого породжувального трансформера.[69] (Трансформери відігравали не таку центральну роль у попередніх технологіях створення зображень,[70] хоча й все ж значну.[71])
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.