Трансформер (модель машинного навчання)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Трансфо́рмер (англ. Transformer) — це модель глибинного навчання, представлена 2017 року, яку використовують переважно в області обробки природної мови (ОПМ).[1]

Як і рекурентні нейронні мережі (РНМ), Трансформери призначено для обробки послідовних даних, таких як природна мова, для таких задач як переклад[en] та реферування тексту. Проте, на відміну від РНМ, Трансформери не вимагають, щоби ці послідовні дані було оброблювано за порядком. Наприклад, якщо дані входу є реченням природної мови, то Трансформерові не потрібно обробляти його початок, перш ніж взятися за обробку його кінця. Через цю природу Трансформер уможливлює набагато більше розпаралелювання, ніж РНМ, і відтак знижує тривалості тренування.[1]

З часу їхнього представлення, Трансформери стали обраною моделлю для подолання багатьох задач в ОПМ, замінивши старіші моделі рекурентних нейронних мереж, такі як довга короткочасна пам'ять (ДКЧП). Оскільки модель Трансформер сприяє більшому розпаралелюванню під час тренування, вона уможливила тренування на більших наборах даних, ніж це було можливо до її представлення. Це призвело до розробки попередньо натренованих систем[en], таких як BERT[en] (англ. Bidirectional Encoder Representations from Transformers) та GPT[en] (англ. Generative Pre-trained Transformer), які було натреновано на величезних універсальних мовних наборах даних, і які можливо тонко налаштовувати під конкретні мовні задачі.[2][3]

Походження[ред. | ред. код]

До запровадження Трансформерів більшість сучасних системи ОПМ покладалися на вентильні рекурентні нейронні мережі (РНМ), такі як ДКЧП та вентильні рекурентні вузли (ВРВ), з доданим механізмами уваги (англ. attention mechanisms). Трансформер побудовано на цих технологіях уваги без використання структури РНМ, підкреслюючи той факт, що механізми уваги самі по собі, без рекурентної послідовної обробки, є достатньо потужними, щоби досягати продуктивності РНМ з увагою.

Вентильні РНМ обробляють лексеми послідовно, підтримуючи вектор стану, що містить представлення даних, побачене після кожної лексеми. Щоб обробити n-ту лексему, ця модель поєднує стан, що представляє речення по лексему n − 1, з інформацією про цю нову лексему, щоби створити новий стан, що представляє речення по лексему n. Теоретично, інформація від однієї лексеми може поширюватися послідовністю як завгодно далеко, якщо в кожній точці стан продовжує кодувати інформацію про цю лексему. Але на практиці цей механізм є недосконалим: частково через проблему зникання градієнту, стан моделі в кінці довгого речення часто не містить точної, добутної інформації про ранні лексеми.

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

Коли їх було додано до РНМ, механізми уваги призвели до великого виграшу в продуктивності. Впровадження Трансформера виявило той факт, що механізми уваги були потужними самі по собі, і що послідовна рекурентна обробка даних не була необхідною для досягнення виграшу в продуктивності РНМ з увагою. Трансформер використовує механізм уваги, не будучи РНМ, обробляючи всі лексеми одночасно, й обчислюючи ваги уваги між ними. Той факт, що Трансформери не покладаються на послідовну обробку, й дуже легко піддаються розпаралелюванню, дозволяє Трансформерам тренуватися ефективніше на більших наборах даних.

Архітектура[ред. | ред. код]

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

Функцією кожного з кодувальних шарів є оброблювати свій вхід, щоби породжувати кодування, що містять інформацію про те, які частини входів є релевантними одна до одної. Від передає свій набір кодувань наступному кодувальному шарові як входи. Кожен декодувальний шар робить протилежне, беручи всі ці кодування й обробляючи їх, використовуючи вбудовану до них контекстну інформацію, щоби породжувати послідовність виходу.[4] Для цього кожен кодувальний та декодувальний шар використовує механізм уваги, що для кожного входу зважує доречність кожного іншого входу та відповідним чином дістає з них інформацію, щоби виробляти вихід.[5] Кожен декодувальний шар також має додатковий механізм уваги, що дістає інформацію з виходів попередніх декодувальників перед тим, як цей декодувальник дістає інформацію з кодувань. Як кодувальні, так і декодувальні шари мають нейронну мережу прямого поширення для додаткової обробки виходів, та містять за́лишкові з'єднання й кроки унормовування шару.[5]

