Трансформер (архітектура глибокого навчання): відмінності між версіями

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
[перевірена версія][перевірена версія]
Вилучено вміст Додано вміст
актуалізовано переклад «Transformer (deep learning architecture)»
Рядок 1: Рядок 1:
{{short description|Алгоритм машинного навчання для обробки природної мови}}
{{Короткий опис|Алгоритм машинного навчання, який використовують для обробки природної мови}}
{{Первинні джерела|дата=лютий 2024}}
{{Машинне навчання|Штучна нейронна мережа}}
{{Машинне навчання|Штучна нейронна мережа}}
'''Трансфо́рмер''' ({{lang-en|Transformer}})&nbsp;— це архітектура [[Глибоке навчання|глибокого навчання]], що ґрунтується на механізмі багатоголової [[Увага (машинне навчання)|уваги]], запропонована в статті 2017 року «{{нп|Увага — це все, що вам треба|||Attention Is All You Need}}».<ref name="2017_Attention_Is_All_You_Need" /> Вона не має рекурентних вузлів, і відтак вимагає менше часу на тренування, ніж попередні [[Рекурентна нейронна мережа|рекурентні нейронні архітектури]], як-от [[довга короткочасна пам'ять]] (ДКЧП),<ref name="lstm1997">{{cite journal |last1=Hochreiter |first1=Sepp |author-link=Зепп Хохрайтер |last2=Schmidhuber |first2=Jürgen |author-link2=Юрген Шмідхубер |date=1 листопада 1997 |title=Long Short-Term Memory |journal=Neural Computation |language=en |volume=9 |issue=8 |pages=1735–1780 |doi=10.1162/neco.1997.9.8.1735 |issn=0899-7667 |pmid=9377276 |s2cid=1915014}}</ref> і її пізнішу видозміну широко використовують для тренування [[Велика мовна модель|великих мовних моделей]] на великих (мовних) наборах даних, як-от [[Корпус текстів|корпусі]] [[Вікіпедія|Вікіпедії]] та ''{{нп|Common Crawl}}''.<ref name=":7">{{cite web|url=https://openai.com/blog/better-language-models/|title=Better Language Models and Their Implications|date=2019-02-14|website=OpenAI|language=en|access-date=2019-08-25|archive-date=2020-12-19|archive-url=https://web.archive.org/web/20201219132206/https://openai.com/blog/better-language-models/|url-status=live}}</ref>
Вхідний текст розбивається на [[n-грама|''n''-грами]], закодовані як {{нп|Імовірнісне токенування|токени||Probabilistic tokenization}}, й кожен токен перетворюється на вектор за допомогою пошуку таблицею [[вкладення слів]]. На кожному шарі кожен токен відтак узгоджується в межах контекстного вікна з контекстом інших (немаскованих) токенів за допомогою паралельного механізму багатоголової [[Увага (машинне навчання)|уваги]], що дозволяє підсилювати сигнал для ключових токенів, і пригнічувати менш важливі токени. Стаття про трансформер, опублікована 2017 року, ґрунтується на механізмі уваги на основі ''[[softmax]]'', запропонованому 2014 року Багдановим зі співавт. для [[Машинний переклад|машинного перекладу]],<ref name="inventors" /><ref name="inventconfirm" /> а подібний до трансформера контролер швидких ваг ({{lang-en|Fast Weight Controller}}) було запропоновано 1992 року.<ref name="transform1992" /><ref name="schlag2021" /><ref name="fastlinear2020" />


Цю архітектуру тепер використовують не лише в [[Обробка природної мови|обробці природної мови]] та [[Комп'ютерне бачення|комп'ютернім баченні]],<ref>{{cite web |last1=He |first1=Cheng |title=Transformer in CV |url=https://towardsdatascience.com/transformer-in-cv-bbdb58bf335e |website=Transformer in CV |language=en |date=31 грудня 2021 |publisher=Towards Data Science |access-date=19 червня 2021 |archive-date=16 квітня 2023 |archive-url=https://web.archive.org/web/20230416160902/https://towardsdatascience.com/transformer-in-cv-bbdb58bf335e?gi=78319b60873f |url-status=live}}</ref> але й в обробці звуку<ref name="Robust Speech Recognition via Large-Scale Weak Supervision">{{cite arXiv|eprint=2212.04356 |last1=Radford |first1=Alec |author2=Jong Wook Kim |last3=Xu |first3=Tao |last4=Brockman |first4=Greg |last5=McLeavey |first5=Christine |last6=Sutskever |first6=Ilya |title=Robust Speech Recognition via Large-Scale Weak Supervision |language=en |year=2022 |class=eess.AS }}</ref> та мультимодальній обробці. Вона також призвела до розробки [[Передавальне навчання|попередньо натренованих систем]], таких як [[Породжувальний попередньо натренований трансформер|породжувальні попередньо натреновані трансформери]] ({{lang-en|generative pre-trained transformers, GPT}})<ref name="wolf2020">{{cite book|last1=Wolf |first1=Thomas| last2=Debut |first2=Lysandre| last3=Sanh |first3=Victor |last4=Chaumond |first4=Julien| last5=Delangue |first5=Clement| last6=Moi |first6=Anthony |last7=Cistac |first7=Pierric |last8=Rault |first8=Tim |last9=Louf |first9=Remi |last10=Funtowicz | first10=Morgan |last11=Davison |first11=Joe |last12=Shleifer |first12=Sam |last13=von Platen |first13=Patrick |last14=Ma |first14=Clara |last15=Jernite |first15=Yacine |last16=Plu |first16=Julien |last17=Xu |first17=Canwen |last18=Le Scao |first18=Teven |last19=Gugger |first19=Sylvain |last20=Drame |first20=Mariama |last21=Lhoest |first21=Quentin |last22=Rush |first22=Alexander |title=Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing: System Demonstrations |chapter=Transformers: State-of-the-Art Natural Language Processing |language=en |year=2020|pages=38–45 |doi=10.18653/v1/2020.emnlp-demos.6 |s2cid=208117506}}</ref> та ''[[BERT (модель мови)|BERT]]''<ref name=":6">{{cite web|url=http://ai.googleblog.com/2018/11/open-sourcing-bert-state-of-art-pre.html|title=Open Sourcing BERT: State-of-the-Art Pre-training for Natural Language Processing|website=Google AI Blog|language=en|date=2 листопада 2018 |access-date=2019-08-25|archive-date=2021-01-13|archive-url=https://web.archive.org/web/20210113211449/https://ai.googleblog.com/2018/11/open-sourcing-bert-state-of-art-pre.html|url-status=live}}</ref> ({{lang-en|Bidirectional Encoder Representations from Transformers}}, двоспрямовані кодувальні подання з трансформерів).
'''Трансфо́рмер''' ({{lang-en|Transformer}}) — це модель [[Глибоке навчання|глибокого навчання]], яка переймає механізм [[Увага (машинне навчання)|уваги]], роздільно зважуючи важливість кожної частини даних входу. Її використовують переважно в області [[Обробка природної мови|обробки природної мови]] (ОПМ)<ref name=":0">{{cite arxiv|last1=Polosukhin|first1=Illia|last2=Kaiser|first2=Lukasz|last3=Gomez|first3=Aidan N.|last4=Jones|first4=Llion|last5=Uszkoreit|first5=Jakob|last6=Parmar|first6=Niki|last7=Shazeer|first7=Noam|last8=Vaswani|first8=Ashish|date=2017-06-12|title=Attention Is All You Need|eprint=1706.03762|class=cs.CL}} {{ref-en}}</ref> та в [[Комп'ютерне бачення|комп'ютерному баченні]] (КБ).<ref>{{cite web |last1=He |first1=Cheng |title=Transformer in CV |url=https://towardsdatascience.com/transformer-in-cv-bbdb58bf335e |website=Transformer in CV |publisher=Towards Data Science}} {{ref-en}}</ref>


{{TOC limit|3}}
Як і [[Рекурентна нейронна мережа|рекурентні нейронні мережі]] (РНМ), трансформери призначено для обробки послідовних даних входу, таких як природна мова, для таких задач як [[Статистичний машинний переклад|переклад]] та [[Автоматизоване реферування|реферування тексту]]. Проте, на відміну від РНМ, трансформери оброблюють дані не обов'язково послідовно. Радше, механізм уваги забезпечує контекст для будь-якого положення в послідовності входу. Наприклад, якщо дані входу є реченням природної мови, то трансформерові не потрібно обробляти його початок, перш ніж взятися за обробку його кінця. Він, радше, визначає контекст, який надає значення кожному слову в цій послідовності. Ця властивість уможливлює набагато більше [[Паралельні обчислення|розпаралелювання]], ніж РНМ, і відтак знижує тривалості тренування.<ref name=":0" />


== Хронологія ==
З моменту свого дебюту 2017 року трансформери все частіше стають обраною моделлю для задач ОПМ,<ref name = "wolf2020">{{cite book|last1=Wolf|first1=Thomas|last2=Debut|first2=Lysandre|last3=Sanh|first3=Victor|last4=Chaumond|first4=Julien|last5=Delangue|first5=Clement|last6=Moi|first6=Anthony|last7=Cistac|first7=Pierric|last8=Rault|first8=Tim|last9=Louf|first9=Remi|last10=Funtowicz|first10=Morgan|last11=Davison|first11=Joe|last12=Shleifer|first12=Sam|last13=von Platen|first13=Patrick|last14=Ma|first14=Clara|last15=Jernite|first15=Yacine|last16=Plu|first16=Julien|last17=Xu|first17=Canwen|last18=Le Scao|first18=Teven|last19=Gugger|first19=Sylvain|last20=Drame|first20=Mariama|last21=Lhoest|first21=Quentin|last22=Rush|first22=Alexander|title=Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing: System Demonstrations|chapter=Transformers: State-of-the-Art Natural Language Processing|year=2020|pages=38–45|doi=10.18653/v1/2020.emnlp-demos.6|s2cid=208117506}} {{ref-en}}</ref> замінивши моделі РНМ, такі як [[довга короткочасна пам'ять]] (ДКЧП). Додаткове розпаралелювання тренування уможливлює тренування на більших наборах даних, ніж це було колись можливим. Це призвело до розробки [[Передавальне навчання|попередньо натренованих систем]], таких як ''[[BERT (модель мови)|BERT]]'' ({{lang-en|Bidirectional Encoder Representations from Transformers}}) та ''[[GPT (модель мови)|GPT]]'' ({{lang-en|Generative Pre-trained Transformer}}), які було треновано на великих мовних наборах даних, таких як корпуси [[Вікіпедія|Вікіпедії]] та ''{{нп|Common Crawl}}'', і які можливо тонко налаштовувати для конкретних мовних задач.<ref name=":6">{{Cite web|url=http://ai.googleblog.com/2018/11/open-sourcing-bert-state-of-art-pre.html|title=Open Sourcing BERT: State-of-the-Art Pre-training for Natural Language Processing|website=Google AI Blog|access-date=2019-08-25|archive-date=13 січня 2021|archive-url=https://web.archive.org/web/20210113211449/https://ai.googleblog.com/2018/11/open-sourcing-bert-state-of-art-pre.html}} {{ref-en}}</ref><ref name=":7">{{Cite web|url=https://openai.com/blog/better-language-models/|title=Better Language Models and Their Implications|date=2019-02-14|website=OpenAI|access-date=2019-08-25|archive-date=19 грудня 2020|archive-url=https://web.archive.org/web/20201219132206/https://openai.com/blog/better-language-models/}} {{ref-en}}</ref>


* 1990 року [[мережа Елмана]], використовуючи рекурентну нейронну мережу, кодувала кожне слово в тренувальному наборі як вектор, званий [[Вкладення слова|вкладенням слова]], і весь словник як [[Векторна база даних|векторну базу даних]], дозволяючи виконувати такі завдання, як передбачування послідовностей, що виходять за межі можливостей простого [[Багатошаровий перцептрон|багатошарового перцептрону]]. Недоліком цих статичних вкладень було те, що вони не робили розрізнення між декількома значеннями слів, які пишуться однаково.<ref name="1990_ElmanPaper">{{cite journal |last=Elman |first=Jeffrey L. |date=березень 1990 |title=Finding Structure in Time |url=http://doi.wiley.com/10.1207/s15516709cog1402_1 |journal=Cognitive Science |language=en |volume=14 |issue=2 |pages=179–211 |doi=10.1207/s15516709cog1402_1|s2cid=2763403 }}</ref>
{{TOC limit|3}}
* 1992 року [[Юрген Шмідхубер]] опублікував контролер швидких ваг ({{lang-en|Fast Weight Controller}}).<ref name="transform1992"/> Він навчається відповідати на запити, програмуючи ваги уваги іншої нейронної мережі через тензорні добутки векторів ключів і векторів значень, званих ''FROM'' і ''TO''. Пізніше було показано, що контролер швидких ваг еквівалентний ненормованому лінійному трансформерові.<ref name="fastlinear2020">{{cite conference |first1=Angelos|last1=Katharopoulos|first2=Apoorv|last2=Vyas|first3=Nikolaos|last3=Pappas|first4=François|last4=Fleuret|date=2020 |title=Transformers are RNNs: Fast autoregressive Transformers with linear attention|url=https://paperswithcode.com/paper/a-decomposable-attention-model-for-natural|publisher=PMLR|pages=5156–5165|book-title=ICML 2020|language=en}}</ref><ref name="schlag2021">{{cite conference|last1=Schlag|first1=Imanol| last2=Irie|first2=Kazuki|last3=Schmidhuber|first3=Jürgen|author-link3=Юрген Шмідхубер|title=Linear Transformers Are Secretly Fast Weight Programmers|publisher=Springer|date=2021|pages=9355–9366|book-title=ICML 2021}}</ref><ref name="choromanski2020">{{cite arXiv|eprint=2009.14794|class=cs.CL|last1=Choromanski |first1=Krzysztof |last2=Likhosherstov |first2=Valerii |last3=Dohan |first3=David |last4=Song |first4=Xingyou |last5=Gane |first5=Andreea |last6=Sarlos |first6=Tamas |last7=Hawkins |first7=Peter |last8=Davis |first8=Jared |last9=Mohiuddin |first9=Afroz |last10=Kaiser |first10=Lukasz |last11=Belanger |first11=David |last12=Colwell |first12=Lucy |last13=Weller |first13=Adrian |title=Rethinking Attention with Performers |language=en |year=2020 }}</ref><ref name="lineartransformer">{{cite web | last = Schmidhuber | first = Juergen | title = 26 March 1991: Neural nets learn to program neural nets with fast weights—the first Transformer variants. 2021-: New stuff! | author-link=Юрген Шмідхубер| publisher = IDSIA, Switzerland | url = https://people.idsia.ch/~juergen/fast-weight-programmer-1991-transformer.html | language = en | date = 26 березня 2021 | access-date = 29 грудня 2023 | archive-url = https://web.archive.org/web/20231205213949/https://people.idsia.ch/~juergen/fast-weight-programmer-1991-transformer.html | archive-date = 5 грудня 2023 | quote = }}</ref> Термінологію «навчання внутрішніх центрів уваги» ({{lang-en| "learning internal spotlights of attention"}}) було введено 1993 року.<ref name="attention1993"/>
* 1993 року для [[Статистичний машинний переклад|статистичного машинного перекладу]] використовували {{нп|Суміщувальні моделі IBM|суміщувальні моделі ''IBM''||IBM alignment models}}.<ref name="U4RiN">{{cite journal |last1=Brown |first1=Peter F. |year=1993 |title=The mathematics of statistical machine translation: Parameter estimation |journal=Computational Linguistics |language=en |issue=19 |pages=263–311}}</ref>
* 1997 року було запропоновано предтечу великої мовної моделі, яка використовувала [[рекурентні нейронні мережі]], як-от [[Довга короткочасна пам'ять|довгу короткочасну пам'ять]].
* 2001 року для уоднозначнювання слів використовували зібраний з Інтернету великий текстовий корпус на один мільярд слів, який на той час називали «дуже-дуже великим».<ref name="2001_very_very_large_corpora">{{cite journal |last1=Banko |first1=Michele |last2=Brill |first2=Eric |date=2001 |title=Scaling to very very large corpora for natural language disambiguation |journal=Proceedings of the 39th Annual Meeting on Association for Computational Linguistics - ACL '01 |language=en |pages=26–33 |location=Morristown, NJ, USA |publisher=Association for Computational Linguistics |doi=10.3115/1073012.1073017|s2cid=6645623 |doi-access=free }}</ref>
* 2012 року ''[[AlexNet]]'' продемонструвала ефективність великих нейронних мереж для розпізнавання зображень, заохотивши підхід великих [[Штучна нейронна мережа|штучних нейронних мереж]] замість старіших, статистичних підходів.
* 2014 року Суцкевер зі співавт. запропонували 380М-параметрову модель ''{{нп|seq2seq}}'' для машинного перекладу, яка використовувала дві мережі [[ДКЧП]].<ref name="2014_Sutskever_et_al">{{cite journal |last1=Sutskever |first1=Ilya |last2=Vinyals |first2=Oriol |last3=Le |first3=Quoc V |date=2014 |title=Sequence to Sequence Learning with Neural Networks |url=https://proceedings.neurips.cc/paper_files/paper/2014/hash/a14ac55a4f27472c5d894ec1c3c743d2-Abstract.html |journal=Advances in Neural Information Processing Systems |publisher=Curran Associates, Inc. |volume=27 |arxiv=1409.3215}}</ref> Її архітектура складається з двох частин. ''Кодувальник'' ({{lang-en|encoder}})&nbsp;— це ДКЧП, яка бере послідовність токенів, і перетворює її на вектор. ''Декодувальник'' ({{lang-en|decoder}})&nbsp;— це інша ДКЧП, яка перетворює вектор назад на послідовність токенів.
* 2014 року показало себе корисним використання вентилів у 130М-параметровій моделі ''{{нп|seq2seq}}'', яка використовувала спрощені [[Вентильний рекурентний вузол|вентильні рекурентні вузли]] (ВРВ). Багданов зі співавт.<ref name="ii1xZ">{{cite journal |last1=Cho |first1=Kyunghyun |last2=van Merrienboer |first2=Bart |last3=Bahdanau |first3=Dzmitry |last4=Bengio |first4=Yoshua |date=2014 |title=On the Properties of Neural Machine Translation: Encoder–Decoder Approaches |url=http://dx.doi.org/10.3115/v1/w14-4012 |journal=Proceedings of SSST-8, Eighth Workshop on Syntax, Semantics and Structure in Statistical Translation |language=en |location=Stroudsburg, PA, USA |publisher=Association for Computational Linguistics |pages=103–111 |doi=10.3115/v1/w14-4012 |s2cid=11336213|arxiv=1409.1259 }}</ref> показали, що ВРВ не кращі й не гірші за вентильну ДКЧП.<ref name="MyUser_Arxiv.org_May_18_2016c">{{cite arXiv |eprint=1412.3555|title=Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling|language=en |last1=Chung |first1=Junyoung |last2=Gulcehre |first2=Caglar |last3=Cho |first3=KyungHyun |last4=Bengio |first4=Yoshua |class=cs.NE |year=2014 }}</ref><ref name ="gruber_jockisch">{{citation |title=Are GRU cells more specific and LSTM cells more sensitive in motive classification of text? |last1=Gruber |first1=N.|last2=Jockisch |first2=A. |year=2020 |journal=Frontiers in Artificial Intelligence |language=en |volume=3 |page=40 | doi = 10.3389/frai.2020.00040|pmid=33733157 |pmc=7861254 |s2cid=220252321 |doi-access=free }}</ref>
* 2014 року Багданов зі співавт.<ref name=":9">{{cite arXiv |eprint=1409.0473 |class=cs.CL |first1=Dzmitry |last1=Bahdanau |first2=Kyunghyun |last2=Cho |title=Neural Machine Translation by Jointly Learning to Align and Translate |language=en |date=2014-09-01 |last3=Bengio |first3=Yoshua}}</ref> вдосконалили попередню модель ''seq2seq'', використавши механізм уваги «адитивного» типу між двома мережами ДКЧП. Проте це ще не був розпаралелюваний (масштабований «скалярнодобутковий») тип уваги, який згодом запропоновали в статті про трансформери 2017 року.
* 2015 року Луонг зі співавт. оцінили відносну продуктивність архітектур моделей глобальної та локальної (віконної) уваги, змішана архітектура уваги виявилася здатною покращити переклади, пропоновані архітектурою Багданова, в той час як використання архітектури локальної уваги скоротило час перекладу.<ref>{{Cite web |title=Google Scholar |url=https://scholar.google.com/scholar_lookup?arxiv_id=1508.04025 |access-date=2023-08-13 |website=scholar.google.com |language=en}}</ref>
* 2016 року в [[Перекладач Google|Перекладачі ''Google'']] поступово замінили старіший підхід [[Статистичний машинний переклад|статистичного машинного перекладу]] новішим підходом на основі [[Нейронний машинний переклад Google|нейронних мереж]], що містив модель ''seq2seq'', поєднану з ДКЧП й механізмом уваги «адитивного» типу. Вони досягли вищого рівня продуктивності, ніж статистичний підхід, розробка якого тривала десять років, лише за дев'ять місяців.<ref name="UJDu8">{{cite news |last=Lewis-Kraus |first=Gideon |date=2016-12-14 |title=The Great A.I. Awakening |language=en-US |work=The New York Times |url=https://www.nytimes.com/2016/12/14/magazine/the-great-ai-awakening.html |access-date=2023-06-22 |archive-url=https://web.archive.org/web/20230524052626/https://www.nytimes.com/2016/12/14/magazine/the-great-ai-awakening.html |archive-date=24 травня 2023 |issn=0362-4331}}</ref><ref name="Y4moj">{{cite arXiv |last1=Wu |first1=Yonghui |title=Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation |language=en |date=2016-09-01 |eprint=1609.08144 |display-authors=1 |last2=Schuster |first2=Mike |last3=Chen |first3=Zhifeng |last4=Le |first4=Quoc V. |last5=Norouzi |first5=Mohammad |last6=Macherey |first6=Wolfgang |last7=Krikun |first7=Maxim |last8=Cao |first8=Yuan |last9=Gao |first9=Qin |last10=Macherey |first10=Klaus |last11=Klingner |first11=Jeff |last12=Shah |first12=Apurva |last13=Johnson |first13=Melvin |last14=Liu |first14=Xiaobing |last15=Kaiser |first15=Łukasz|class=cs.CL }}</ref>
* 2017 року в статті «{{нп|Увага — це все, що вам треба|||Attention Is All You Need}}» запропонували оригінальну (розміру 100М) кодувально-декодувальну трансформерну модель зі швидшим (розпаралелюваним або розкладаним) механізмом уваги. Оскільки ця модель мала труднощі зі збіжністю, запропоновали, що [[темп навчання]] повинен лінійно збільшуватися від 0 до максимального значення на першій частині тренування (тобто 2&nbsp;% від загальної кількості кроків тренування). Метою трансформерної моделі було взяти модель ''seq2seq'' й усунути її рекурентні нейронні мережі, але зберегти її механізм адитивної уваги.<ref name="2017_Attention_Is_All_You_Need">{{cite journal |last1=Vaswani |first1=Ashish |author1-link= Ашиш Васвані |last2=Shazeer |first2=Noam |last3=Parmar |first3=Niki |last4=Uszkoreit |first4=Jakob |last5=Jones |first5=Llion |last6=Gomez |first6=Aidan N |author6-link= Ейдан Гомес |last7=Kaiser |first7=Łukasz |last8=Polosukhin |first8=Illia |title=Attention is All you Need |journal=Advances in Neural Information Processing Systems |language=en |date=2017 |volume=30 |url=https://proceedings.neurips.cc/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf |publisher=Curran Associates, Inc.}}</ref>
* 2018 року в статті про ''[[ELMo]]'' обробляли все речення перед тим, як призначувати вектор вкладення кожному слову. Для обчислення таких глибоких контекстних вкладень для кожного зі слів використали двоспрямовану ДКЧП, покращивши цей напрямок досліджень відносно [[Модель «торба слів»|моделі «торба слів»]] та ''[[word2vec]]''.
* 2018 року трансформер з лише кодувальником використали в моделі ''[[BERT (модель мови)|BERT]]'' (розміром понад 1 мільярд), покращивши результати ''ELMo''.<ref name=":02">{{cite arXiv |eprint=1810.04805v2 |class=cs.CL |first1=Jacob |last1=Devlin |first2=Ming-Wei |last2=Chang |title=BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding |language=en |date=11 жовтня 2018 |last3=Lee |first3=Kenton |last4=Toutanova |first4=Kristina}}</ref>
* 2020 року [[зоровий трансформер]] ({{lang-en|vision transformer}})<ref name="auto2">{{cite arXiv |eprint=2010.11929 |class=cs.CV |first1=Alexey |last1=Dosovitskiy |first2=Lucas |last2=Beyer |title=An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale |language=en |date=2021-06-03 |last3=Kolesnikov |first3=Alexander |last4=Weissenborn |first4=Dirk |last5=Zhai |first5=Xiaohua |last6=Unterthiner |first6=Thomas |last7=Dehghani |first7=Mostafa |last8=Minderer |first8=Matthias |last9=Heigold |first9=Georg |last10=Gelly |first10=Sylvain |last11=Uszkoreit |first11=Jakob}}</ref> та підсилений згорткою трансформер для обробки мовлення<ref name="auto">{{cite arXiv |eprint=2005.08100 |first1=Anmol |last1=Gulati |first2=James |last2=Qin |title=Conformer: Convolution-augmented Transformer for Speech Recognition |language=en |last3=Chiu |first3=Chung-Cheng |last4=Parmar |first4=Niki |last5=Zhang |first5=Yu |last6=Yu |first6=Jiahui |last7=Han |first7=Wei |last8=Wang |first8=Shibo |last9=Zhang |first9=Zhengdong |last10=Wu |first10=Yonghui |last11=Pang |first11=Ruoming |year=2020 |page=|class=eess.AS }}</ref> перевершили [[рекурентні нейронні мережі]], які використовували раніше для бачення й мовлення.
* 2020 року Сюн зі співавт. розв'язали труднощі оригінального трансформера зі збіжністю шляхом нормування шарів ''перед'' багатоголовою увагою (а не після неї). Це називають трансформером '''перед-ШН''' ({{lang-en|pre-LN}}).<ref name="auto1">{{cite arXiv |eprint=2002.04745 |class=cs.LG |first1=Ruibin |last1=Xiong |first2=Yunchang |last2=Yang |title=On Layer Normalization in the Transformer Architecture |language=en |date=2020-06-29 |last3=He |first3=Di |last4=Zheng |first4=Kai |last5=Zheng |first5=Shuxin |last6=Xing |first6=Chen |last7=Zhang |first7=Huishuai |last8=Lan |first8=Yanyan |last9=Wang |first9=Liwei |last10=Liu |first10=Tie-Yan}}</ref>
* 2023 року односпрямовані («авторегресійні») трансформери використовували в [[GPT-3|''GPT''-3]] (розміром понад 100 мільярдів) та інших моделях ''[[Породжувальний попередньо натренований трансформер|GPT]]'' ''[[OpenAI]]''.<ref name="gpt12">{{cite web |date=11 червня 2018 |title=Improving language understanding with unsupervised learning |url=https://openai.com/research/language-unsupervised |url-status=live |archive-url=https://web.archive.org/web/20230318210736/https://openai.com/research/language-unsupervised |archive-date=2023-03-18 |access-date=2023-03-18 |website=openai.com |language=en-US}}</ref><ref name="ngEG3">{{Citation |title=finetune-transformer-lm |date=11 червня 2018 |url=https://github.com/openai/finetune-transformer-lm |language=en |access-date=2023-05-01 |publisher=OpenAI}}</ref>


=== Попередники ===
== Походження ==


Перед трансформерами попередників [[Механізм уваги|механізму уваги]] додали до вентильних рекурентних нейронних мереж, як-от [[Довга короткочасна пам'ять|ДКЧП]] та [[Вентильний рекурентний вузол|вентильних рекурентних вузлів]] (ВРВ), які обробляли набори даних послідовно. Залежність від обчислень попередніх токенів перешкоджала їхній здатності розпаралелювати механізм уваги. 1992 року як альтернативу рекурентним нейронним мережам запропонували контролер швидких ваг, який може навчатися «внутрішніх центрів уваги» ({{lang-en|"internal spotlights of attention"}}).<ref name="attention1993">{{cite conference |last1=Schmidhuber |first1=Jürgen |author-link1=Юрген Шмідхубер |date=1993 |title=Reducing the ratio between learning complexity and number of time-varying variables in fully recurrent nets |publisher=Springer |pages=460–463 |book-title=ICANN 1993 |language=en}}</ref><ref name="transform1992">{{cite journal |last1=Schmidhuber |first1=Jürgen |author-link1=Юрген Шмідхубер |date=1992 |title=Learning to control fast-weight memories: an alternative to recurrent nets. |journal=Neural Computation |language=en |volume=4 |issue=1 |pages=131–139|doi=10.1162/neco.1992.4.1.131 |s2cid=16683347}}</ref> Теоретично, інформація від одного токену може поширюватися довільно далеко вниз за послідовністю, але на практиці [[проблема зникання градієнту]] лишає стан моделі наприкінці довгого речення без точної, добутної інформації про попередні токени.
До трансформерів більшість сучасних системи ОПМ покладалися на вентильні РНМ, такі як [[Довга короткочасна пам'ять|ДКЧП]] та [[Вентильний рекурентний вузол|вентильні рекурентні вузли]] (ВРВ), з доданими [[Механізм уваги|механізмами уваги]] ({{lang-en|attention mechanisms}}). Трансформери будують на цих технологіях уваги без застосування структури РНМ, підкреслюючи той факт, що механізми уваги самі по собі можуть відповідати продуктивності РНМ з увагою.


Продуктивність старих моделей покращили доданням механізму уваги, який дозволив моделі мати доступ до будь-якої попередньої точки вздовж послідовності. Шар уваги зважує всі попередні стани відповідно до навченої міри доречності, надаючи доречну інформацію про віддалені токени. Це виявилося особливо корисним у [[Машинний переклад|мовному перекладі]], де для значення слова в реченні може бути важливим віддалений контекст. Вектор стану був доступним лише після обробки ''останнього'' англійського слова, наприклад, під час перекладу його з французької моделлю ДКЧП. Хоча теоретично такий вектор зберігає інформацію про все оригінальне речення, на практиці ця інформація зберігається погано. Якщо додано механізм уваги, декодувальник отримує доступ до векторів стану кожного вхідного слова, а не лише останнього, й може навчитися ваг уваги, які вказують, скільки уваги приділяти кожному вхідному вектору стану. Розширення моделей ''{{нп|seq2seq}}'' механізмом уваги вперше втілили в контексті машинного перекладу Багданов, Чо та Бенжіо 2014 року.<ref name="inventors">{{cite arXiv |last1=Bahdanau |last2=Cho |first2=Kyunghyun |last3=Bengio |first3=Yoshua |date=1 вересня 2014 |title=Neural Machine Translation by Jointly Learning to Align and Translate |language=en |class=cs.CL |eprint=1409.0473}}</ref><ref name="inventconfirm">{{cite arXiv |last1=Luong |first1=Minh-Thang |last2=Pham |first2=Hieu |last3=Manning |first3=Christopher D. |date=17 серпня 2015 |title=Effective Approaches to Attention-based Neural Machine Translation |language=en |class=cs.CL |eprint=1508.04025}}</ref>
=== Послідовна обробка ===


=== Розкладна увага ===
Вентильні РНМ обробляють лексеми послідовно, підтримуючи вектор стану, що містить подання даних, побачене після кожної лексеми. Щоб обробити ''n''-ту лексему, ця модель поєднує стан, що подає речення по лексему ''n''&nbsp;&minus;&nbsp;1, з інформацією про цю нову лексему, щоби створити новий стан, що подає речення по лексему ''n''. Теоретично, інформація від однієї лексеми може поширюватися послідовністю як завгодно далеко, якщо в кожній точці стан продовжує кодувати контекстну інформацію про цю лексему. На практиці цей механізм має вади: [[проблема зникання градієнту]] залишає стан моделі в кінці довгого речення без точної, добутної<!-- https://e2u.org.ua/s?w=extractable&dicts=5&highlight=on&filter_lines=on --> інформації про попередні лексеми.


2016 року високорозпаралелювану ''розкладну увагу'' ({{lang-en|decomposable attention}}) успішно поєднали з [[Нейронна мережа прямого поширення|мережею прямого поширення]].<ref>{{cite web|url=https://paperswithcode.com/paper/a-decomposable-attention-model-for-natural|title=Papers with Code – A Decomposable Attention Model for Natural Language Inference|website=paperswithcode.com|language=en}}</ref> Це вказувало на те, що механізми уваги були потужними самі по собі, й що послідовна рекурентна обробка даних не була необхідною для досягнення приросту якості рекурентних нейронних мереж з увагою. 2017 року Васвані зі співавт. також запропонували замінити рекурентні нейронні мережі самоувагою й розпочали зусилля щодо оцінки цієї ідеї.<ref name="2017_Attention_Is_All_You_Need" /> Трансформери, використовуючи механізм уваги, обробляючи всі токени одночасно, розраховували «м'які» ваги між ними на послідовних шарах. Оскільки механізм уваги використовує інформацію лише про інші токени з нижчих шарів, його можливо обчислювати для всіх токенів паралельно, що призводить до покращення швидкості тренування.
=== Увага ===


== Тренування ==
Цю проблему було розв'язано механізмами уваги. Механізми уваги дозволяють моделі робити висновки зі стану в будь-якій ранішій точці протягом послідовності. Шар уваги має доступ до всіх попередніх станів, і зважує їх відповідно до навченої міри або доречності, забезпечуючи доречну інформацію про віддалені лексеми.


=== Методи стабілізування тренування ===
Яскравим прикладом цінності уваги є [[мовний переклад]], у якому для визначення значення слова в реченні є важливим контекст. У системі перекладу з англійської українською перше слово україномовного виходу найімовірніше сильно залежить від перших декількох слів англомовного входу. Проте в класичній моделі ДКЧП, щоби виробити перше слово україномовного виходу, моделі дається лише вектор стану ''крайнього'' англомовного слова. Теоретично цей вектор може кодувати інформацію про все англомовне речення, даючи моделі все необхідне знання. На практиці ДКЧП часто зберігає цю інформацію погано. Для подолання цієї проблеми може бути додано механізм уваги: декодувальникові надають доступ до векторів стану кожного вхідного англомовного слова, а не лише крайнього, і він може навчатися ваг уваги, що диктують, як багато уваги приділяти кожному з векторів стану англомовного входу.


Архітектура звичайного трансформера мала труднощі зі збіжністю. У первинній статті<ref name="2017_Attention_Is_All_You_Need" /> автори радили використовувати прогрівання темпу навчання. Тобто, темп навчання повинен лінійно збільшуватися від 0 до максимального значення на першій частині тренування (зазвичай радять 2&nbsp;% від загальної кількості кроків тренування), перш ніж знову зменшуватися.
При додаванні до РНМ механізми уваги покращують продуктивність. Розробка архітектури Трансформера показала, що механізми уваги були потужними самі по собі, і що послідовна рекурентна обробка даних не була необхідною для досягання виграшу в продуктивності РНМ з увагою. Трансформери використовують механізм уваги без РНМ, обробляючи всі лексеми одночасно, й обчислюючи ваги уваги між ними в послідовних шарах.

Праця 2020 виявила, що використання {{нпні|Шарове нормування|шарового нормування||Layer normalization}} ''перед'' (а не після) багатоголової уваги та шарів прямого поширення стабілізує тренування, не вимагаючи прогрівання темпу навчання.<ref name="auto1"/>

Модель ''GT''<sup>3</sup> поєднує ''CWTE'', ''SWTE'' та ''TTE'' за допомогою самопристосовного вентильного шару, уможливлюючи ефективне й дієве злиття трьох типів ознак для наскрізного керованого текстом передбачування ринку акцій.<ref>{{Cite journal |last1=Chen |first1=Jia |last2=Chen |first2=Tao |last3=Shen |first3=Mengqi |last4=Shi |first4=Yunhai |last5=Wang |first5=Dongjing |last6=Zhang |first6=Xin |date=2022-09-01 |title=Gated three-tower transformer for text-driven stock market prediction |url=https://doi.org/10.1007/s11042-022-11908-1 |journal=Multimedia Tools and Applications |language=en |volume=81 |issue=21 |pages=30093–30119 |doi=10.1007/s11042-022-11908-1 |s2cid=247987240 |issn=1573-7721}}</ref>

=== Попереднє тренування&nbsp;— тонке настроювання ===

Трансформери, як правило, підлягають [[Самокероване навчання|самокерованому навчанню]], що складається з [[Некероване навчання|некерованого]] попереднього тренування, з наступним [[Кероване навчання|керованим]] [[Тонке настроювання (глибоке навчання)|тонким настроюванням]]. Попереднє тренування, як правило, виконують на більшому наборі даних, ніж тонке настроювання, через обмежену доступність {{нп|Мічені дані|мічених||Labeled data}} тренувальних даних. До задач попереднього тренування та тонкого настроювання зазвичай належать:

* [[моделювання мов]]<ref name=":6" />
* передбачування наступного речення<ref name=":6" />
* [[Питально-відповідальна система|відповідання на питання]]<ref name=":7" />
* [[Розуміння природної мови|розуміння прочитаного]]
* [[Аналіз тональності тексту|аналіз тональності]]<ref name="2017_Attention_Is_All_You_Need" />
* [[Автоматичне реферування|перефразовування]]<ref name="2017_Attention_Is_All_You_Need" />

У статті про трансформер ''T''5<ref name=":0" /> задокументовано велику кількість завдань для попереднього тренування. Деякі приклади:

* відновлення пошкодженого тексту: <code>Thank you <X> me to your party <Y> week.</code> -> <code><X> for inviting <Y> last <Z></code>, де <code><Z></code> означає «кінець виведення».
* переклад: <code>translate English to German: That is good.</code> -> <code>Das ist gut.</code>.
* оцінка граматичної прийнятності речення: <code>cola sentence: The course is jumping well.</code> -> <code>not acceptable</code>.

== Застосування ==

Трансформер досяг великого успіху в [[Обробка природної мови|обробці природної мови]] (ОПМ), наприклад, у задачах [[Машинний переклад|машинного перекладу]] та передбачування [[Часовий ряд|часових рядів]]. Багато [[Велика мовна модель|великих мовних моделей]], як-от [[GPT-2|''GPT''-2]], [[GPT-3|''GPT''-3]], [[GPT-4|''GPT''-4]], ''[[Anthropic#Claude|Claude]]'', ''[[BERT (модель мови)|BERT]]'', ''XLNet'', ''RoBERTa'' та ''[[ChatGPT]]'', демонструють здатність трансформерів виконувати широкий спектр пов'язаних з ОПМ завдань, і мають потенціал знаходити застосування в реальному світі. До них можуть належати:

* [[машинний переклад]]
* [[Автоматичне реферування|реферування документів]]
* [[Породжування природної мови|породжування документів]]
* [[розпізнавання іменованих сутностей]] (РІС)<ref>{{cite journal |last1=Kariampuzha |first1=William |last2=Alyea |first2=Gioconda |last3=Qu |first3=Sue |last4=Sanjak |first4= Jaleal |last5=Mathé |first5=Ewy |last6=Sid |first6=Eric |last7= Chatelaine |first7=Haley |last8=Yadaw |first8=Arjun |last9=Xu |first9=Yanji |last10=Zhu |first10=Qian |date=2023 |title=Precision information extraction for rare disease epidemiology at scale |journal=Journal of Translational Medicine |language=en |volume=21 |issue=1 |page=157 |doi=10.1186/s12967-023-04011-y |pmid=36855134 |pmc=9972634 |doi-access=free }}</ref>
* {{нп|Секвенувальний аналіз|аналіз біологічних послідовностей||Sequence analysis}}
* [[Програмування|написання комп'ютерного коду]] на основі вимог, висловлених природною мовою
* [[Комп'ютерне бачення|розуміння відео]].

Окрім застосувань в ОПМ, він також досяг успіху в інших галузях, серед яких [[комп'ютерне бачення]] та застосування у [[Передбачування структури білків|згортанні білків]] (як-от ''{{нп|AlphaFold}}'').

Як ілюстративний приклад, ''Ithaca''&nbsp;— це трансформер з лише кодувальником із ''трьома'' головами виходу. Він бере на вході давньогрецькі написи як послідовності символів, але з нерозбірливими символами, заміненими на «-». Його три голови виходу відповідно виводять розподіли ймовірностей над грецькими символами, місцезнаходженням напису, та його датою.<ref>{{Cite journal |last1=Assael |first1=Yannis |last2=Sommerschield |first2=Thea |last3=Shillingford |first3=Brendan |last4=Bordbar |first4=Mahyar |last5=Pavlopoulos |first5=John |last6=Chatzipanagiotou |first6=Marita |last7=Androutsopoulos |first7=Ion |last8=Prag |first8=Jonathan |last9=de Freitas |first9=Nando |date=березень 2022 |title=Restoring and attributing ancient texts using deep neural networks |journal=Nature |language=en |volume=603 |issue=7900 |pages=280–283 |doi=10.1038/s41586-022-04448-z |pmid=35264762 |pmc=8907065 |bibcode=2022Natur.603..280A |issn=1476-4687}}</ref>

== Втілення ==

Трансформерову модель було втілено в стандартних [[Програмний каркас|системах]] глибокого навчання, як-от ''[[TensorFlow]]'' та ''[[PyTorch]]''.

''Transformers''&nbsp;— бібліотека, яку надає ''[[Hugging Face]]'', і яка пропонує архітектури на основі трансформерів та попередньо натреновані моделі.<ref name="wolf2020" />


== Архітектура ==
== Архітектура ==
[[Файл:The-Transformer-model-architecture.png|thumb|400px|Ілюстрація основних складових моделі трансформера з первинної статті, де шари нормувалися після багатоголової уваги (а не перед нею).]]


Всі трансформери мають однакові основні складові:
Подібно до раніших моделей, трансформер використовує кодувально-декодувальну архітектуру. Кодувальник складається з кодувальних шарів, що оброблюють вхід ітеративно, шар за шаром, тоді як декодувальник складається з декодувальних шарів, які роблять те саме з виходом кодувальника.


* Токенувальники, які перетворюють текст на токени.
Функцією кожного з кодувальних шарів є породжувати кодування, що містять інформацію про те, які частини входів є релевантними одна до одної. Він передає свої кодування наступному кодувальному шарові як входи. Кожен декодувальний шар робить протилежне, беручи всі ці кодування й використовуючи вбудовану до них контекстну інформацію, щоби породжувати послідовність виходу.<ref>{{Cite web|url=https://indico.io/blog/sequence-modeling-neural-networks-part2-attention-models/|title=Sequence Modeling with Neural Networks (Part 2): Attention Models|date=2016-04-18|website=Indico|access-date=2019-10-15|archive-date=21 жовтня 2020|archive-url=https://web.archive.org/web/20201021203352/https://indico.io/blog/sequence-modeling-neural-networks-part2-attention-models/}} {{ref-en}}</ref> Для цього кожен кодувальний та декодувальний шар використовує механізм уваги.
* Єдиний шар вкладення, який перетворює токени та положення токенів на векторні подання.
* Трансформувальні шари, які виконують повторювані перетворення над векторними поданнями, виділяючи все більше й більше мовознавчої інформації. Вони складаються з почергових шарів уваги та прямого поширення.
* (необов'язковий) Шар роз-вкладення, який перетворює остаточні векторні подання назад на розподіл імовірності над токенами.


Трансформувальні шари можуть бути одного з двох типів, ''кодувальник'' ({{lang-en|encoder}}) та ''декодувальник'' ({{lang-en|decoder}}). У первинній статті використовували обидва типи, тоді як пізніші моделі містили лише один з них. ''[[BERT (модель мови)|BERT]]''&nbsp;— приклад лише кодувальникової моделі, ''[[Породжувальний попередньо натренований трансформер|GPT]]''&nbsp;— лише декодувальникові моделі.
Для кожного входу увага зважує доречність кожного іншого входу та робить висновки з них, щоби виробляти вихід.<ref name=":1">{{Cite web|url=http://jalammar.github.io/illustrated-transformer/|title=The Illustrated Transformer|last=Alammar|first=Jay|website=jalammar.github.io|access-date=2019-10-15|archive-date=18 жовтня 2020|archive-url=https://web.archive.org/web/20201018061610/https://jalammar.github.io/illustrated-transformer/}} {{ref-en}}</ref> Кожен декодувальний шар має додатковий механізм уваги, що дістає інформацію з виходів попередніх декодувальників перед тим, як цей декодувальник дістає інформацію з кодувань.


=== Вхід ===
Як кодувальні, так і декодувальні шари мають [[Нейронна мережа прямого поширення|нейронну мережу прямого поширення]] для додаткової обробки виходів, та містять за́лишкові з'єднання й кроки шарового унормовування ({{lang-en|layer normalization}}).<ref name=":1" />


Вхідний текст розбирає на токени токенувальник, найчастіше використовують [[Лексичний аналіз|токенувальник]] {{нп|Діграмне кодування|діграмним кодуванням||Byte pair encoding}}, і кожен токен перетворюється на вектор шляхом пошуку в таблиці [[вкладення слів]]. Потім до вкладення слова додається позиційна інформація токена.
=== Масштабована скалярнодобуткова увага ===


=== Кодувально—декодувальна архітектура ===
Будівельними блоками трансформера є вузли масштабованої скалярнодобуткової уваги ({{lang-en|scaled dot-product attention units}}). Коли трансформеровій моделі передають речення, ваги уваги між усіма лексемами обчислюються одночасно. Вузол уваги виробляє вкладення для кожної лексеми в контексті, які містять інформацію про саму лексему, разом зі зваженим поєднанням інших релевантних лексем, кожну з яких зважено за вагою уваги до неї.


Подібно до раніших моделей ''{{нп|seq2seq}}'', оригінальна модель трансформера використовувала '''кодува́льно—декодува́льну''' ({{lang-en|encoder-decoder}}) архітектуру. Кодувальник складається з кодувальних шарів, що оброблюють токени входу ітеративно, шар за шаром, тоді як декодувальник складається з декодувальних шарів, які ітеративно оброблюють вихід кодувальника, а також токени виходу декодувальника до цього моменту.
Для кожного вузла уваги трансформерова модель навчається трьох вагових матриць: ваг запиту ({{lang-en|query weights}}) <math>W_Q</math>, ваг ключа ({{lang-en|key weights}}) <math>W_K</math>, та ваг значення ({{lang-en|value weights}}) <math>W_V</math>. Для кожної лексеми <math>i</math> [[вкладення слова]] входу <math>x_i</math> множиться на кожну з цих трьох матриць, даючи вектор запиту <math>q_i = x_iW_Q</math>, вектор ключа <math>k_i = x_iW_K</math>, та вектор значення <math>v_i=x_iW_V</math>. Ваги уваги обчислюються з використанням векторів запиту та ключа: вага уваги <math>a_{ij}</math> з боку лексеми <math>i</math> до лексеми <math>j</math> є скалярним добутком <math>q_i</math> на <math>k_j</math>. Ваги уваги ділять на квадратний корінь розміру векторів ключа, <math>\sqrt{d_k}</math>, що стабілізує градієнти під час тренування, та пропускають через ''[[softmax]]'', що унормовує ці ваги. Той факт, що <math>W_Q</math> та <math>W_K</math> є різними матрицями, дає увазі можливість бути несиметричною: якщо лексема <math>i</math> звертає увагу на лексему <math>j</math> (тобто, <math>q_i\cdot k_j</math> є великим), то це не обов'язково означає, що лексема <math>j</math> звертає увагу на лексему <math>i</math> (тобто, <math>q_j\cdot k_i</math> може бути малим). Виходом вузла уваги для лексеми <math>i</math> є зважена сума векторів значення всіх лексем, зважених на <math>a_{ij}</math>, увагу з боку лексеми <math>i</math> до кожної з лексем.


Функція кожного кодувального шару полягає в породжуванні контекстуалізованих подань токенів, в яких кожне подання відповідає токену, який «примішує» інформацію з інших токенів входу через механізм самоуваги. Кожен декодувальний шар містить два підшари уваги: (1) перехресну увагу для охоплення виходу кодувальника (контекстуалізованих подань токенів входу) та (2) самоувагу для «примішування» інформації з-поміж токенів входу до цього декодувальника (тобто токенів, породжених до цього моменту під час висновування).<ref>{{cite web|url=https://indico.io/blog/sequence-modeling-neural-networks-part2-attention-models/|title=Sequence Modeling with Neural Networks (Part 2): Attention Models|date=2016-04-18|website=Indico|language=en|access-date=2019-10-15|archive-date=2020-10-21|archive-url=https://web.archive.org/web/20201021203352/https://indico.io/blog/sequence-modeling-neural-networks-part2-attention-models/|url-status=live}}</ref><ref name=":1">{{cite web |last=Alammar |first=Jay |title=The Illustrated Transformer |url=http://jalammar.github.io/illustrated-transformer/ |url-status=live |archive-url=https://web.archive.org/web/20201018061610/https://jalammar.github.io/illustrated-transformer/ |archive-date=2020-10-18 |access-date=2019-10-15 |website=jalammar.github.io |language=en}}</ref>
Обчислення уваги ({{lang-en|attention}}) для всіх лексем може бути виражено через одне велике матричне обчислення з використанням функції ''[[softmax]]'', що є корисним для тренування через обчислювальні оптимізації матричних операцій, які обчислюють матричні операції швидко. Матриці <math>Q</math>, <math>K</math> та <math>V</math> визначено як матриці, в яких <math>i</math>-ті рядки є векторами <math>q_i</math>, <math>k_i</math> та <math>v_i</math> відповідно.


Як кодувальні, так і декодувальні шари мають [[Нейронна мережа прямого поширення|нейронну мережу прямого поширення]] для додаткової обробки виходів, та містять за́лишкові з'єднання й кроки шарового нормування ({{lang-en|layer normalization}}).<ref name=":1" />
<math>\begin{align}

=== Масштабована скалярнодобуткова увага ===

Будівельними блоками трансформера є вузли масштабованої [[Скалярний добуток|скалярнодобуткової]] [[Увага (машинне навчання)|уваги]] ({{lang-en|scaled dot-product attention units}}). Для кожного вузла уваги трансформерна модель навчається трьох вагових матриць: ваг запиту ({{lang-en|query weights}}) <math>W_Q</math>, ваг ключа ({{lang-en|key weights}}) <math>W_K</math>, та ваг значення ({{lang-en|value weights}}) <math>W_V</math>. Для кожного токена <math>i</math> подання токена <math>x_i</math> множиться на кожну з цих трьох матриць, даючи вектор запиту <math>q_i = x_iW_Q</math>, вектор ключа <math>k_i = x_iW_K</math>, та вектор значення <math>v_i=x_iW_V</math>. Ваги уваги обчислюються з використанням векторів запиту та ключа: вага уваги <math>a_{ij}</math> з боку токена <math>i</math> до токена <math>j</math> є [[Скалярний добуток|скалярним добутком]] <math>q_i</math> на <math>k_j</math>. Ваги уваги ділять на квадратний корінь розміру векторів ключа, <math>\sqrt{d_k}</math>, що стабілізує градієнти під час тренування, та пропускають через ''[[softmax]]'', що унормовує ці ваги. Той факт, що <math>W_Q</math> та <math>W_K</math> є різними матрицями, дає увазі можливість бути несиметричною: якщо токен <math>i</math> звертає увагу на токен <math>j</math> (тобто, <math>q_i\cdot k_j</math> є великим), то це не обов'язково означає, що токен <math>j</math> звертає увагу на токен <math>i</math> (тобто, <math>q_j\cdot k_i</math> може бути малим). Вихід вузла уваги для токена <math>i</math> це зважена сума векторів значення всіх токенів, зважених на <math>a_{ij}</math>, увагу з боку токена <math>i</math> до кожного з токенів.

Обчислення уваги ({{lang-en|attention}}) для всіх токенів можливо виразити одним великим матричним обчисленням з використанням функції ''[[softmax]]'', що корисно для тренування завдяки обчислювальним оптимізаціям матричних операцій, які обчислюють матричні операції швидко. Матриці <math>Q</math>, <math>K</math> та <math>V</math> визначено як матриці, в яких <math>i</math>-ті рядки є векторами <math> q_i </math>, <math>k_i</math> та <math>v_i</math> відповідно. Тоді увагу можливо подати як

<math display="block">\begin{align}
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\mathrm{T}}{\sqrt{d_k}}\right)V
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\mathrm{T}}{\sqrt{d_k}}\right)V
\end{align}</math>
\end{align}</math>

де ''softmax'' береться над горизонтальною віссю.


==== Багатоголова увага ====
==== Багатоголова увага ====


Один набір матриць <math>\left( W_Q, W_K, W_V \right)</math> називають ''головою уваги'' ({{lang-en|attention head}}), й кожен шар у трансформеровій моделі має декілька голів уваги. В той час як кожна з голів уваги звертає увагу на лексеми, що є релевантними до кожної з лексем, з декількома головами уваги ця модель може робити це для різних визначень «релевантності». Крім того, поле впливу, що подає релевантність, може поступово розширюватися в послідовних шарах. Багато трансформерових голів уваги кодують відношення релевантності, що є змістовними для людей. Наприклад, одні голови можуть звертати найбільше уваги на наступне слово, в той час як інші переважно звертають увагу дієслів на їхні безпосередні об'єкти.<ref>{{Cite journal|last1=Clark|first1=Kevin|last2=Khandelwal|first2=Urvashi|last3=Levy|first3=Omer|last4=Manning|first4=Christopher D.|date=August 2019|title=What Does BERT Look at? An Analysis of BERT's Attention|url=https://www.aclweb.org/anthology/W19-4828|journal=Proceedings of the 2019 ACL Workshop BlackboxNLP: Analyzing and Interpreting Neural Networks for NLP|location=Florence, Italy|publisher=Association for Computational Linguistics|pages=276–286|doi=10.18653/v1/W19-4828|doi-access=free|accessdate=17 жовтня 2020|archive-date=21 жовтня 2020|archive-url=https://web.archive.org/web/20201021211357/https://www.aclweb.org/anthology/W19-4828/}} {{ref-en}}</ref> Обчислення для кожної з голів уваги можуть виконуватися паралельно, що уможливлює швидку обробку. Виходи шару уваги зчіплюють, щоби передавати їх до шарів нейронних мереж прямого поширення.
Один набір матриць <math>\left( W_Q, W_K, W_V \right)</math> називають ''головою уваги'' ({{lang-en|attention head}}), й кожен шар у трансформерній моделі має декілька голів уваги. В той час як кожна з голів уваги звертає увагу на токени, доречні для кожного з токенів, декілька голів уваги дозволяють моделі робити це для різних визначень «доречності». Крім того, поле впливу, що подає доречність, може поступово розширюватися в послідовних шарах. Багато трансформерних голів уваги кодують відношення доречності, змістовні для людей. Наприклад, одні голови можуть звертати найбільше уваги на наступне слово, в той час як інші переважно звертають увагу дієслів на їхні безпосередні об'єкти.<ref>{{cite journal|last1=Clark|first1=Kevin |last2=Khandelwal|first2=Urvashi|last3=Levy|first3=Omer|last4=Manning|first4=Christopher D.|date=серпень 2019|title=What Does BERT Look at? An Analysis of BERT's Attention|url=https://www.aclweb.org/anthology/W19-4828|journal=Proceedings of the 2019 ACL Workshop BlackboxNLP: Analyzing and Interpreting Neural Networks for NLP|language=en|location=Florence, Italy|publisher=Association for Computational Linguistics|pages=276–286|doi=10.18653/v1/W19-4828|doi-access=free|access-date=2020-05-20|archive-date=2020-10-21|archive-url=https://web.archive.org/web/20201021211357/https://www.aclweb.org/anthology/W19-4828/|url-status=live|arxiv=1906.04341}}</ref> Обчислення для всіх голів уваги можуть виконуватися [[Паралельні обчислення|паралельно]], що уможливлює швидку обробку. Виходи шару уваги зчіплюють, щоби передавати їх до шарів [[Нейронна мережа прямого поширення|нейронних мереж прямого поширення]].

Конкретно, покладімо, що декілька голів уваги проіндексовано через <math>i</math>, тоді маємо <math display="block">\text{MultiheadedAttention}(Q, K, V) = \text{Concat}_{i \in [\# heads]}(\text{Attention}(XW^Q_i, XW^K_i, XW^V_i)) W^O</math> де матриця <math>X</math>&nbsp;— зчеплення вкладень слів, матриці <math>W^Q_i, W^K_i, W^V_i</math>&nbsp;— «проєкційні матриці», що належать окремій голові уваги <math>i</math>, а <math>W^O</math>&nbsp;— кінцева проєкційна матриця, що належить всій багатоголовій структурі уваги.

==== Маскована увага ====

Може бути необхідно вирізати зв'язки уваги між деякими парами слів. Наприклад, декодувальник для позиції токена <math>t</math> не повинен мати доступу до позиції токена <math>t+1</math>. Цього можливо досягти перед етапом ''softmax'' додаванням матриці маски ({{lang-en|mask matrix}}) <math>M</math>, що має значення <math>-\infty</math> у місцях, де зв'язок уваги має бути обрізано, й <math>0</math> в інших місцях:<math display="block">\begin{align}
\text{MaskedAttention}(Q, K, V) = \text{softmax}\left(M + \frac{QK^\mathrm{T}}{\sqrt{d_k}}\right)V
\end{align}</math>


=== Кодувальник ===
=== Кодувальник ===


Кожен кодувальник ({{lang-en|encoder}}) складається з двох головних складових: механізму самоуваги ({{lang-en|self-attention mechanism}}), та нейронної мережі прямого поширення. Механізм самоуваги приймає кодування входу з попереднього кодувальника, та зважує їхню релевантність одне одному, щоби породити кодування виходу. Нейронна мережа прямого поширення здійснює подальшу обробку кожного кодування виходу окремо. Ці кодування виходу відтак передають наступному кодувальникові як його вхід, так само як і декодувальникам.
Кожен кодувальник ({{lang-en|encoder}}) складається з двох головних складових: механізму самоуваги ({{lang-en|self-attention mechanism}}), та нейронної мережі прямого поширення. Механізм самоуваги приймає кодування входів з попереднього кодувальника, та зважує їхню доречність одне одному, щоби породити кодування виходів. Нейронна мережа прямого поширення здійснює подальшу обробку кодування кожного виходу окремо. Ці кодування виходів відтак передають наступному кодувальникові як його вхід, так само як і декодувальникам.

Перший кодувальник отримує як вхід не кодування, а позиційну інформацію та [[Вкладення слів|вкладення]] послідовності входу. Позиційна інформація необхідна трансформерові, щоби використовувати порядок послідовності, оскільки жодна інша частина трансформера його не використовує.<ref name="2017_Attention_Is_All_You_Need" />

Кодувальник двоспрямований. Увага може звертатися на токени, розташовані як до, так і після поточного токена. Токени використовують замість слів для врахування [[Вкладення слів#Обмеження|багатозначності]].
[[Файл:Positional encoding.png|thumb|Діаграма [[Синусоїда|синусоїдного]] позиційного кодування з параметрами <math>N=10000, d=100</math>]]

==== Позиційне кодування ====

Позиційне кодування ({{lang-en|positional encoding}})&nbsp;— це векторне подання фіксованого розміру, що охоплює відносні позиції токенів у цільовій послідовності: воно надає моделі трансформера інформацію про те, ''де'' знаходяться слова у вхідній послідовності.

Позиційне кодування визначають як функцію типу <math>f: \R \to \R^d; d \in \mathbb{Z}, d > 0</math>, де <math>d</math>&nbsp;— додатне парне [[ціле число]]. Повне позиційне кодування, як визначено в первинній статті, задається рівнянням <math display="block">(f(t)_{2k}, f(t)_{2k+1}) = (\sin(\theta), \cos(\theta)) \quad \forall k \in \{0, 1, \ldots, d/2 - 1\}</math> де <math>\theta = \frac{t}{r^k}, r = N^{2/d}</math>.

Тут, <math>N</math>&nbsp;— вільний параметр, який повинен бути значно більшим за найбільше <math>k</math>, яке вводитимуть до функції позиційного кодування. У первинній статті<ref name="2017_Attention_Is_All_You_Need" /> автори обрали <math>N=10000</math>.

Ця функція має простіший вигляд при записі як комплексна функція типу <math>f: \R \to \mathbb C^{d/2}</math><math display="block">f(t) = \left(e^{it/r^k}\right)_{k=0, 1, \ldots, \frac d 2 - 1}</math> де <math>r = N^{2/d}</math>.

Основна причина, через яку автори обрали цю функцію за позиційне кодування, полягає в тому, що вона дозволяє виконувати зміщення як лінійні перетворення: <math display="block">f(t + \Delta t) = \mathrm{diag}(f(\Delta t)) f(t)</math> де <math>\Delta t \in \R</math>&nbsp;— відстань, на яку потрібно здійснити зміщення. Це дозволяє трансформерові брати будь-яку закодовану позицію й знаходити кодування позиції на ''n'' кроків вперед або назад за допомогою множення матриць.

Беручи лінійну суму, будь-яку згортку також можливо втілити як лінійні перетворення:<math display="block">\sum_j c_j f(t + \Delta t_j) = \left(\sum_j c_j \,\mathrm{diag}(f(\Delta t_j))\right) f(t)</math>для будь-яких сталих <math>c_j</math>. Це дозволяє трансформерові брати будь-яку закодовану позицію й знаходити лінійну суму закодованих позицій її сусідів. Ця сума закодованих позицій, коли її подати до механізму уваги, створюватиме ваги уваги на її сусідах, дуже подібно до того, що відбувається в [[Модель мови|моделі мови]] на [[Згорткова нейронна мережа|згортковій нейронній мережі]]. За словами авторів, «ми припустили, що це дозволить моделі легко навчатися звертати увагу за відносною позицією».


У типових втіленнях усі операції здійснюються над дійсними числами, а не комплексними, але оскільки [[Комплексне число#Комплексні числа, представлені в матричній формі|множення комплексних чисел можливо втілити як множення дійснозначних матриць 2-на-2]], то різниця лише в записі.
Перший кодувальник отримує як вхід не кодування, а інформацію про положення та [[Вкладення слів|вкладення]] послідовності входу. Інформація про положення є необхідною трансформерові, щоби використовувати порядок послідовності, оскільки жодна інша частина трансформера його не використовує.<ref name=":0" />


=== Декодувальник ===
=== Декодувальник ===


Кожен декодувальник ({{lang-en|decoder}}) складається з трьох головних складових: механізму самоуваги, механізму уваги над кодуваннями, та нейронної мережі прямого поширення. Декодувальник працює подібно до кодувальника, крім вставленого додаткового механізму уваги, що натомість дістає релевантну інформацію з кодувань, породжених кодувальниками.<ref name=":0" /><ref name=":1" />
Кожен декодувальник ({{lang-en|decoder}}) складається з трьох головних складових: механізму самоуваги, механізму уваги над кодуваннями, та нейронної мережі прямого поширення. Декодувальник працює подібно до кодувальника, але додатково вставляється механізм уваги, що натомість дістає доречну інформацію з кодувань, породжених кодувальниками. Цей механізм також можуть називати ''кодувально-декодувальною увагою'' ({{lang-en|encoder-decoder attention}}).<ref name="2017_Attention_Is_All_You_Need" /><ref name=":1" />


Подібно до першого кодувальника, перший декодувальник бере як свій вхід не кодування, а інформацію про положення та вкладення послідовності виходу. Трансформер мусить не використовувати для передбачування виходу поточний або майбутній вихід, тож послідовність виходу мусить бути частково приховано, щоби запобігти цьому зворотному потокові інформації.<ref name=":0" /> За крайнім декодувальником йде завершальне [[Множення матриць|лінійне перетворення]] та шар ''[[softmax]]'', щоби виробляти ймовірності виходу над словником.
Подібно до першого кодувальника, перший декодувальник бере як свій вхід не кодування, а позиційну інформацію та вкладення послідовності виходу. Трансформер мусить не використовувати для передбачування виходу поточний або майбутній вихід, тож послідовність виходу мусить бути частково масковано, щоби запобігти цьому зворотному потокові інформації.<ref name="2017_Attention_Is_All_You_Need" /> Це уможливлює [[Авторегресійна модель|авторегресійне]] породжування тексту. Для всіх голів уваги не можна звертати увагу на наступні токени. За крайнім декодувальником йде завершальне [[Множення матриць|лінійне перетворення]] та шар ''[[softmax]]'', щоби виробляти ймовірності виходу над словником.


Всі моделі серії ''[[Породжувальний попередньо натренований трансформер|GPT]]'' від ''OpenAI'' мають лише декодувальну архітектуру.
=== Альтернативи ===


=== Термінологія ===
Тренування архітектур на трансформеровій основі може бути витратним, особливо для довгих речень.<ref>{{Cite arxiv |eprint=2001.04451|last1=Kitaev|first1=Nikita|last2=Kaiser|first2=Łukasz|last3=Levskaya|first3=Anselm|title=Reformer: The Efficient Transformer|year=2020|class=cs.LG}} {{ref-en}}</ref> До альтернативних архітектур належить Реформер ({{lang-en|Reformer}}, що знижує обчислювальне навантаження з <math>O(N^2)</math> до <math>O(N\ln N)</math>) та моделі на кшталт ''ETC''/''BigBird'' (які можуть знижувати його до <math>O(N)</math>),<ref>{{Cite web|title=Constructing Transformers For Longer Sequences with Sparse Attention Methods|url=https://ai.googleblog.com/2021/03/constructing-transformers-for-longer.html|access-date=2021-05-28|website=Google AI Blog|language=en|archive-date=18 вересня 2021|archive-url=https://web.archive.org/web/20210918150757/https://ai.googleblog.com/2021/03/constructing-transformers-for-longer.html}} {{ref-en}}</ref> де <math>N</math> є довжиною послідовності. Це здійснюється шляхом застосування {{нп|Локально-чутливе гешування|локально-чутливого гешування||Locality-sensitive hashing}} та оборотних шарів ({{lang-en|reversible layers}}).<ref>{{Cite web|url=https://www.coursera.org/lecture/attention-models-in-nlp/tasks-with-long-sequences-suzNH|title=Tasks with Long Sequences - Chatbot|website=Coursera|accessdate=24 жовтня 2020|archive-date=26 жовтня 2020|archive-url=https://web.archive.org/web/20201026130457/https://www.coursera.org/lecture/attention-models-in-nlp/tasks-with-long-sequences-suzNH}} {{ref-en}}</ref><ref>{{Cite web|title=Reformer: The Efficient Transformer|url=http://ai.googleblog.com/2020/01/reformer-efficient-transformer.html|access-date=2020-10-22|website=Google AI Blog|language=en|archive-date=22 жовтня 2020|archive-url=https://web.archive.org/web/20201022210019/https://ai.googleblog.com/2020/01/reformer-efficient-transformer.html}} {{ref-en}}</ref>


У [[Велика мовна модель|великих мовних моделях]] термінологія дещо відрізняється від термінології, використаної в оригінальній статті про трансформер:<ref>{{cite web |last=LeCun |first=Yann |date=28 квітня 2023 |title=A survey of LLMs with a practical guide and evolutionary tree |url=https://twitter.com/ylecun/status/1651762787373428736?lang=en |archive-url=https://web.archive.org/web/20230623012310/https://twitter.com/ylecun/status/1651762787373428736?lang=en |archive-date=23 червня 2023 |access-date=23 червня 2023 |website=Twitter |language=en}}</ref>
Орієнтир для порівнювання трансформерових архітектур було запроваджено наприкінці 2020 року.<ref>{{cite arxiv|last1=Tay|first1=Yi|last2=Dehghani|first2=Mostafa|last3=Abnar|first3=Samira|last4=Shen|first4=Yikang|last5=Bahri|first5=Dara|last6=Pham|first6=Philip|last7=Rao|first7=Jinfeng|last8=Yang|first8=Liu|last9=Ruder|first9=Sebastian|last10=Metzler|first10=Donald|date=2020-11-08|title=Long Range Arena: A Benchmark for Efficient Transformers|class=cs.LG|eprint=2011.04006}} {{ref-en}}</ref>


* «тільки кодувальник»: повний кодувальник, повний декодувальник.
== Тренування ==
* «кодувальник—декодувальник»: повний кодувальник, авторегресійний декодувальник.
* «тільки декодувальник»: авторегресійний кодувальник, авторегресійний декодувальник.


Тут «авторегресійний» означає, що до голови уваги вставляють маску для зануляння всієї уваги від одного токена до всіх токенів після нього, як описано в розділі «маскована увага».
Трансформери, як правило, підлягають [[Напівкероване навчання|напівкерованому навчанню]], що включає [[Некероване навчання|некероване]] попереднє тренування, з наступним [[Кероване навчання|керованим]] тонким налаштуванням. Попереднє тренування, як правило, виконують на більшому наборі даних, ніж тонке налаштування, через обмежену доступність мічених тренувальних даних. До задач попереднього тренування та тонкого налаштування зазвичай належать:


Загалом, мовні моделі на основі трансформера існують двох типів: причинні (або «авторегресійні») та масковані. Серія ''GPT'' є причинною й лише декодувальною. ''BERT''&nbsp;— маскована й лише кодувальна.<ref>{{Cite web |title=Masked language modeling |url=https://huggingface.co/docs/transformers/tasks/masked_language_modeling |access-date=5 жовтня 2023 |website=huggingface.co |language=en}}</ref><ref>{{Cite web |title=Causal language modeling |url=https://huggingface.co/docs/transformers/tasks/language_modeling |access-date=5 жовтня 2023 |website=huggingface.co |language=en}}</ref> Серія ''T''5 кодувально—декодувальна, з повним кодувальником та авторегресійним декодувальником.<ref name=":0">{{Cite journal |last1=Raffel |first1=Colin |last2=Shazeer |first2=Noam |last3=Roberts |first3=Adam |last4=Lee |first4=Katherine |last5=Narang |first5=Sharan |last6=Matena |first6=Michael |last7=Zhou |first7=Yanqi |last8=Li |first8=Wei |last9=Liu |first9=Peter J. |date=1 січня 2020 |title=Exploring the limits of transfer learning with a unified text-to-text transformer |url=https://dl.acm.org/doi/abs/10.5555/3455716.3455856 |journal=The Journal of Machine Learning Research |language=en |volume=21 |issue=1 |pages=140:5485–140:5551 |arxiv=1910.10683 |issn=1532-4435}}</ref>
* [[моделювання мов]]<ref name=":6" />
* передбачування наступного речення<ref name=":6" />
* [[Питально-відповідальна система|відповідання на питання]]<ref name=":7" />
* [[Розуміння природної мови|розуміння прочитаного]]
* [[Аналіз тональності тексту|аналіз тональності]]<ref name=":8">{{Cite journal|last1=Wang|first1=Alex|last2=Singh|first2=Amanpreet|last3=Michael|first3=Julian|last4=Hill|first4=Felix|last5=Levy|first5=Omer|last6=Bowman|first6=Samuel|date=2018|title=GLUE: A Multi-Task Benchmark and Analysis Platform for Natural Language Understanding|journal=Proceedings of the 2018 EMNLP Workshop BlackboxNLP: Analyzing and Interpreting Neural Networks for NLP|pages=353–355|location=Stroudsburg, PA, USA|publisher=Association for Computational Linguistics|doi=10.18653/v1/w18-5446|arxiv=1804.07461|s2cid=5034059}} {{ref-en}}</ref>
* [[Автоматичне реферування|перефразовування]]<ref name=":8" />


== Наступні роботи ==
== Застосування ==


=== Альтернативні передавальні функції ===
Трансформер досяг великого успіху в [[Обробка природної мови|обробці природної мови]] (ОПМ), наприклад, в задачах [[Машинний переклад|машинного перекладу]] та [[Часовий ряд|передбачування часових рядів]].<ref>{{Cite web|url=https://medium.com/inside-machine-learning/what-is-a-transformer-d07dd1fbec04|title=What is a Transformer?|last=Allard|first=Maxime|date=2019-07-01|website=Medium|language=en|access-date=2019-10-21|archive-date=17 жовтня 2020|archive-url=https://web.archive.org/web/20201017233330/https://medium.com/inside-machine-learning/what-is-a-transformer-d07dd1fbec04}} {{ref-en}}</ref> Багато попередньо натренованих моделей, такі як [[GPT-2|''GPT''-2]], [[GPT-3|''GPT''-3]], ''[[ChatGPT]]'' (''GPT''-3.5), ''[[BERT (модель мови)|BERT]]'', ''XLNet'' та ''RoBERTa'', демонструють здатність трансформерів виконувати широкий спектр таких пов'язаних з ОПМ задач, і мають потенціал знаходити застосування в реальному світі.<ref name=":6" /><ref name=":7" /><ref>{{Cite book|title=XLNet: Generalized Autoregressive Pretraining for Language Understanding|last=Yang, Zhilin Dai, Zihang Yang, Yiming Carbonell, Jaime Salakhutdinov, Ruslan Le, Quoc V.|date=2019-06-19|oclc=1106350082}} {{ref-en}}</ref> До них можуть належати:


Оригінальний трансформер використовує [[Передавальна функція штучного нейрона|передавальну функцію]] ''[[Випрямлений лінійний вузол|ReLU]]''. Було розроблено й інші передавальні функції активації, як-от ''SwiGLU''.<ref>{{Cite arXiv|last=Shazeer |first=Noam |date=1 лютого 2020 |title=GLU Variants Improve Transformer |language=en |class=cs.LG |eprint=2002.05202 }}</ref>
* [[машинний переклад]]
* [[Автоматичне реферування|реферування документів]]
* [[Породжування природної мови|породжування документів]]
* [[розпізнавання іменованих сутностей]] (РІС)<ref name=":9">{{Cite web|url=https://medium.com/@datamonsters/artificial-neural-networks-in-natural-language-processing-bcf62aa9151a|title=10 Applications of Artificial Neural Networks in Natural Language Processing|last=Monsters|first=Data|date=2017-09-26|website=Medium|language=en|access-date=2019-10-21|archive-date=17 жовтня 2020|archive-url=https://web.archive.org/web/20201017202820/https://medium.com/@datamonsters/artificial-neural-networks-in-natural-language-processing-bcf62aa9151a}} {{ref-en}}</ref>
* {{нп|Секвенувальний аналіз|аналіз біологічних послідовностей||Sequence analysis}}<ref>{{cite journal |biorxiv=10.1101/622803|title=Biological structure and function emerge from scaling unsupervised learning to 250 million protein sequences|year=2019|last1=Rives|first1=Alexander|last2=Goyal|first2=Siddharth|last3=Meier|first3=Joshua|last4=Guo|first4=Demi|last5=Ott|first5=Myle|last6=Zitnick|first6=C. Lawrence|last7=Ma|first7=Jerry|last8=Fergus|first8=Rob|doi=10.1101/622803}} {{ref-en}}</ref><ref>{{cite journal|doi=10.1145/3388440.3412467|title=Transforming the Language of Life: Transformer Neural Networks for Protein Prediction Tasks.|year=2020|last1=Nambiar|first1=Ananthan|last2=Heflin|first2=Maeve|last3=Liu|first3=Simon|last4=Maslov|first4=Sergei|last5=Hopkins|first5=Mark|last6=Ritz|first6=Anna|s2cid=226283020|doi-access=free}} {{ref-en}}</ref><ref>{{cite biorxiv|biorxiv=10.1101/676825|title=Evaluating Protein Transfer Learning with TAPE|year=2019|last1=Rao|first1=Roshan|last2=Bhattacharya|first2=Nicholas|last3=Thomas|first3=Neil|last4=Duan|first4=Yan|last5=Chen|first5=Xi|last6=Canny|first6=John|last7=Abbeel|first7=Pieter|last8=Song|first8=Yun S.}} {{ref-en}}</ref>
* [[Комп'ютерне бачення|розуміння відео]].<ref>{{Cite arXiv |title=Is Space-Time Attention All You Need for Video Understanding? |arxiv=2102.05095 |last=Bertasias |last2=Wang |last3=Torresani }} {{ref-en}}</ref>


=== Альтернативні позиційні кодування ===
2020 року було показано, що архітектуру Трансформер, а точніше ''GPT''-2, може бути налаштовано для гри в шахи.<ref>{{cite arxiv|last1=Noever|first1=David|last2=Ciolino|first2=Matt|last3=Kalin|first3=Josh|date=2020-08-21|title=The Chess Transformer: Mastering Play using Generative Language Models|class=cs.AI|eprint=2008.04057}} {{ref-en}}</ref> Трансформери було застосовано до обробки зображень з результатами, конкурентноздатними у порівнянні зі [[Згорткова нейронна мережа|згортковими нейронними мережами]].<ref>{{Cite web|last=|first=|date=|title=An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale|url=https://arxiv.org/pdf/2010.11929.pdf|url-status=live|archive-url=https://web.archive.org/web/20210905042755/https://arxiv.org/pdf/2010.11929.pdf|archive-date=5 вересня 2021|access-date=|website=}} {{ref-en}}</ref><ref>{{Cite web|last=|first=|date=|title=Training data-efficient image transformers & distillation through attention|url=https://arxiv.org/pdf/2012.12877.pdf|url-status=live|archive-url=https://web.archive.org/web/20220325035129/https://arxiv.org/pdf/2012.12877.pdf|archive-date=25 березня 2022|access-date=|website=}} {{ref-en}}</ref>


Трансформери можуть використовувати й інші методи позиційного кодування, крім синусоїдного.<ref>{{cite journal |last1=Dufter |first1=Philipp |last2=Schmitt |first2=Martin |last3=Schütze |first3=Hinrich |date=2022-06-06 |title=Position Information in Transformers: An Overview |journal=Computational Linguistics |language=en |volume=48 |issue=3 |pages=733–763 |doi=10.1162/coli_a_00445 |issn=0891-2017 |s2cid=231986066 |doi-access=free|arxiv=2102.11090 }}</ref>
== Втілення ==

''RoPE'' ({{lang-en|rotary positional embedding}}, поворотне позиційне вкладення),<ref>{{Cite arXiv|last1=Su |first1=Jianlin |last2=Lu |first2=Yu |last3=Pan |first3=Shengfeng |last4=Murtadha |first4=Ahmed |last5=Wen |first5=Bo |last6=Liu |first6=Yunfeng |date=2021-04-01 |title=RoFormer: Enhanced Transformer with Rotary Position Embedding |language=en |class=cs.CL |eprint=2104.09864 }}</ref> найкраще пояснювати, розглядаючи список 2-вимірних векторів <math>[(x^{(1)}_1, x^{(2)}_1), (x^{(1)}_2, x^{(2)}_2), (x^{(1)}_3, x^{(2)}_3), ...]</math>. Виберімо деякий кут <math>\theta</math>. Тоді кодування ''RoPE'' це<math display="block">\text{RoPE}\big(x^{(1)}_m, x^{(2)}_m, m\big) =
\begin{pmatrix} \cos m \theta & - \sin m \theta \\
\sin m \theta & \cos m \theta \end{pmatrix}
\begin{pmatrix} x^{(1)}_m \\ x^{(2)}_m \\ \end{pmatrix} = \begin{pmatrix} x^{(1)}_m \cos m\theta - x^{(2)}_m \sin m \theta \\ x^{(2)}_m \cos m\theta + x^{(1)}_m \sin m \theta \\ \end{pmatrix}
</math>Еквівалентно, якщо записати 2-вимірні вектори як комплексні числа <math>z_m := x^{(1)}_m + i x^{(2)}_m</math>, то кодування ''RoPE'' це просто множення на кут:<math display="block">\text{RoPE}\big(z_m, m\big) = e^{i m\theta} z_m
</math>Для списку <math>2n</math>-вимірних векторів, кодувальник ''RoPE'' визначається послідовністю кутів <math>\theta^{(1)}, ..., \theta^{(n)}</math>. Тоді кодування ''RoPE'' застосовується до кожної пари координат.

Перевага ''RoPE'' полягає в тому, що скалярний добуток двох векторів залежить лише від їхнього відносного розташування:

<math display="block">
\text{RoPE}\big(x, m\big)^T\text{RoPE}\big(y, n\big)
=
\text{RoPE}\big(x, m+k\big)^T\text{RoPE}\big(y, n+k\big)
</math>

для будь-якого цілого числа <math>k</math>.

''ALiBi'' ({{lang-en|Attention with Linear Biases}}, увага з лінійними зміщеннями)<ref>{{Cite arXiv|last1=Press |first1=Ofir |last2=Smith |first2=Noah A. |last3=Lewis |first3=Mike |date=1 серпня 2021 |title=Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation |language=en |class=cs.CL |eprint=2108.12409 }}</ref> не є ''заміною'' для позиційного кодувальника в оригінальному трансформері. Натомість, це ''додатковий'' позиційний кодувальник, який безпосередньо підключається до механізму уваги. Конкретно, механізм уваги ''ALiBi'' це<math display="block">\begin{align}
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\mathrm{T}}{\sqrt{d_k}} + s B\right)V
\end{align}</math>Тут <math>s</math>&nbsp;— дійсне число («скаляр»), а <math>B</math>&nbsp;— матриця ''лінійного зміщення'' ({{lang-en|linear bias}}), визначена як<math display="block">B = \begin{pmatrix}
0 & 1 & 2 & 3 & \cdots \\
-1 & 0 & 1 & 2 & \cdots \\
-2 & -1 & 0 & 1 & \cdots \\
-3 & -2 & -1 & 0 & \cdots \\
\vdots & \vdots & \vdots & \vdots & \ddots \\
\end{pmatrix}
</math>іншими словами, <math>B_{i, j} = j - i</math>.

''ALiBi'' дозволяє здійснювати попереднє тренування на коротких контекстних вікнах, а потім тонке настоювання на довших контекстних вікнах. Оскільки її безпосередньо підключено до механізму уваги, її можливо поєднувати з будь-яким позиційним кодувальником, який підключено до «низу» всієї мережі (де розташовано синусоїдний кодувальник оригінального трансформера, а також ''RoPE'' та багато інших).

Кодування відносних позицій ({{lang-en|Relative Position Encodings}})<ref>{{Cite arXiv |last1=Shaw |first1=Peter |last2=Uszkoreit |first2=Jakob |last3=Vaswani |first3=Ashish |date=2018 |title=Self-Attention with Relative Position Representations |language=en |class=cs.CL |eprint=1803.02155}}</ref> подібні до ''ALiBi'', але загальніші:<math display="block">\begin{align}
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\mathrm{T}}{\sqrt{d_k}} + B\right)V
\end{align}</math>де <math>B</math>&nbsp;— [[матриця Тепліца]], тобто <math>B_{i, j} = B_{i', j'}</math> за умови <math>i-j = i'-j'</math>.

=== Ефективне втілення ===

==== ''FlashAttention'' ====

''FlashAttention''<ref>{{cite journal |last1=Dao |first1=Tri |last2=Fu |first2=Dan |last3=Ermon |first3=Stefano |last4=Rudra |first4=Atri |last5=Ré |first5=Christopher |date=2022-12-06 |title=FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness |url=https://proceedings.neurips.cc/paper_files/paper/2022/hash/67d57c32e20fd0a7a302cb81d36e40d5-Abstract-Conference.html |journal=Advances in Neural Information Processing Systems |language=en |volume=35 |pages=16344–16359|arxiv=2205.14135}}</ref>&nbsp;— це алгоритм, що ефективно втілює механізм уваги трансформера на [[ГП]]. Він виконує [[Блокове множення матриць|множення матриць блоками]], таким чином, що кожен блок уміщається в [[кеш]] ГП, і завдяки ретельному управлінню блоками мінімізує копіювання даних між кешами ГП (оскільки переміщення даних повільне).

Покращену версію, ''FlashAttention''-2,<ref>{{cite web |title=Stanford CRFM |url=https://crfm.stanford.edu/2023/07/17/flash2.html |access-date=2023-07-18 |website=crfm.stanford.edu |language=en}}</ref><ref>{{cite web |date=2023-06-17 |title=FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning |url=https://princeton-nlp.github.io/flash-atttention-2/ |access-date=2023-07-18 |website=Princeton NLP |language=en}}</ref><ref>{{cite web |title=Introducing Together AI Chief Scientist Tri Dao, as he releases FlashAttention-2 to speed up model training and inference |url=https://together.ai/blog/tri-dao-flash-attention |access-date=2023-07-18 |website=TOGETHER |language=en-US}}</ref> розробили для того, щоби задовольнити висхідний попит на мовні моделі, здатні обробляти довші контексти. Вона пропонує поліпшення в розподілі й розпаралелюванні роботи, дозволяючи досягати до 230&nbsp;терафлопс/с на ГП [[Nvidia A100|''A''100]] ([[FP16|''FP''16]]/{{нп|BF16|''BF''16}}), що вдвічі швидше за оригінальний ''FlashAttention''.

До ключових досягнень ''FlashAttention''-2 належать зменшення не пов'язаних з множенням матриць операцій з рухомою комою, покращене розпаралелювання над виміром довжини послідовності, кращий розподіл роботи між [[CUDA#Ієрархічна модель CUDA|групами потоків]] ГП, а також додаткова підтримка розмірів голів до 256 та багатозапитової (БЗУ, {{lang-en|multi-query attention, MQA}}) й групозапитової уваги (ГЗУ, {{lang-en|grouped-query attention, GQA}}).

Еталонні перевірки показали, що ''FlashAttention''-2 в до 2 разів швидше за ''FlashAttention'', і в до 9 разів швидше за стандартне втілення уваги в ''PyTorch''. Серед майбутніх розробок&nbsp;— оптимізація для нового обладнання, як-от ГП [[Nvidia H100|''H''100]], та нових типів даних, як-от ''FP''8.

==== Багатозапитова увага ====

Багатозапитова увага ({{lang-en|Multi-Query Attention}}) змінює механізм багатоголової уваги.<ref>{{Cite arXiv|last1=Chowdhery |first1=Aakanksha |last2=Narang |first2=Sharan |last3=Devlin |first3=Jacob |last4=Bosma |first4=Maarten |last5=Mishra |first5=Gaurav |last6=Roberts |first6=Adam |last7=Barham |first7=Paul |last8=Chung |first8=Hyung Won |last9=Sutton |first9=Charles |last10=Gehrmann |first10=Sebastian |last11=Schuh |first11=Parker |last12=Shi |first12=Kensen |last13=Tsvyashchenko |first13=Sasha |last14=Maynez |first14=Joshua |last15=Rao |first15=Abhishek |date=2022-04-01 |title=PaLM: Scaling Language Modeling with Pathways |language=en |class=cs.CL |eprint=2204.02311 }}</ref> Тоді як традиційно

<math display="block">\text{MultiheadedAttention}(Q, K, V) = \text{Concat}_{i \in [\# heads]}(\text{Attention}(XW^Q_i, XW^K_i, XW^V_i)) W^O</math>з багатозапитовою увагою, існує лише одне <math>W^K, W^V</math>, тож

<math display="block">\text{MultiQueryAttention}(Q, K, V) = \text{Concat}_{i \in [\# heads]}(\text{Attention}(XW^Q_i, XW^K, XW^V)) W^O</math>

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

==== Спекулятивне декодування ====

Трансформери використовують у великих мовних моделях для авторегресійного породжування послідовностей: породжування потоку тексту, по одному токену за раз. Проте в більшості постановок декодування з мовних моделей впираються в пам'ять, що означає, що нам доступні вільні обчислювальні потужності. Спекулятивне декодування ({{lang-en|speculative decoding}})<ref name=":2">{{Citation |last1=Leviathan |first1=Yaniv |title=Fast Inference from Transformers via Speculative Decoding |language=en |date=2023-05-18 |arxiv=2211.17192 |last2=Kalman |first2=Matan |last3=Matias |first3=Yossi}}</ref><ref>{{cite web|url=https://yaofu.notion.site/Towards-100x-Speedup-Full-Stack-Transformer-Inference-Optimization-43124c3688e14cffaf2f1d6cbdf26c6c|title=Towards 100x Speedup: Full Stack Transformer Inference Optimization|language=en|first=Yao|last=Fu|date=2023-12-13}}</ref> використовує ці вільні обчислювальні потужності, обчислюючи декілька токенів паралельно. Подібно до [[Спекулятивне виконання|спекулятивного виконання]] в [[ЦП]], майбутні токени обчислюються паралельно, роблячи припущення щодо значень попередніх токенів, і пізніше відкидаються, якщо виявляється, що припущення були хибними.

Конкретніше, розгляньмо трансформерну модель на кшталт ''GPT''-3 з розміром контекстного вікна 512. Для породження всього контекстного вікна авторегресійно з жадібним декодуванням її потрібно запускати 512 разів, кожного разу породжуючи токен <math>x_1, x_2, ..., x_{512}</math>. Проте, якби ми мали деяке обґрунтоване припущення щодо значень цих токенів, ми могли би перевіряти їх усі паралельно, за один запуск моделі, перевіряючи, що кожен <math>x_t</math> справді є токеном із найвищою логарифмічною правдоподібністю на <math>t</math>-тому виході.

При спекулятивному декодуванні використовують меншу модель або деяку іншу просту евристику для породження кількох спекулятивних токенів, які потім перевіряють більшою моделлю. Наприклад, припустімо, що мала́ модель породила чотири спекулятивні токени: <math>\tilde{x_1}, \tilde{x_2}, \tilde{x_3}, \tilde{x_4}</math>. Ці токени пропускають крізь більшу модель, і приймаються лише <math>\tilde{x_1}</math> та <math>\tilde{x_2}</math>. Той же запуск великої моделі вже породив новий токен <math>x_3</math> для заміни <math>\tilde{x_3}</math>, а <math>\tilde{x_4}</math> повністю відкидається. Процес потім повторюється (починаючи з 4-го токена) доки не буде породжено всі токени.

Для не жадібного декодування застосовують подібні ідеї, за винятком того, що спекулятивні токени приймають або відкидають стохастично, таким чином, що гарантується, що кінцевий розподіл виходу є таким самим, як якби спекулятивне декодування не використовувалось.<ref name=":2" /><ref>{{Citation |last1=Chen |first1=Charlie |title=Accelerating Large Language Model Decoding with Speculative Sampling |language=en |date=2023-02-02 |arxiv=2302.01318 |last2=Borgeaud |first2=Sebastian |last3=Irving |first3=Geoffrey |last4=Lespiau |first4=Jean-Baptiste |last5=Sifre |first5=Laurent |last6=Jumper |first6=John}}</ref>

=== Субквадратичні трансформери ===

Тренування архітектур на трансформерній основі може бути витратним, особливо для довгих даних входу.<ref name="reformer">{{cite arXiv |eprint=2001.04451 |class=cs.LG |first1=Nikita |last1=Kitaev |first2=Łukasz |last2=Kaiser |title=Reformer: The Efficient Transformer |language=en |last3=Levskaya |first3=Anselm |year=2020}}</ref> До альтернативних архітектур належать Реформер ({{lang-en|Reformer}}, що знижує обчислювальне навантаження з <math>O(N^2)</math> до <math>O(N\ln N)</math><ref name="reformer" />), та моделі на кшталт ''ETC''/''BigBird'' (які можуть знижувати його до <math>O(N)</math>),<ref>{{cite web |title=Constructing Transformers For Longer Sequences with Sparse Attention Methods |url=https://ai.googleblog.com/2021/03/constructing-transformers-for-longer.html |url-status=live |archive-url=https://web.archive.org/web/20210918150757/https://ai.googleblog.com/2021/03/constructing-transformers-for-longer.html |archive-date=2021-09-18 |access-date=2021-05-28 |website=Google AI Blog |date=25 березня 2021 |language=en}}</ref> де <math>N</math>&nbsp;— довжина послідовності. Це здійснюється за допомогою {{нп|Просторово чутливе гешування|просторово чутливого гешування||Locality-sensitive hashing}} та оборотних шарів ({{lang-en|reversible layers}}).<ref>{{cite web |title=Tasks with Long Sequences – Chatbot |url=https://www.coursera.org/lecture/attention-models-in-nlp/tasks-with-long-sequences-suzNH |url-status=live |archive-url=https://web.archive.org/web/20201026130457/https://www.coursera.org/lecture/attention-models-in-nlp/tasks-with-long-sequences-suzNH |archive-date=2020-10-26 |access-date=2020-10-22 |website=Coursera |language=en}}</ref><ref>{{cite web |title=Reformer: The Efficient Transformer |url=http://ai.googleblog.com/2020/01/reformer-efficient-transformer.html |url-status=live |archive-url=https://web.archive.org/web/20201022210019/https://ai.googleblog.com/2020/01/reformer-efficient-transformer.html |archive-date=2020-10-22 |access-date=2020-10-22 |website=Google AI Blog |date=16 січня 2020 |language=en}}</ref>

Звичайні трансформери вимагають обсягу пам'яті, квадратичного щодо розміру контекстного вікна. Трансформери без уваги ({{lang-en|attention-free transformers}})<ref>{{cite arXiv |eprint=2105.14103 |class=cs.LG |first1=Shuangfei |last1=Zhai |first2=Walter |last2=Talbott |title=An Attention Free Transformer |language=en |date=2021-09-21 |last3=Srivastava |first3=Nitish |last4=Huang |first4=Chen |last5=Goh |first5=Hanlin |last6=Zhang |first6=Ruixiang |last7=Susskind |first7=Josh}}</ref> знижують цю вимогу до лінійної залежності, зберігаючи при цьому переваги трансформера шляхом зв'язування ключа зі значенням.

''Long Range Arena'' ({{lang-uk|Арена далекобійності}}, 2020)<ref>{{cite arXiv |eprint=2011.04006 |class=cs.LG |first1=Yi |last1=Tay |first2=Mostafa |last2=Dehghani |title=Long Range Arena: A Benchmark for Efficient Transformers |language=en |date=2020-11-08 |last3=Abnar |first3=Samira |last4=Shen |first4=Yikang |last5=Bahri |first5=Dara |last6=Pham |first6=Philip |last7=Rao |first7=Jinfeng |last8=Yang |first8=Liu |last9=Ruder |first9=Sebastian |last10=Metzler |first10=Donald}}</ref>&nbsp;— стандартний еталон для порівнювання поведінки трансформерних архітектур на довгих даних входу.

Увага з випадковими ознаками ({{lang-en|Random Feature Attention}}, 2021)<ref>{{cite arXiv |last1=Peng |first1=Hao |last2=Pappas |first2=Nikolaos |last3=Yogatama |first3=Dani |last4=Schwartz |first4=Roy |last5=Smith |first5=Noah A. |last6=Kong |first6=Lingpeng |date=2021-03-19 |title=Random Feature Attention |language=en |class=cs.CL |eprint=2103.02143}}</ref> використовує {{нп|РБФ-ядро#Випадкові ознаки Фур'є|випадкові ознаки Фур'є||Radial basis function kernel#Fourier random features}}:<math display="block">\varphi(x) = \frac{1}{\sqrt D}[\cos\langle w_1, x\rangle, \sin\langle w_1, x\rangle, \cdots \cos\langle w_D, x\rangle, \sin\langle w_D, x\rangle]^T</math>де <math>w_1, ..., w_D</math>&nbsp;— незалежні зразки з нормального розподілу <math>N(0, \sigma^2 I)</math>. За цього вибору параметрів виконується <math>\mathbb E[\langle \varphi(x), \varphi(y)\rangle] = e^{\frac{\|x-y\|^2}{2\sigma^2}}</math>, або <math display="block">e^{\langle x, y\rangle/\sigma^2} = \mathbb E[\langle e^{\|x\|^2/2\sigma^2} \varphi(x), e^{\|y\|^2/2\sigma^2}\varphi(y)\rangle] \approx \langle e^{\|x\|^2/2\sigma^2} \varphi(x), e^{\|y\|^2/2\sigma^2}\varphi(y)\rangle </math> Відповідно, одноголову увагу з одним запитом можливо записати як <math display="block">
\text{Attention}(q, K, V) = \text{softmax}\left(\frac{qK^\mathrm{T}}{\sqrt{d_k}}\right)V

\approx \frac{\varphi(q)^T \sum_i e^{\|k_i\|^2/2\sigma^2}\varphi(k_i) v_i^T}{\varphi(q)^T \sum_i e^{\|k_i\|^2/2\sigma^2}\varphi(k_i)}</math>де <math>\sigma = d_K^{1/4}</math>. Аналогічно для кількох запитів, та для багатоголової уваги.

Це наближення можливо обчислювати за лінійний час, оскільки можливо спочатку обчислювати матрицю <math>\varphi(k_i) v_i^T</math>, а потім перемножувати її з запитом. По суті, нам вдалося отримати точнішу версію <math display="block">\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\mathrm{T}}{\sqrt{d_k}}\right)V \approx Q(K^TV/\sqrt{d_k})
</math>

Перформер ({{lang-en|Performer}}, 2022)<ref>{{cite arXiv |last1=Choromanski |first1=Krzysztof |last2=Likhosherstov |first2=Valerii |last3=Dohan |first3=David |last4=Song |first4=Xingyou |last5=Gane |first5=Andreea |last6=Sarlos |first6=Tamas |last7=Hawkins |first7=Peter |last8=Davis |first8=Jared |last9=Belanger |first9=David |last10=Colwell |first10=Lucy |last11=Weller |first11=Adrian |date=2020-09-30 |title=Masked Language Modeling for Proteins via Linearly Scalable Long-Context Transformers |language=en |class=cs.LG |eprint=2006.03555}}</ref> використовує ту саму увагу з випадковими ознаками, але <math>w_1, ..., w_D</math> спочатку незалежно вибирають із нормального розподілу <math>N(0, \sigma^2 I)</math>, а потім обробляють їх [[Обробка Грама — Шмідта|обробкою Грама&nbsp;— Шмідта]].

=== Мультимодальність ===

Трансформери також можливо використовувати/пристосовувати й для інших модальностей (даних входу або виходу), крім тексту, зазвичай шляхом знаходження способу «токенувати» таку модальність.

[[Зоровий трансформер|Зорові трансформери]] ({{lang-en|vision transformers}})<ref name="auto2"/> пристосовують трансформер до комп'ютерного бачення, розбиваючи вхідні зображення на низку фрагментів, перетворюючи їх на вектори, й обробляючи їх як токени в стандартному трансформері.

Конформер ({{lang-en|Conformer}})<ref name="auto"/> та пізніший ''[[Whisper (система розпізнавання мовлення)|Whisper]]''<ref name="Radford Kim Xu Brockman p.">{{cite arXiv |eprint=2212.04356 |first1=Alec |last1=Radford |first2=Jong Wook |last2=Kim |title=Robust Speech Recognition via Large-Scale Weak Supervision |language=en |last3=Xu |first3=Tao |last4=Brockman |first4=Greg |last5=McLeavey |first5=Christine |last6=Sutskever |first6=Ilya |year=2022 |page=|class=eess.AS }}</ref> дотримуються тієї ж схеми для [[розпізнавання мовлення]], спочатку перетворюючи сигнал мовлення на [[Спектрограма|спектрограму]], яку потім обробляють як зображення, тобто розбивають на низку фрагментів, перетворюють на вектори, й обробляють як токени в стандартному трансформері.


[[Персівер]]и ({{lang-en|Perceiver}}, {{lang-uk|сприймач}}) від Ендрю Джейгла зі співавт. (2021)<ref name="perceiver2021">{{cite arXiv |eprint=2103.03206 |class=cs.CV |first1=Andrew |last1=Jaegle |first2=Felix |last2=Gimeno |title=Perceiver: General Perception with Iterative Attention |language=en |date=2021-06-22 |last3=Brock |first3=Andrew |last4=Zisserman |first4=Andrew |last5=Vinyals |first5=Oriol |last6=Carreira |first6=Joao}}</ref><ref name="jaegle2021b">{{cite arXiv |eprint=2107.14795 |class=cs.LG |first1=Andrew |last1=Jaegle |first2=Sebastian |last2=Borgeaud |title=Perceiver IO: A General Architecture for Structured Inputs & Outputs |language=en |date=2021-08-02 |last3=Alayrac |first3=Jean-Baptiste |last4=Doersch |first4=Carl |last5=Ionescu |first5=Catalin |last6=Ding |first6=David |last7=Koppula |first7=Skanda |last8=Zoran |first8=Daniel |last9=Brock |first9=Andrew |last10=Shelhamer |first10=Evan |last11=Hénaff |first11=Olivier}}</ref> можуть навчатися з великих масивів гетерогенних даних.
Трансформерову модель було втілено в стандартних бібліотеках глибокого навчання, таких як [[TensorFlow]] та [[PyTorch]].


Стосовно {{нп|Модель зображення за текстом|зображень ''на виході''||Text-to-image model}}, Піблс зі співавт. запропонували дифузійний трансформер (ДиТ, {{lang-en|diffusion transformer, DiT}}), який полегшує використання трансформерної архітектури для виробляння зображень на основі [[Дифузійна модель|дифузії]].<ref>{{cite arXiv|title=Scalable Diffusion Models with Transformers|language=en|first1=William|last1=Peebles|first2=Saining|last2=Xie|date=2 березня 2023|class=cs.CV |eprint=2212.09748}}</ref> Також, ''Google'' випустила трансформероцентричний породжувач зображень під назвою «Муза» ({{lang-en|"Muse"}}) на основі паралельного декодування й технології маскованого породжувального трансформера.<ref>{{cite web|url=https://www.infoq.com/news/2023/01/google-muse-text-to-image/|title=Google AI Unveils Muse, a New Text-to-Image Transformer Model|website=InfoQ|language=en}}</ref> (Трансформери відігравали не таку центральну роль у попередніх технологіях створення зображень,<ref>{{cite web|url=https://blog.metaphysic.ai/muse-googles-super-fast-text-to-image-model-abandons-latent-diffusion-for-transformers/,%20https://blog.metaphysic.ai/muse-googles-super-fast-text-to-image-model-abandons-latent-diffusion-for-transformers/|title=Using Diffusion Models to Create Superior NeRF Avatars|language=en|date=5 січня 2023}}</ref> хоча й все ж значну.<ref>{{cite web|url=https://www.marktechpost.com/2022/11/14/how-do-dall%c2%b7e-2-stable-diffusion-and-midjourney-work/|title=How Do DALL·E 2, Stable Diffusion, and Midjourney Work?|language=en|first=Arham|last=Islam|date=14 листопада 2022}}</ref>)
''Transformers'' є бібліотекою, що виробляє ''[[Hugging Face]]'', яка пропонує архітектури на основі трансформерів та попередньо натреновані моделі.<ref name = "wolf2020"/>


== Див. також ==
== Див. також ==
* [[Персівер]]
* [[Персівер]]
* [[BERT (модель мови)|''BERT'' (модель мови)]]
* [[GPT-3|''GPT''-3]]
* [[GPT-3|''GPT''-3]]
* [[GPT-4|''GPT''-4]]
* ''[[ChatGPT]]''
* {{нп|Ву Дао|||Wu Dao}}
* {{нп|Ву Дао|||Wu Dao}}
* [[Зоровий трансформер|Зорові трансформери]]
* [[Зоровий трансформер]]
* {{нп|BLOOM (мовна модель)|''BLOOM'' (мовна модель)||BLOOM (language model)}}


== Примітки ==
== Примітки ==
Рядок 110: Рядок 301:


== Література ==
== Література ==
{{refbegin}}
* Hubert Ramsauer ''et al.'' (2020), [https://arxiv.org/abs/2008.02217 "Hopfield Networks is All You Need"] {{Webarchive|url=https://web.archive.org/web/20210918150812/https://arxiv.org/abs/2008.02217 |date=18 вересня 2021 }}, сигнальний примірник, поданий для [[International Conference on Learning Representations|ICLR]] 2021. {{arxiv|2008.02217}}; див. також [https://ml-jku.github.io/hopfield-layers/ блог] {{Webarchive|url=https://web.archive.org/web/20210918150757/https://ml-jku.github.io/hopfield-layers/ |date=18 вересня 2021 }} авторів. {{ref-en}}
* Hubert Ramsauer ''et al.'' (2020), [https://arxiv.org/abs/2008.02217 "Hopfield Networks is All You Need"] {{Webarchive|url=https://web.archive.org/web/20210918150812/https://arxiv.org/abs/2008.02217 |date=18 вересня 2021 }}, сигнальний примірник, поданий для [[International Conference on Learning Representations|ICLR]] 2021. {{arxiv|2008.02217}}; див. також [https://ml-jku.github.io/hopfield-layers/ блог] {{Webarchive|url=https://web.archive.org/web/20210918150757/https://ml-jku.github.io/hopfield-layers/ |date=18 вересня 2021 }} авторів. {{ref-en}}
::— Обговорення дії трансформерового шару як еквіваленту гопфілдового уточнення, що наближує вхід до однієї з [[Нерухома точка|нерухомих точок]] (образів подання) неперервнозначної [[Мережа Гопфілда|мережі Гопфілда]].
::— Обговорення дії трансформерного шару як еквіваленту гопфілдового уточнення, що наближує вхід до однієї з [[Нерухома точка|нерухомих точок]] (образів подання) неперервнозначної [[Мережа Гопфілда|мережі Гопфілда]].
* Alexander Rush, [https://nlp.seas.harvard.edu/2018/04/03/attention.html The Annotated transformer] {{Webarchive|url=https://web.archive.org/web/20210922093841/https://nlp.seas.harvard.edu/2018/04/03/attention.html |date=22 вересня 2021 }}, Harvard NLP group, 3 квітня 2018 {{ref-en}}

* {{citation |last1=Phuong |first1=Mary |last2=Hutter |first2=Marcus |title=Formal Algorithms for Transformers |language=en |date=2022 |arxiv=2207.09238 }}
== Посилання ==
{{refend}}
* Alexander Rush, [https://nlp.seas.harvard.edu/2018/04/03/attention.html The Annotated transformer] {{Webarchive|url=https://web.archive.org/web/20210922093841/https://nlp.seas.harvard.edu/2018/04/03/attention.html |date=22 вересня 2021 }}, Harvard NLP group, 3 April 2018 {{ref-en}}

{{Перекласти|en}}



{{Google LLC}}
{{Диференційовні обчислення}}
{{Диференційовні обчислення}}



Версія за 19:58, 11 лютого 2024

Трансфо́рмер (англ. Transformer) — це архітектура глибокого навчання, що ґрунтується на механізмі багатоголової уваги, запропонована в статті 2017 року «Увага — це все, що вам треба».[1] Вона не має рекурентних вузлів, і відтак вимагає менше часу на тренування, ніж попередні рекурентні нейронні архітектури, як-от довга короткочасна пам'ять (ДКЧП),[2] і її пізнішу видозміну широко використовують для тренування великих мовних моделей на великих (мовних) наборах даних, як-от корпусі Вікіпедії та Common Crawl[en].[3] Вхідний текст розбивається на n-грами, закодовані як токени[en], й кожен токен перетворюється на вектор за допомогою пошуку таблицею вкладення слів. На кожному шарі кожен токен відтак узгоджується в межах контекстного вікна з контекстом інших (немаскованих) токенів за допомогою паралельного механізму багатоголової уваги, що дозволяє підсилювати сигнал для ключових токенів, і пригнічувати менш важливі токени. Стаття про трансформер, опублікована 2017 року, ґрунтується на механізмі уваги на основі softmax, запропонованому 2014 року Багдановим зі співавт. для машинного перекладу,[4][5] а подібний до трансформера контролер швидких ваг (англ. Fast Weight Controller) було запропоновано 1992 року.[6][7][8]

Цю архітектуру тепер використовують не лише в обробці природної мови та комп'ютернім баченні,[9] але й в обробці звуку[10] та мультимодальній обробці. Вона також призвела до розробки попередньо натренованих систем, таких як породжувальні попередньо натреновані трансформери (англ. generative pre-trained transformers, GPT)[11] та BERT[12] (англ. Bidirectional Encoder Representations from Transformers, двоспрямовані кодувальні подання з трансформерів).

Хронологія

  • 1990 року мережа Елмана, використовуючи рекурентну нейронну мережу, кодувала кожне слово в тренувальному наборі як вектор, званий вкладенням слова, і весь словник як векторну базу даних, дозволяючи виконувати такі завдання, як передбачування послідовностей, що виходять за межі можливостей простого багатошарового перцептрону. Недоліком цих статичних вкладень було те, що вони не робили розрізнення між декількома значеннями слів, які пишуться однаково.[13]
  • 1992 року Юрген Шмідхубер опублікував контролер швидких ваг (англ. Fast Weight Controller).[6] Він навчається відповідати на запити, програмуючи ваги уваги іншої нейронної мережі через тензорні добутки векторів ключів і векторів значень, званих FROM і TO. Пізніше було показано, що контролер швидких ваг еквівалентний ненормованому лінійному трансформерові.[8][7][14][15] Термінологію «навчання внутрішніх центрів уваги» (англ. "learning internal spotlights of attention") було введено 1993 року.[16]
  • 1993 року для статистичного машинного перекладу використовували суміщувальні моделі IBM[en].[17]
  • 1997 року було запропоновано предтечу великої мовної моделі, яка використовувала рекурентні нейронні мережі, як-от довгу короткочасну пам'ять.
  • 2001 року для уоднозначнювання слів використовували зібраний з Інтернету великий текстовий корпус на один мільярд слів, який на той час називали «дуже-дуже великим».[18]
  • 2012 року AlexNet продемонструвала ефективність великих нейронних мереж для розпізнавання зображень, заохотивши підхід великих штучних нейронних мереж замість старіших, статистичних підходів.
  • 2014 року Суцкевер зі співавт. запропонували 380М-параметрову модель seq2seq[en] для машинного перекладу, яка використовувала дві мережі ДКЧП.[19] Її архітектура складається з двох частин. Кодувальник (англ. encoder) — це ДКЧП, яка бере послідовність токенів, і перетворює її на вектор. Декодувальник (англ. decoder) — це інша ДКЧП, яка перетворює вектор назад на послідовність токенів.
  • 2014 року показало себе корисним використання вентилів у 130М-параметровій моделі seq2seq[en], яка використовувала спрощені вентильні рекурентні вузли (ВРВ). Багданов зі співавт.[20] показали, що ВРВ не кращі й не гірші за вентильну ДКЧП.[21][22]
  • 2014 року Багданов зі співавт.[23] вдосконалили попередню модель seq2seq, використавши механізм уваги «адитивного» типу між двома мережами ДКЧП. Проте це ще не був розпаралелюваний (масштабований «скалярнодобутковий») тип уваги, який згодом запропоновали в статті про трансформери 2017 року.
  • 2015 року Луонг зі співавт. оцінили відносну продуктивність архітектур моделей глобальної та локальної (віконної) уваги, змішана архітектура уваги виявилася здатною покращити переклади, пропоновані архітектурою Багданова, в той час як використання архітектури локальної уваги скоротило час перекладу.[24]
  • 2016 року в Перекладачі Google поступово замінили старіший підхід статистичного машинного перекладу новішим підходом на основі нейронних мереж, що містив модель seq2seq, поєднану з ДКЧП й механізмом уваги «адитивного» типу. Вони досягли вищого рівня продуктивності, ніж статистичний підхід, розробка якого тривала десять років, лише за дев'ять місяців.[25][26]
  • 2017 року в статті «Увага — це все, що вам треба» запропонували оригінальну (розміру 100М) кодувально-декодувальну трансформерну модель зі швидшим (розпаралелюваним або розкладаним) механізмом уваги. Оскільки ця модель мала труднощі зі збіжністю, запропоновали, що темп навчання повинен лінійно збільшуватися від 0 до максимального значення на першій частині тренування (тобто 2 % від загальної кількості кроків тренування). Метою трансформерної моделі було взяти модель seq2seq й усунути її рекурентні нейронні мережі, але зберегти її механізм адитивної уваги.[1]
  • 2018 року в статті про ELMo обробляли все речення перед тим, як призначувати вектор вкладення кожному слову. Для обчислення таких глибоких контекстних вкладень для кожного зі слів використали двоспрямовану ДКЧП, покращивши цей напрямок досліджень відносно моделі «торба слів» та word2vec.
  • 2018 року трансформер з лише кодувальником використали в моделі BERT (розміром понад 1 мільярд), покращивши результати ELMo.[27]
  • 2020 року зоровий трансформер (англ. vision transformer)[28] та підсилений згорткою трансформер для обробки мовлення[29] перевершили рекурентні нейронні мережі, які використовували раніше для бачення й мовлення.
  • 2020 року Сюн зі співавт. розв'язали труднощі оригінального трансформера зі збіжністю шляхом нормування шарів перед багатоголовою увагою (а не після неї). Це називають трансформером перед-ШН (англ. pre-LN).[30]
  • 2023 року односпрямовані («авторегресійні») трансформери використовували в GPT-3 (розміром понад 100 мільярдів) та інших моделях GPT OpenAI.[31][32]

Попередники

Перед трансформерами попередників механізму уваги додали до вентильних рекурентних нейронних мереж, як-от ДКЧП та вентильних рекурентних вузлів (ВРВ), які обробляли набори даних послідовно. Залежність від обчислень попередніх токенів перешкоджала їхній здатності розпаралелювати механізм уваги. 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

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])

Див. також

Примітки

  1. а б в г д е ж и к л Vaswani, Ashish; Shazeer, Noam; Parmar, Niki; Uszkoreit, Jakob; Jones, Llion; Gomez, Aidan N; Kaiser, Łukasz; Polosukhin, Illia (2017). Attention is All you Need (PDF). Advances in Neural Information Processing Systems (англ.). Curran Associates, Inc. 30.
  2. Hochreiter, Sepp; Schmidhuber, Jürgen (1 листопада 1997). Long Short-Term Memory. Neural Computation (англ.). 9 (8): 1735—1780. doi:10.1162/neco.1997.9.8.1735. ISSN 0899-7667. PMID 9377276. S2CID 1915014.
  3. а б Better Language Models and Their Implications. OpenAI (англ.). 14 лютого 2019. Архів оригіналу за 19 грудня 2020. Процитовано 25 серпня 2019.
  4. а б Bahdanau; Cho, Kyunghyun; Bengio, Yoshua (1 вересня 2014). Neural Machine Translation by Jointly Learning to Align and Translate (англ.). arXiv:1409.0473 [cs.CL].
  5. а б Luong, Minh-Thang; Pham, Hieu; Manning, Christopher D. (17 серпня 2015). Effective Approaches to Attention-based Neural Machine Translation (англ.). arXiv:1508.04025 [cs.CL].
  6. а б в Schmidhuber, Jürgen (1992). Learning to control fast-weight memories: an alternative to recurrent nets. Neural Computation (англ.). 4 (1): 131—139. doi:10.1162/neco.1992.4.1.131. S2CID 16683347.
  7. а б Schlag, Imanol; Irie, Kazuki; Schmidhuber, Jürgen (2021). Linear Transformers Are Secretly Fast Weight Programmers. ICML 2021. Springer. с. 9355—9366.
  8. а б Katharopoulos, Angelos; Vyas, Apoorv; Pappas, Nikolaos; Fleuret, François (2020). Transformers are RNNs: Fast autoregressive Transformers with linear attention. ICML 2020 (англ.). PMLR. с. 5156—5165.
  9. He, Cheng (31 грудня 2021). Transformer in CV. Transformer in CV (англ.). Towards Data Science. Архів оригіналу за 16 квітня 2023. Процитовано 19 червня 2021.
  10. Radford, Alec; Jong Wook Kim; Xu, Tao; Brockman, Greg; McLeavey, Christine; Sutskever, Ilya (2022). Robust Speech Recognition via Large-Scale Weak Supervision (англ.). arXiv:2212.04356 [eess.AS].
  11. а б Wolf, Thomas; Debut, Lysandre; Sanh, Victor; Chaumond, Julien; Delangue, Clement; Moi, Anthony; Cistac, Pierric; Rault, Tim; Louf, Remi; Funtowicz, Morgan; Davison, Joe; Shleifer, Sam; von Platen, Patrick; Ma, Clara; Jernite, Yacine; Plu, Julien; Xu, Canwen; Le Scao, Teven; Gugger, Sylvain; Drame, Mariama; Lhoest, Quentin; Rush, Alexander (2020). Transformers: State-of-the-Art Natural Language Processing. Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing: System Demonstrations (англ.). с. 38—45. doi:10.18653/v1/2020.emnlp-demos.6. S2CID 208117506.
  12. а б в Open Sourcing BERT: State-of-the-Art Pre-training for Natural Language Processing. Google AI Blog (англ.). 2 листопада 2018. Архів оригіналу за 13 січня 2021. Процитовано 25 серпня 2019.
  13. Elman, Jeffrey L. (березень 1990). Finding Structure in Time. Cognitive Science (англ.). 14 (2): 179—211. doi:10.1207/s15516709cog1402_1. S2CID 2763403.
  14. Choromanski, Krzysztof; Likhosherstov, Valerii; Dohan, David; Song, Xingyou; Gane, Andreea; Sarlos, Tamas; Hawkins, Peter; Davis, Jared; Mohiuddin, Afroz; Kaiser, Lukasz; Belanger, David; Colwell, Lucy; Weller, Adrian (2020). Rethinking Attention with Performers (англ.). arXiv:2009.14794 [cs.CL].
  15. Schmidhuber, Juergen (26 березня 2021). 26 March 1991: Neural nets learn to program neural nets with fast weights—the first Transformer variants. 2021-: New stuff! (англ.). IDSIA, Switzerland. Архів оригіналу за 5 грудня 2023. Процитовано 29 грудня 2023.
  16. а б Schmidhuber, Jürgen (1993). Reducing the ratio between learning complexity and number of time-varying variables in fully recurrent nets. ICANN 1993 (англ.). Springer. с. 460—463.
  17. Brown, Peter F. (1993). The mathematics of statistical machine translation: Parameter estimation. Computational Linguistics (англ.) (19): 263—311.
  18. Banko, Michele; Brill, Eric (2001). Scaling to very very large corpora for natural language disambiguation. Proceedings of the 39th Annual Meeting on Association for Computational Linguistics - ACL '01 (англ.). Morristown, NJ, USA: Association for Computational Linguistics: 26—33. doi:10.3115/1073012.1073017. S2CID 6645623.
  19. Sutskever, Ilya; Vinyals, Oriol; Le, Quoc V (2014). Sequence to Sequence Learning with Neural Networks. Advances in Neural Information Processing Systems. Curran Associates, Inc. 27. arXiv:1409.3215.
  20. Cho, Kyunghyun; van Merrienboer, Bart; Bahdanau, Dzmitry; Bengio, Yoshua (2014). On the Properties of Neural Machine Translation: Encoder–Decoder Approaches. Proceedings of SSST-8, Eighth Workshop on Syntax, Semantics and Structure in Statistical Translation (англ.). Stroudsburg, PA, USA: Association for Computational Linguistics: 103—111. arXiv:1409.1259. doi:10.3115/v1/w14-4012. S2CID 11336213.
  21. Chung, Junyoung; Gulcehre, Caglar; Cho, KyungHyun; Bengio, Yoshua (2014). Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling (англ.). arXiv:1412.3555 [cs.NE].
  22. Gruber, N.; Jockisch, A. (2020), Are GRU cells more specific and LSTM cells more sensitive in motive classification of text?, Frontiers in Artificial Intelligence (англ.), 3: 40, doi:10.3389/frai.2020.00040, PMC 7861254, PMID 33733157, S2CID 220252321
  23. Bahdanau, Dzmitry; Cho, Kyunghyun; Bengio, Yoshua (1 вересня 2014). Neural Machine Translation by Jointly Learning to Align and Translate (англ.). arXiv:1409.0473 [cs.CL].
  24. Google Scholar. scholar.google.com (англ.). Процитовано 13 серпня 2023.
  25. Lewis-Kraus, Gideon (14 грудня 2016). The Great A.I. Awakening. The New York Times (амер.). ISSN 0362-4331. Архів оригіналу за 24 травня 2023. Процитовано 22 червня 2023.
  26. Wu, Yonghui та ін. (1 вересня 2016). Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation (англ.). arXiv:1609.08144 [cs.CL].
  27. Devlin, Jacob; Chang, Ming-Wei; Lee, Kenton; Toutanova, Kristina (11 жовтня 2018). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (англ.). arXiv:1810.04805v2 [cs.CL].
  28. а б Dosovitskiy, Alexey; Beyer, Lucas; Kolesnikov, Alexander; Weissenborn, Dirk; Zhai, Xiaohua; Unterthiner, Thomas; Dehghani, Mostafa; Minderer, Matthias; Heigold, Georg; Gelly, Sylvain; Uszkoreit, Jakob (3 червня 2021). An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale (англ.). arXiv:2010.11929 [cs.CV].
  29. а б Gulati, Anmol; Qin, James; Chiu, Chung-Cheng; Parmar, Niki; Zhang, Yu; Yu, Jiahui; Han, Wei; Wang, Shibo; Zhang, Zhengdong; Wu, Yonghui; Pang, Ruoming (2020). Conformer: Convolution-augmented Transformer for Speech Recognition (англ.). arXiv:2005.08100 [eess.AS].
  30. а б Xiong, Ruibin; Yang, Yunchang; He, Di; Zheng, Kai; Zheng, Shuxin; Xing, Chen; Zhang, Huishuai; Lan, Yanyan; Wang, Liwei; Liu, Tie-Yan (29 червня 2020). On Layer Normalization in the Transformer Architecture (англ.). arXiv:2002.04745 [cs.LG].
  31. Improving language understanding with unsupervised learning. openai.com (амер.). 11 червня 2018. Архів оригіналу за 18 березня 2023. Процитовано 18 березня 2023.
  32. finetune-transformer-lm (англ.), OpenAI, 11 червня 2018, процитовано 1 травня 2023
  33. Papers with Code – A Decomposable Attention Model for Natural Language Inference. paperswithcode.com (англ.).
  34. Chen, Jia; Chen, Tao; Shen, Mengqi; Shi, Yunhai; Wang, Dongjing; Zhang, Xin (1 вересня 2022). Gated three-tower transformer for text-driven stock market prediction. Multimedia Tools and Applications (англ.). 81 (21): 30093—30119. doi:10.1007/s11042-022-11908-1. ISSN 1573-7721. S2CID 247987240.
  35. а б Raffel, Colin; Shazeer, Noam; Roberts, Adam; Lee, Katherine; Narang, Sharan; Matena, Michael; Zhou, Yanqi; Li, Wei; Liu, Peter J. (1 січня 2020). Exploring the limits of transfer learning with a unified text-to-text transformer. The Journal of Machine Learning Research (англ.). 21 (1): 140:5485–140:5551. arXiv:1910.10683. ISSN 1532-4435.
  36. Kariampuzha, William; Alyea, Gioconda; Qu, Sue; Sanjak, Jaleal; Mathé, Ewy; Sid, Eric; Chatelaine, Haley; Yadaw, Arjun; Xu, Yanji; Zhu, Qian (2023). Precision information extraction for rare disease epidemiology at scale. Journal of Translational Medicine (англ.). 21 (1): 157. doi:10.1186/s12967-023-04011-y. PMC 9972634. PMID 36855134.
  37. Assael, Yannis; Sommerschield, Thea; Shillingford, Brendan; Bordbar, Mahyar; Pavlopoulos, John; Chatzipanagiotou, Marita; Androutsopoulos, Ion; Prag, Jonathan; de Freitas, Nando (березень 2022). Restoring and attributing ancient texts using deep neural networks. Nature (англ.). 603 (7900): 280—283. Bibcode:2022Natur.603..280A. doi:10.1038/s41586-022-04448-z. ISSN 1476-4687. PMC 8907065. PMID 35264762.
  38. Sequence Modeling with Neural Networks (Part 2): Attention Models. Indico (англ.). 18 квітня 2016. Архів оригіналу за 21 жовтня 2020. Процитовано 15 жовтня 2019.
  39. а б в Alammar, Jay. The Illustrated Transformer. jalammar.github.io (англ.). Архів оригіналу за 18 жовтня 2020. Процитовано 15 жовтня 2019.
  40. Clark, Kevin; Khandelwal, Urvashi; Levy, Omer; Manning, Christopher D. (серпень 2019). What Does BERT Look at? An Analysis of BERT's Attention. Proceedings of the 2019 ACL Workshop BlackboxNLP: Analyzing and Interpreting Neural Networks for NLP (англ.). Florence, Italy: Association for Computational Linguistics: 276—286. arXiv:1906.04341. doi:10.18653/v1/W19-4828. Архів оригіналу за 21 жовтня 2020. Процитовано 20 травня 2020.
  41. LeCun, Yann (28 квітня 2023). A survey of LLMs with a practical guide and evolutionary tree. Twitter (англ.). Архів оригіналу за 23 червня 2023. Процитовано 23 червня 2023.
  42. Masked language modeling. huggingface.co (англ.). Процитовано 5 жовтня 2023.
  43. Causal language modeling. huggingface.co (англ.). Процитовано 5 жовтня 2023.
  44. Shazeer, Noam (1 лютого 2020). GLU Variants Improve Transformer (англ.). arXiv:2002.05202 [cs.LG].
  45. Dufter, Philipp; Schmitt, Martin; Schütze, Hinrich (6 червня 2022). Position Information in Transformers: An Overview. Computational Linguistics (англ.). 48 (3): 733—763. arXiv:2102.11090. doi:10.1162/coli_a_00445. ISSN 0891-2017. S2CID 231986066.
  46. Su, Jianlin; Lu, Yu; Pan, Shengfeng; Murtadha, Ahmed; Wen, Bo; Liu, Yunfeng (1 квітня 2021). RoFormer: Enhanced Transformer with Rotary Position Embedding (англ.). arXiv:2104.09864 [cs.CL].
  47. Press, Ofir; Smith, Noah A.; Lewis, Mike (1 серпня 2021). Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation (англ.). arXiv:2108.12409 [cs.CL].
  48. Shaw, Peter; Uszkoreit, Jakob; Vaswani, Ashish (2018). Self-Attention with Relative Position Representations (англ.). arXiv:1803.02155 [cs.CL].
  49. Dao, Tri; Fu, Dan; Ermon, Stefano; Rudra, Atri; Ré, Christopher (6 грудня 2022). FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness. Advances in Neural Information Processing Systems (англ.). 35: 16344—16359. arXiv:2205.14135.
  50. Stanford CRFM. crfm.stanford.edu (англ.). Процитовано 18 липня 2023.
  51. FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning. Princeton NLP (англ.). 17 червня 2023. Процитовано 18 липня 2023.
  52. Introducing Together AI Chief Scientist Tri Dao, as he releases FlashAttention-2 to speed up model training and inference. TOGETHER (амер.). Процитовано 18 липня 2023.
  53. Chowdhery, Aakanksha; Narang, Sharan; Devlin, Jacob; Bosma, Maarten; Mishra, Gaurav; Roberts, Adam; Barham, Paul; Chung, Hyung Won; Sutton, Charles; Gehrmann, Sebastian; Schuh, Parker; Shi, Kensen; Tsvyashchenko, Sasha; Maynez, Joshua; Rao, Abhishek (1 квітня 2022). PaLM: Scaling Language Modeling with Pathways (англ.). arXiv:2204.02311 [cs.CL].
  54. а б Leviathan, Yaniv; Kalman, Matan; Matias, Yossi (18 травня 2023), Fast Inference from Transformers via Speculative Decoding (англ.), arXiv:2211.17192
  55. Fu, Yao (13 грудня 2023). Towards 100x Speedup: Full Stack Transformer Inference Optimization (англ.).
  56. Chen, Charlie; Borgeaud, Sebastian; Irving, Geoffrey; Lespiau, Jean-Baptiste; Sifre, Laurent; Jumper, John (2 лютого 2023), Accelerating Large Language Model Decoding with Speculative Sampling (англ.), arXiv:2302.01318
  57. а б Kitaev, Nikita; Kaiser, Łukasz; Levskaya, Anselm (2020). Reformer: The Efficient Transformer (англ.). arXiv:2001.04451 [cs.LG].
  58. Constructing Transformers For Longer Sequences with Sparse Attention Methods. Google AI Blog (англ.). 25 березня 2021. Архів оригіналу за 18 вересня 2021. Процитовано 28 травня 2021.
  59. Tasks with Long Sequences – Chatbot. Coursera (англ.). Архів оригіналу за 26 жовтня 2020. Процитовано 22 жовтня 2020.
  60. Reformer: The Efficient Transformer. Google AI Blog (англ.). 16 січня 2020. Архів оригіналу за 22 жовтня 2020. Процитовано 22 жовтня 2020.
  61. Zhai, Shuangfei; Talbott, Walter; Srivastava, Nitish; Huang, Chen; Goh, Hanlin; Zhang, Ruixiang; Susskind, Josh (21 вересня 2021). An Attention Free Transformer (англ.). arXiv:2105.14103 [cs.LG].
  62. Tay, Yi; Dehghani, Mostafa; Abnar, Samira; Shen, Yikang; Bahri, Dara; Pham, Philip; Rao, Jinfeng; Yang, Liu; Ruder, Sebastian; Metzler, Donald (8 листопада 2020). Long Range Arena: A Benchmark for Efficient Transformers (англ.). arXiv:2011.04006 [cs.LG].
  63. Peng, Hao; Pappas, Nikolaos; Yogatama, Dani; Schwartz, Roy; Smith, Noah A.; Kong, Lingpeng (19 березня 2021). Random Feature Attention (англ.). arXiv:2103.02143 [cs.CL].
  64. Choromanski, Krzysztof; Likhosherstov, Valerii; Dohan, David; Song, Xingyou; Gane, Andreea; Sarlos, Tamas; Hawkins, Peter; Davis, Jared; Belanger, David; Colwell, Lucy; Weller, Adrian (30 вересня 2020). Masked Language Modeling for Proteins via Linearly Scalable Long-Context Transformers (англ.). arXiv:2006.03555 [cs.LG].
  65. Radford, Alec; Kim, Jong Wook; Xu, Tao; Brockman, Greg; McLeavey, Christine; Sutskever, Ilya (2022). Robust Speech Recognition via Large-Scale Weak Supervision (англ.). arXiv:2212.04356 [eess.AS].
  66. Jaegle, Andrew; Gimeno, Felix; Brock, Andrew; Zisserman, Andrew; Vinyals, Oriol; Carreira, Joao (22 червня 2021). Perceiver: General Perception with Iterative Attention (англ.). arXiv:2103.03206 [cs.CV].
  67. Jaegle, Andrew; Borgeaud, Sebastian; Alayrac, Jean-Baptiste; Doersch, Carl; Ionescu, Catalin; Ding, David; Koppula, Skanda; Zoran, Daniel; Brock, Andrew; Shelhamer, Evan; Hénaff, Olivier (2 серпня 2021). Perceiver IO: A General Architecture for Structured Inputs & Outputs (англ.). arXiv:2107.14795 [cs.LG].
  68. Peebles, William; Xie, Saining (2 березня 2023). Scalable Diffusion Models with Transformers (англ.). arXiv:2212.09748 [cs.CV].
  69. Google AI Unveils Muse, a New Text-to-Image Transformer Model. InfoQ (англ.).
  70. Using Diffusion Models to Create Superior NeRF Avatars (англ.). 5 січня 2023.
  71. Islam, Arham (14 листопада 2022). How Do DALL·E 2, Stable Diffusion, and Midjourney Work? (англ.).

Література

— Обговорення дії трансформерного шару як еквіваленту гопфілдового уточнення, що наближує вхід до однієї з нерухомих точок (образів подання) неперервнозначної мережі Гопфілда.