How Self-Attention Is Calculated
Свайпніть щоб показати меню
Щоб зрозуміти, як обчислюється механізм самоуваги у трансформерах, необхідно дотримуватися чіткої послідовності математичних операцій. Механізм самоуваги дозволяє кожному слову в реченні зосереджуватися на інших словах під час формування вихідного представлення. Це досягається шляхом обчислення зваженої суми всіх вхідних векторів, де ваги відображають важливість кожного слова для поточного слова, що обробляється.
Припустимо, що у вас є коротке речення, представлене у вигляді матриці, де кожен рядок — це векторне представлення слова. Спочатку ці вектори проєктуються у запити, ключі та значення за допомогою навчуваних матриць ваг. Основою механізму самоуваги є обчислення оцінок уваги та агрегування векторів значень на основі цих оцінок.
Запити, ключі та значення — це різні представлення вхідних даних, кожне з яких використовується для певної ролі в обчисленні уваги.
Обчислення самоуваги
Самоувагу можна розбити на послідовність чітких математичних кроків для кожного слова в послідовності:
Проєкція вхідних даних у запити, ключі та значення: проєктування вхідної матриці за допомогою навчуваних вагових матриць для отримання запитів, ключів і значень.
123456789101112131415161718192021222324252627282930313233import numpy as np # Example input: 3 words, embedding size 4 X = np.array([ [1.0, 0.0, 1.0, 0.0], # word 1 [0.0, 2.0, 0.0, 2.0], # word 2 [1.0, 1.0, 1.0, 1.0] # word 3 ]) # Weight matrices for queries, keys, values (embedding size 4 -> 4) W_q = np.array([ [0.1, 0.2, 0.0, 0.0], [0.0, 0.1, 0.3, 0.0], [0.1, 0.0, 0.0, 0.2], [0.0, 0.0, 0.2, 0.3] ]) W_k = np.array([ [0.2, 0.0, 0.1, 0.0], [0.0, 0.1, 0.0, 0.3], [0.1, 0.0, 0.2, 0.0], [0.0, 0.2, 0.0, 0.1] ]) W_v = np.array([ [0.0, 0.1, 0.0, 0.2], [0.2, 0.0, 0.2, 0.0], [0.0, 0.3, 0.1, 0.0], [0.1, 0.0, 0.0, 0.3] ]) # Compute queries, keys, values Q = X @ W_q K = X @ W_k V = X @ W_v
Обчислення оцінок уваги:
- Обчислення схожості між кожним запитом і всіма ключами;
- Ці оцінки показують, скільки уваги кожне слово повинно приділяти іншим.
1scores = Q @ K.T
Масштабування оцінок: поділ оцінок уваги на квадратний корінь з розміру ключа. Це масштабування допомагає стабілізувати градієнти під час навчання.
12d_k = Q.shape[1] scaled_scores = scores / np.sqrt(d_k)
Застосування функції softmax: перетворення масштабованих оцінок на ваги уваги за допомогою функції softmax. Це гарантує, що ваги є додатними та для кожного слова їх сума дорівнює 1.
123456# Softmax to get attention weights def softmax(x): e_x = np.exp(x - np.max(x, axis=-1, keepdims=True)) return e_x / np.sum(e_x, axis=-1, keepdims=True) attention_weights = softmax(scaled_scores)
Обчислення зваженої суми значень: використання ваг уваги для обчислення зваженої суми векторів значень. Це формує фінальний вихід самоуваги для кожного слова.
12345# Weighted sum of values output = attention_weights @ V print("Attention weights:\n", attention_weights) print("Self-attention output:\n", output)
Ці кроки відображають основні обчислення механізму самоуваги в трансформерних моделях.
1. Який правильний порядок операцій у механізмі самоуваги для одного вхідного слова?
2. Чому ми масштабуємо оцінки уваги на квадратний корінь з розмірності ключа?
3. Які вектори використовуються для обчислення оцінок уваги
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат