Увага (машинне навчання)
Шаблон:Short description Шаблон:Машинне навчання
Ува́га (Шаблон:Lang-en) на основі машинного навчання — це механізм, який інтуїтивно імітує когнітивну увагу. Він обчислює «м'які» (Шаблон:Lang-en) ваги для кожного слова, точніше, для його вкладення, у Шаблон:Нпні. Ці ваги можливо обчислювати або паралельно (як у трансформерах), або послідовно (як у рекурентних нейронних мережах). «М'які» ваги можуть змінюватися протягом кожного виконання, на противагу до «жорстких» (Шаблон:Lang-en) ваг, які тренують (наперед), тонко настроюють та залишають після цього замороженими.
Увагу розробили для подолання слабкостей використання інформації з Шаблон:Нпні рекурентних нейронних мереж. Рекурентні нейронні мережі віддають перевагу свіжішій інформації, що міститься в словах наприкінці речення, тоді як раніша інформація в реченні очікувано приглушується. Увага дозволяє обчисленню прихованого подання токена мати рівний доступ до будь-якої частини речення безпосередньо, а не лише через попередній прихований стан.
Раніші використання додавали цей механізм до послідовної системи мовного перекладу рекурентними нейронними мережами (нижче), але пізніші використання у великих мовних моделях трансформерів усунули рекурентні нейронні мережі, й покладалися значною мірою на швидшу паралельну схему уваги.
Попередники
Попередники цього механізму використовували в рекурентних нейронних мережах, які, проте, обчислювали «м'які» ваги послідовно, і на кожному кроці розглядали поточне слово й інші слова у контекстному вікні. Вони були відомі як мультиплікативні модулі (Шаблон:Lang-en), вузли сигма-пі (Шаблон:Lang-en)[1] та гіпермережі (Шаблон:Lang-en).[2] Їх використовували в мережах довгої короткочасної пам'яті (ДКЧП), обробці мультисенсорних даних (звуку, зображень, відео та тексту) в персіверах, пам'яті контролера швидких ваг,[3] завданнях міркування в Шаблон:Нп, та в нейронних машинах Тюрінга.[4][5][6][7][8]
Центральні обчислення
Мережу уваги розробили для встановлювання найвищих кореляцій між словами в реченні, виходячи з припущення, що вона навчилася цих закономірностей з тренувального корпусу. Ця кореляція фіксується в нейронних вагах через зворотне поширення, або з самокерованого попереднього тренування, або з керованого тонкого настроювання.
Наведений нижче приклад показує, як встановлюються кореляції, коли мережа натренована й має правильні ваги. Розглядаючи слово «that» в реченні «see that girl run», мережа повинна вміти встановити «girl» як слово з високою кореляцією. Для спрощення цей приклад зосереджено на слові «that», але насправді всі слова отримують таке ж оброблення паралельно, і результати м'яких ваг та контекстних векторів складаються в матриці для подальшого використання в конкретних завданнях.
Вектор запиту порівнюється (через скалярний добуток) із кожним словом у ключах. Це допомагає моделі виявляти найвідповідніше слово для слова запиту. В цьому випадку як найвідповідніше слову «that» було визначено слово «girl». Результат (розміру 4 в цьому випадку) проганяється крізь функцію softmax, даючи вектор розміру 4 з імовірностями, що дають у сумі 1. Перемноження його на матрицю значень дієво підсилює сигнал для найважливіших слів у реченні, й послаблює сигнал для менш важливих слів.[5]
Структура даних входу вловлюється у вагах Шаблон:Math та Шаблон:Math, а ваги Шаблон:Math виражають цю структуру в термінах змістовніших ознак для задачі, для якої здійснюється тренування. Через це складові голови уваги називають «запитом» (Шаблон:Lang-en, Шаблон:Math), «ключем» (Шаблон:Lang-en, Шаблон:Math) та «значенням» (Шаблон:Lang-en, Шаблон:Math) — вільна та можливо оманлива аналогія з системами реляційних баз даних.
Зауважте, що вектор контексту для «that» не залежить від векторів контексту для інших слів, тож вектори контексту для всіх слів можливо обчислювати, використовуючи всю матрицю Шаблон:Math, яка містить всі вкладення слів, замість вектора Шаблон:Math вкладення єдиного слова у наведеній вище формулі, відтак запаралелюючи обчислення. Тепер softmax можливо інтерпретувати як матричну softmax, що діє на окремі рядки. Це величезна перевага над рекурентними мережами, які мусять діяти послідовно.
Приклад мовного перекладу
Щоби побудувати машину, яка перекладає з англійської французькою, до звичайного кодувальника—декодувальника прищеплюють вузол уваги (схема нижче). В найпростішому випадку вузол уваги (Шаблон:Lang-en) складається зі скалярних добутків рекурентних станів кодувальника й не потребує тренування. На практиці вузол уваги складається з 3 тренованих повнозв'язних шарів нейронних мереж, званих запитом (Шаблон:Lang-en), ключем (Шаблон:Lang-en) та значенням (Шаблон:Lang-en).
Шаблон:Plain image with caption
| Мітка | Опис |
|---|---|
| 100 | максимальна довжина речення |
| 300 | розмір вкладення (розмірність слова) |
| 500 | довжина прихованого вектора |
| 9k, 10k | розміри словників мов входу й виходу відповідно. |
| x, Y | словникові вектори унітарного кодування розмірів 9k та 10k. x → x втілено як таблицю пошуку, а не векторне множення. Y це унітарний максимізувальник лінійного шару декодувальника D, тобто, він бере argmax виходу лінійного шару D. |
| x | 300-елементний вектор вкладення слів. Ці вектори зазвичай обчислюють заздалегідь за допомогою інших проєктів, таких як GloVe чи Word2Vec. |
| h | 500-елементний прихований вектор кодувальника. На кожному часовому кроці цей вектор узагальнює всі слова, що йому передували. Остаточний h можливо розглядати як вектор «речення» або Шаблон:Нп, як його називає Гінтон. |
| s | 500-елементний вектор прихованого стану декодувальника. |
| E | 500-нейронний рекурентно-нейромережний кодувальник (Шаблон:Lang-en). 500 виходів. Кількість входів становить 800: 300 з первинного вкладення + 500 з рекурентних зв'язків. Кодувальник здійснює пряму подачу до декодувальника лише щоби встановити його в початковий стан, але не після, тому цей прямий зв'язок заледве показано. |
| D | 2-шаровий декодувальник (Шаблон:Lang-en). Рекурентний шар має 500 нейронів, а повноз'єднаний лінійний шар має 10k нейронів (розмір цільового словника).[9] Лише лінійний шар має 5 мільйонів (500 × 10k) ваг — приблизно вдесятеро більше за рекурентний. |
| score | 100-елементна оцінка відповідності положення (Шаблон:Lang-en) |
| w | 100-елементний вектор ваг уваги. Це — «м'які» ваги, які змінюються під час прямого проходження, на противагу до «жорстких» нейронних ваг, які змінюються під час етапу навчання. |
| A | Модуль уваги (Шаблон:Lang-en) — це може бути скалярний добуток рекурентних станів, або повноз'єднані шари запит—ключ—значення. Вихід — 100-елементний вектор w. |
| H | 500×100. 100 прихованих векторів h, об'єднаних у матрицю |
| c | 500-елементний вектор контексту = H * w. c — лінійна комбінація векторів h, зважених w. |
Розглянуті як матриця, ваги уваги показують, як мережа підлаштовує своє зосередження відповідно до контексту.[10]
| I | love | you | |
| je | 0.94 | 0.02 | 0.04 |
| t' | 0.11 | 0.01 | 0.88 |
| aime | 0.03 | 0.95 | 0.02 |
Цей погляд на ваги уваги торкається проблеми «поясненності» нейронних мереж. Мережі, що виконують дослівний переклад незалежно від порядку слів, показували би найвищі оцінки уздовж (головної) діагоналі матриці. Позадіагональне домінування показує, що механізм уваги є витонченішим. Під час першого проходження декодувальником 94 % ваги уваги припадає на перше англійське слово «I», тому мережа пропонує слово «je». На другому проході декодувальника 88 % ваги уваги припадає на третє англійське слово «you», тому вона пропонує «t'». На останньому проході 95 % ваги уваги припадає на друге англійське слово «love», тому вона пропонує «aime».
Варіанти
М'які ваги втілено багатьма варіантами уваги, такими як
- «внутрішні центри уваги» (Шаблон:Lang-en),[11] породжувані програмувальниками швидких ваг або контролерами швидких ваг (1992)[3] (відомі також як трансформери з «лінеаризованою самоувагою», Шаблон:Lang-en[12][13]). Повільна нейронна мережа вчиться за допомогою градієнтного спуску програмувати швидкі ваги іншої нейронної мережі через тензорні добутки самопороджуваних шаблонів збудження, званих «FROM» та «TO», які в трансформеровій термінології називають «ключем» (Шаблон:Lang-en) та «значенням» (Шаблон:Lang-en). Це відображення уваги (Шаблон:Lang-en) швидкими вагами застосовують до запитів (Шаблон:Lang-en).
- Увага в стилі Багданова (Шаблон:Lang-en),[10] яку також називають адитивною увагою (Шаблон:Lang-en)
- Увага в стилі Луонга (Шаблон:Lang-en),[14] відома як мультиплікативна увага (Шаблон:Lang-en),
- високорозпаралелювана самоувага (Шаблон:Lang-en), представлена 2016 року як розкладана самоувага (Шаблон:Lang-en),[15] й успішно використана в трансформерах роком пізніше.
Для згорткових нейронних мереж механізми уваги можливо розрізняти за виміром, на якому вони працюють, а саме: просторова увага (Шаблон:Lang-en),[16] канальна увага (Шаблон:Lang-en),[17] та комбінації.[18][19]
Ці варіанти рекомбінують входи з боку кодувальника, щоби перерозподілювати ці впливи на кожен цільовий вихід. Часто коефіцієнти перезважування задає матриця скалярних добутків у стилі кореляції.
| 1. скалярний добуток кодувальника й декодувальника | 2. QKV кодувальника й декодувальника | 3. скалярний добуток лише кодувальника | 4. QKV лише кодувальника | 5. посібник Pytorch |
|---|---|---|---|---|
| Мітка | Опис |
|---|---|
| Змінні X, H, S, T | Змінні великими літерами подають все речення, а не лише поточне слово. Наприклад, H — це матриця прихованого стану кодувальника, по слову на стовпець |
| S, T | S — прихований стан декодувальника; T — вкладення цільових слів. У посібнику Pytorch на етапі тренування T перемикається між двома джерелами залежно від використовуваного рівня вчителевого нав'язування. T може бути вкладенням слова виходу мережі, тобто вкладення(argmax(вихід FC)). Як альтернатива за вчителевого примусу, T може бути вкладенням відомого правильного слова, що може траплятися зі сталою ймовірністю примусу, скажімо, 1/2. |
| X, H | H — прихований стан кодувальника, X — вкладення слів входу. |
| W | Коефіцієнти уваги |
| Qw, Kw, Vw, FC | Вагові матриці для запиту (Шаблон:Lang-en), ключа (Шаблон:Lang-en), значення (Шаблон:Lang-en) відповідно. FC — повноз'єднана (Шаблон:Lang-en) вагова матриця. |
| ⊕, ⊗ | ⊕ — векторна конкатенація; ⊗ — матричне множення. |
| corr | Постовпчикова softmax(матриця всіх комбінацій скалярних добутків). Скалярні добутки це xi * xj у варіанті № 3, hi * sj у варіанті 1, стовпець i ( Kw * H ) * стовпець j ( Qw * S ) у варіанті 2, та стовпець i ( Kw * X ) * стовпець j ( Qw * X ) у варіанті 4. Варіант 5 для встановлення коефіцієнтів використовує повноз'єднаний шар. Якщо варіант з QKV, то скалярні добутки унормовують Шаблон:Math, де Шаблон:Math — висота матриць QKV. |
Математичне подання
Стандартна масштабована скалярнодобуткова увага
де — матриці запиту, ключа та значення відповідно, — розмірність ключів. Вектори значень у матриці зважують за допомогою ваг, отриманих в результаті операції softmax.
Багатоголова увага
де кожна з голів обчислюється як
а та — матриці параметрів.
Багдановська (адитивна) увага
де , а та — навчані вагові матриці.[10]
Луонгова увага (загальна)
де — навчана вагова матриця.[14]
Див. також
Примітки
Посилання
- Шаблон:Нп and James H. Martin (2022) Speech and Language Processing (3rd ed. draft, January 2022), ch. 10.4 Attention and ch. 9.7 Self-Attention Networks: Transformers Шаблон:Ref-en
- Шаблон:Нп (4 травня 2020 р.), Attention and Memory in Deep Learning (відеолекція), DeepMind / UCL, на YouTube Шаблон:Ref-en
- Rasa Algorithm Whiteboard - Attention на YouTube Шаблон:Ref-en
Шаблон:Диференційовні обчислення
- ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюPDPне вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюLecun2020не вказано текст - ↑ 3,0 3,1 Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюtransform1992не вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюGraves2016не вказано текст - ↑ 5,0 5,1 Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюallyouneedне вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюRamachandran2019не вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюjaegle2021не вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюtiernan2021не вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюpytorch_s2sне вказано текст - ↑ 10,0 10,1 10,2 Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюbahdanauне вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюattention1993не вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюschlag2021не вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюchoromanski2020не вказано текст - ↑ 14,0 14,1 14,2 Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюxy-dotне вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюparikhне вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюxzhu1не вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюjhu1не вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюpsanghyun1не вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюmgeorgescuне вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюxy-qkvне вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюxx-dotне вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюxx-qkvне вказано текст - ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюpytorch-tutorialне вказано текст