Масштабована скалярно-добуткова увага[ред. | ред. код]

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

Конкретно, для кожного вузла уваги модель Трансформер навчається трьох вагових матриць: ваг запиту (англ. query weights) , ваг ключа (англ. key weights) , та ваг значення (англ. value weights) . Для кожної лексеми вкладення слова[en] входу множиться на кожну з цих трьох матриць, даючи вектор запиту , вектор ключа , та вектор значення . Ваги уваги обчислюються з використанням векторів запиту та ключа: вага уваги з боку лексеми до лексеми є скалярним добутком на . Ваги уваги ділять на квадратний корінь розміру векторів ключа, , що стабілізує градієнти під час тренування, та пропускають через softmax, що унормовує ці ваги, щоби вони в сумі давали . Той факт, що та є різними матрицями, дає увазі можливість бути несиметричною: якщо лексема звертає увагу на лексему (тобто, є великим), то це не обов'язково означає, що лексема звертає увагу на лексему (тобто, що є великим). Виходом вузла уваги для лексеми є зважена сума векторів значення всіх лексем, зважених на , увагу з боку до кожної з лексем.

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

Багатоголова увага[ред. | ред. код]

Один набір матриць називають головою уваги (англ. attention head), й кожен шар у моделі Трансформер має декілька голів уваги. В той час як одна голова уваги звертає увагу на лексеми, що є релевантними до кожної з лексем, з декількома головами уваги ця модель може навчатися робити це для різних визначень «релевантності». Дослідники показали, багато голів уваги у Трансформерах кодують відношення релевантності, що є інтерпретовними для людей. Наприклад, є голови уваги, що для кожної лексеми звертають увагу переважно на наступне слово, або голови уваги, що переважно звертають увагу дієслів на їхні безпосередні об'єкти.[6] Оскільки моделі Трансформер мають декілька голів уваги, вони мають можливість схоплювати багато рівнів та типів відношень релевантності, від поверхневих до семантичних. Декілька виходів шару багатоголової уваги зчіплюють, щоби передавати їх до шарів нейронних мереж прямого поширення.

Кодувальник[ред. | ред. код]

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

Перший кодувальник отримує як вхід не кодування, а інформацію про положення та вкладення[en] послідовності входу. Інформація про положення є необхідною Трансформерові, щоби використовувати порядок послідовності, оскільки жодна інша частина Трансформера його не використовує.[1]

Декодувальник[ред. | ред. код]

Кожен декодувальник (англ. decoder) складається з трьох головних складових: механізму самоуваги, механізму уваги над кодуваннями, та нейронної мережі прямого поширення. Декодувальник працює подібно до кодувальника, крім вставленого додаткового механізму уваги, що натомість дістає релевантну інформацію з кодувань, породжених кодувальниками.[1][5]

Подібно до першого кодувальника, перший декодувальник бере як свій вхід не кодування, а інформацію про положення та вкладення послідовності виходу. Проте, оскільки Трансформер не повинен використовувати для передбачування виходу поточний або майбутній вихід, послідовність виходу повинно бути частково приховано, щоби запобігти цьому зворотному потокові інформації.[1] За крайнім декодувальником йде завершальне лінійне перетворення та шар softmax, щоби виробляти ймовірності виходу над словником.

Тренування[ред. | ред. код]

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

Втілення[ред. | ред. код]

Модель Трансформер було втілено в основних бібліотеках глибинного навчання, таких як TensorFlow та PyTorch. Нижче наведено псевдокод для втілення варіанту Трансформера, відомого як «стандартний» Трансформер (англ. "vanilla" transformer):

