Увага (машинне навчання)

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

Шаблон: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», але насправді всі слова отримують таке ж оброблення паралельно, і результати м'яких ваг та контекстних векторів складаються в матриці для подальшого використання в конкретних завданнях.

Шаблон:Image frame

Вектор запиту порівнюється (через скалярний добуток) із кожним словом у ключах. Це допомагає моделі виявляти найвідповідніше слово для слова запиту. В цьому випадку як найвідповідніше слову «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).

Файл:Attention-animated.webm

Шаблон: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),[16] канальна увага (Шаблон:Lang-en),[17] та комбінації.[18][19]

Ці варіанти рекомбінують входи з боку кодувальника, щоби перерозподілювати ці впливи на кожен цільовий вихід. Часто коефіцієнти перезважування задає матриця скалярних добутків у стилі кореляції.

1. скалярний добуток кодувальника й декодувальника 2. QKV кодувальника й декодувальника 3. скалярний добуток лише кодувальника 4. QKV лише кодувальника 5. посібник Pytorch
Для обчислення уваги потрібні як кодувальник, так і декодувальник.[14]
Для обчислення уваги потрібні як кодувальник, так і декодувальник.[20]
Декодувальник для обчислення уваги не використовують. Із єдиним входом до corr, W є автокореляцією скалярних добутків. wij = xi xj[21]
Декодувальник для обчислення уваги не використовують.[22]
Замість скалярнодобуткової кореляції для обчислення уваги використовують повноз'єднаний (Шаблон:Lang-en) шар.[23]
Умовні позначення
Мітка Опис
Змінні 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.

Математичне подання

Стандартна масштабована скалярнодобуткова увага

Attention(Q,K,V)=softmax(QKTdk)V

де Q,K,V — матриці запиту, ключа та значення відповідно, dk — розмірність ключів. Вектори значень у матриці V зважують за допомогою ваг, отриманих в результаті операції softmax.

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

MultiHead(Q,K,V)=Concat(head1,...,headh)WO

де кожна з голів обчислюється як

headi=Attention(QWiQ,KWiK,VWiV)

а WiQ,WiK,WiV та WO — матриці параметрів.

Багдановська (адитивна) увага

Attention(Q,K,V)=softmax(e)V

де e=tanh(WQQ+WKK), а WQ та WK — навчані вагові матриці.[10]

Луонгова увага (загальна)

Attention(Q,K,V)=softmax(QWaKT)V

де Wa — навчана вагова матриця.[14]

Див. також

Примітки

Шаблон:Примітки

Посилання

Шаблон:Диференційовні обчислення

  1. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою PDP не вказано текст
  2. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою Lecun2020 не вказано текст
  3. 3,0 3,1 Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою transform1992 не вказано текст
  4. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою Graves2016 не вказано текст
  5. 5,0 5,1 Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою allyouneed не вказано текст
  6. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою Ramachandran2019 не вказано текст
  7. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою jaegle2021 не вказано текст
  8. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою tiernan2021 не вказано текст
  9. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою pytorch_s2s не вказано текст
  10. 10,0 10,1 10,2 Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою bahdanau не вказано текст
  11. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою attention1993 не вказано текст
  12. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою schlag2021 не вказано текст
  13. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою choromanski2020 не вказано текст
  14. 14,0 14,1 14,2 Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою xy-dot не вказано текст
  15. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою parikh не вказано текст
  16. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою xzhu1 не вказано текст
  17. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою jhu1 не вказано текст
  18. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою psanghyun1 не вказано текст
  19. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою mgeorgescu не вказано текст
  20. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою xy-qkv не вказано текст
  21. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою xx-dot не вказано текст
  22. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою xx-qkv не вказано текст
  23. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою pytorch-tutorial не вказано текст