Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Як реалізувати багатоголову увагу | Побудова компонентів Transformer
Трансформери для обробки природної мови

bookЯк реалізувати багатоголову увагу

Свайпніть щоб показати меню

12345678910111213141516171819202122232425262728293031323334353637383940
import numpy as np # Toy input: 3 tokens, embedding size 6 x = np.array([ [0.1, 0.2, 0.3, 0.4, 0.5, 0.6], [0.6, 0.5, 0.4, 0.3, 0.2, 0.1], [0.2, 0.1, 0.4, 0.3, 0.6, 0.5], ]) # Multi-head attention parameters num_heads = 2 embed_size = x.shape[1] head_dim = embed_size // num_heads # Random weights for queries, keys, and values for each head np.random.seed(42) W_q = np.random.randn(num_heads, embed_size, head_dim) W_k = np.random.randn(num_heads, embed_size, head_dim) W_v = np.random.randn(num_heads, embed_size, head_dim) attention_outputs = [] for head in range(num_heads): # Linear projections Q = x @ W_q[head] K = x @ W_k[head] V = x @ W_v[head] # Scaled dot-product attention scores = Q @ K.T / np.sqrt(head_dim) attention_weights = np.exp(scores) / np.sum(np.exp(scores), axis=-1, keepdims=True) head_output = attention_weights @ V attention_outputs.append(head_output) # Concatenate outputs from all heads multi_head_output = np.concatenate(attention_outputs, axis=-1) print("Output from head 0:\n", attention_outputs[0]) print("Output from head 1:\n", attention_outputs[1]) print("Concatenated multi-head output:\n", multi_head_output)
copy

Мультиголовна увага працює шляхом незалежного застосування однакового механізму самоуваги паралельно для декількох голів. Кожна голова використовує власні матриці ваг для запитів, ключів і значень (W_q, W_k та W_v), проектуючи вхід у нижчі підпростори. Вхідний масив x у цьому прикладі містить три токени з розмірністю вектору ознак 6 і розбивається на дві голови.

Для кожної голови код повторює стандартні кроки самоуваги: обчислює матриці запитів (Q), ключів (K) і значень (V), розраховує оцінки уваги шляхом добутку Q на K.T (з відповідним масштабуванням) і використовує softmax-функцію для отримання ваг уваги. Ці ваги використовуються для комбінування векторів значень, формуючи вихід кожної голови.

Жодного нового механізму тут немає — мультиголовна увага є просто паралельним виконанням процесу самоуваги для кожної голови. Після обробки всіх голів їхні виходи конкатенуються по останньому виміру. Такий підхід дозволяє моделі захоплювати різноманітні взаємозв'язки у даних, оскільки кожна голова може фокусуватися на різних аспектах вхідної інформації. Надруковані результати ілюструють, як багаторазове виконання одного й того ж механізму самоуваги та об'єднання результатів забезпечує багатше представлення для кожного токена.

question mark

Як об'єднуються виходи різних голів уваги у мультиголовній увазі?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 2

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 2. Розділ 2
some-alt