def vanilla_transformer(enc_inp, dec_inp):
    """Варіант Трансформера, відомий як "стандартний" ("vanilla") Трансформер."""
    x = embedding(enc_inp) * sqrt(d_m)
    x = x + pos_encoding(x)
    x = dropout(x)
    for _ in range(n_enc_layers):
        attn = multi_head_attention(x, x, x, None)
        attn = dropout(attn)
        attn = layer_normalization(x + attn)

        x = point_wise_ff(attn)
        x = layer_normalization(x + attn)

    # x у цій точці є виходом кодувальника
    enc_out = x

    x = embedding(dec_inp) * sqrt(d_m)
    x = x + pos_encoding(x)
    x = dropout(x)
    mask = causal_mask(x)
    for _ in range(n_dec_layers):
        attn1 = multi_head_attention(x, x, x, mask)
        attn1 = layer_normalization(attn1 + x)

        attn2 = multi_head_attention(attn1, enc_out, enc_out, None)
        attn2 = dropout(attn2)
        attn2 = layer_normalization(attn1 + attn2)

        x = point_wise_ff(attn2)
        x = layer_normalization(attn2 + x)
    return dense(x)

Застосування[ред. | ред. код]

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

2020 року було показано, що архітектуру Трансформер, а точніше GPT-2, може бути налаштовано для гри в шахи.[12]

Примітки[ред. | ред. код]

  1. а б в г д Polosukhin, Illia; Kaiser, Lukasz; Gomez, Aidan N.; Jones, Llion; Uszkoreit, Jakob; Parmar, Niki; Shazeer, Noam; Vaswani, Ashish (2017-06-12). «Attention Is All You Need». arXiv:1706.03762 [cs.CL].  (англ.)
  2. а б в Open Sourcing BERT: State-of-the-Art Pre-training for Natural Language Processing. Google AI Blog. Процитовано 2019-08-25.  (англ.)
  3. а б в Better Language Models and Their Implications. OpenAI. 2019-02-14. Процитовано 2019-08-25.  (англ.)
  4. Sequence Modeling with Neural Networks (Part 2): Attention Models. Indico. 2016-04-18. Процитовано 2019-10-15.  (англ.)
  5. а б в Alammar, Jay. The Illustrated Transformer. jalammar.github.io. Процитовано 2019-10-15.  (англ.)
  6. Clark, Kevin; Khandelwal, Urvashi; Levy, Omer; Manning, Christopher D. (August 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. doi:10.18653/v1/W19-4828.  Проігноровано невідомий параметр |doi-access= (довідка) (англ.)
  7. а б Wang, Alex; Singh, Amanpreet; Michael, Julian; Hill, Felix; Levy, Omer; Bowman, Samuel (2018). GLUE: A Multi-Task Benchmark and Analysis Platform for Natural Language Understanding. Proceedings of the 2018 EMNLP Workshop BlackboxNLP: Analyzing and Interpreting Neural Networks for NLP (Stroudsburg, PA, USA: Association for Computational Linguistics): 353–355. Bibcode:2018arXiv180407461W. arXiv:1804.07461. doi:10.18653/v1/w18-5446.  Проігноровано невідомий параметр |s2cid= (довідка) (англ.)
  8. Allard, Maxime (2019-07-01). What is a Transformer?. Medium (en). Процитовано 2019-10-21.  (англ.)
  9. Yang, Zhilin Dai, Zihang Yang, Yiming Carbonell, Jaime Salakhutdinov, Ruslan Le, Quoc V. (2019-06-19). XLNet: Generalized Autoregressive Pretraining for Language Understanding. OCLC 1106350082.  (англ.)
  10. а б Monsters, Data (2017-09-26). 10 Applications of Artificial Neural Networks in Natural Language Processing. Medium (en). Процитовано 2019-10-21.  (англ.)
  11. Rives, Alexander; Goyal, Siddharth; Meier, Joshua; Guo, Demi; Ott, Myle; Zitnick, C. Lawrence; Ma, Jerry; Fergus, Rob (2019). Biological structure and function emerge from scaling unsupervised learning to 250 million protein sequences. doi:10.1101/622803.  Проігноровано невідомий параметр |doi-access= (довідка); Проігноровано невідомий параметр |biorxiv= (довідка) (англ.)
  12. Noever, David; Ciolino, Matt; Kalin, Josh (2020-08-21). «The Chess Transformer: Mastering Play using Generative Language Models». arXiv:2008.04057 [cs.AI].  (англ.)