Middle — Senior
22
Что такое self-attention?
Компании, где спрашивали
SoftInterMob
Ответ от нейросети
sobes.tech AI
Self-attention — это механизм в нейронных сетях, который позволяет модели учитывать взаимосвязи между элементами входной последовательности при обработке каждого отдельного элемента. В отличие от традиционных рекуррентных или сверточных сетей, self-attention вычисляет весовые коэффициенты (внимание) для каждой пары элементов, чтобы понять, насколько один элемент важен для другого.
Принцип работы:
- Для каждого элемента последовательности вычисляются три вектора: Query (запрос), Key (ключ) и Value (значение).
- Веса внимания вычисляются как скалярное произведение Query и Key, нормализуются через softmax.
- Итоговое представление элемента получается как взвешенная сумма Value с этими весами.
Это позволяет эффективно моделировать зависимости на больших расстояниях в данных, что особенно важно в задачах обработки естественного языка, например, в трансформерах.
Пример упрощённого кода на Python (используя numpy):
import numpy as np
def softmax(x):
e_x = np.exp(x - np.max(x))
return e_x / e_x.sum(axis=-1, keepdims=True)
# Пример входных данных: последовательность из 3 элементов, каждый размером 4
X = np.random.rand(3, 4)
# Проекции в Query, Key, Value
W_q = np.random.rand(4, 4)
W_k = np.random.rand(4, 4)
W_v = np.random.rand(4, 4)
Q = X.dot(W_q)
K = X.dot(W_k)
V = X.dot(W_v)
# Вычисление матрицы внимания
scores = Q.dot(K.T) / np.sqrt(K.shape[1])
weights = softmax(scores)
# Итоговое представление
output = weights.dot(V)
print(output)