🔴 Сложный ⏱️ 25 минут

Attention mechanism: как нейросети научились фокусироваться

Attention mechanism: как нейросети научились фокусироваться

🎯 Зачем это нужно?

Представь, что ты читаешь сообщение в чате: “Встретимся завтра в том месте, где мы были вчера” 📱. Твой мозг автоматически понимает, что “том месте” связано с “где мы были вчера”, хотя эти слова разделены другими словами.

Вот именно эту магию и делает attention mechanism! Он используется в:

🤖 ChatGPT и GPT-4 - когда отвечает на вопрос, “внимание” помогает связать слова из разных частей контекста 🌍 Google Translate - переводит “Я вчера видел собаку, которая была очень милой” и правильно понимает, что “которая” относится к “собаку” 🎵 Spotify рекомендации - анализирует, какие песни ты слушал вместе, чтобы найти скрытые связи

📚 История вопроса

В 2014 году исследователи столкнулись с проблемой: нейросети для перевода “забывали” начало предложения к концу. Представь, что ты переводишь фразу “Красивая девочка в синем платье танцует” на английский, но к слову “танцует” уже не помнишь, что девочка была “красивая” 😅

Дмитрий Банахдану и его коллеги в 2015 году придумали attention - механизм, который позволяет модели “оглядываться назад” и смотреть на все слова одновременно. А в 2017 году вышла знаменитая статья “Attention Is All You Need” - и всё изменилось!

Сейчас attention лежит в основе всех крутых ИИ: от ChatGPT до DALL-E.

💡 Интуиция

Attention работает как твоё внимание при чтении 👀. Когда ты видишь местоимение “он”, твой мозг автоматически ищет в предыдущем тексте, к кому это относится.

Аналогия с поиском в Google:

  • Query (запрос) = текущее слово, для которого ищем связи
  • Key (ключ) = все остальные слова в тексте
  • Value (значение) = информация, которую эти слова несут

Когда ты гуглишь “лучший смартфон 2024”, поисковик сравнивает твой запрос с ключевыми словами на сайтах и выдаёт самые релевантные результаты. Attention делает то же самое внутри нейросети!

[МЕДИА: image_01] Описание: Схема attention mechanism с Query, Key, Value на примере предложения “Кот сидит на коврике” Промпт: “educational diagram showing attention mechanism with Query-Key-Value concept, sentence example with arrows showing word relationships, modern clean style, suitable for technical audience, blue and orange color scheme”

📐 Формальное определение

Self-Attention вычисляется по формуле:

Attention(Q, K, V) = softmax(QK^T / √d_k) · V

Где:

  • Q (queries) - матрица запросов размера [seq_len, d_k]
  • K (keys) - матрица ключей размера [seq_len, d_k]
  • V (values) - матрица значений размера [seq_len, d_v]
  • d_k - размерность ключей (для нормализации)

Пошагово:

  1. QK^T - считаем “совместимость” каждого слова с каждым
  2. / √d_k - нормализуем, чтобы градиенты не взрывались
  3. softmax(…) - превращаем в вероятности (сумма = 1)
  4. · V - взвешенная сумма всех слов

🔍 Примеры с разбором

Пример 1: “Девочка играла с собакой. Она была счастлива.”

Когда модель обрабатывает слово “Она”, attention помогает понять, к кому это относится.

Шаг 1: Query = embedding(“Она”) Шаг 2: Keys = [embedding(“Девочка”), embedding(“играла”), embedding(“с”), embedding(“собакой”)]
Шаг 3: Считаем скалярные произведения:

  • “Она” · “Девочка” = 0.8 (высокое сходство!)
  • “Она” · “играла” = 0.1
  • “Она” · “с” = 0.05
  • “Она” · “собакой” = 0.3

Шаг 4: Softmax превращает в веса: [0.65, 0.05, 0.02, 0.28] Шаг 5: Взвешенная сумма: 0.65 · V_девочка + 0.05 · V_играла + 0.02 · V_с + 0.28 · V_собакой

Результат: модель понимает, что “Она” = в основном “Девочка”! 🎯

[МЕДИА: image_02] Описание: Heatmap attention weights для примера с местоимением “она” Промпт: “attention heatmap visualization showing word-to-word attention weights, sentence with pronoun resolution, color-coded matrix, educational style, clear labels”

Пример 2: Машинный перевод

Переводим “I love this beautiful red car” → “Я люблю эту красивую красную машину”

При переводе слова “красную”, attention смотрит на:

  • “red” (основной вес 0.7)
  • “beautiful” (вес 0.2 - для согласования)
  • “car” (вес 0.1 - для контекста рода)

Так модель понимает, что нужно женский род, потому что “машину”!

🎮 Практика

Базовый уровень 🟢

Задание 1: В предложении “Студент сдал экзамен. Он был сложным.” - на какое слово должно обратить внимание слово “сложным”?

💡 Подсказка Подумай о грамматическом роде и смысле
✅ Ответ На "экзамен" - потому что "сложным" описывает экзамен, а не студента

Задание 2: Почему в формуле attention есть деление на √d_k?

💡 Подсказка Что происходит со скалярными произведениями при большой размерности?
✅ Ответ При большой размерности скалярные произведения становятся очень большими, softmax "схлопывается" в одну позицию. Деление нормализует это.

Задание 3: Размерность Q = [10, 64], K = [10, 64]. Какая размерность у QK^T?

✅ Ответ [10, 10] - квадратная матрица attention весов

Продвинутый уровень 🟡

Задание 4: Реализуй простой attention на Python:

import numpy as np

def simple_attention(Q, K, V):
    # Твой код здесь
    pass

# Тест
Q = np.random.randn(5, 8)  # 5 слов, 8 размерность
K = np.random.randn(5, 8)
V = np.random.randn(5, 8)
result = simple_attention(Q, K, V)
print(result.shape)  # должно быть (5, 8)

Задание 5: Multi-Head Attention использует 8 голов. Если d_model = 512, то какая d_k для каждой головы?

✅ Ответ d_k = 512 / 8 = 64. Каждая голова работает с меньшей размерностью, потом результаты конкатенируются.

Задание 6: Объясни, почему self-attention имеет сложность O(n²) по длине последовательности.

💡 Подсказка Посмотри на размерность матрицы QK^T
✅ Ответ Каждое из n слов сравнивается с каждым из n слов → матрица n×n → O(n²)

Челлендж 🔴

Задание 7: Как решить проблему O(n²) для очень длинных текстов? Исследуй Sparse Attention, Linear Attention или Longformer.

Задание 8: Придумай, как модифицировать attention для работы с графами (Graph Attention Networks). В чём будет отличие от обычного self-attention?

⚠️ Частые ошибки

Ошибка: “Attention просто запоминает всё предыдущее” ✅ Правильно: Attention динамически выбирает, на что смотреть для каждого конкретного слова 💡 Почему: Веса attention меняются для каждой позиции

Ошибка: “Большие веса attention = лучше”
Правильно: Важна правильность распределения весов, а не их абсолютная величина 💡 Почему: Softmax нормализует веса, делая их суммой равной 1

Ошибка: Забывать про нормализацию √d_k ✅ Правильно: Всегда нормализовать для стабильности обучения 💡 Почему: Без нормализации градиенты могут взрываться при больших размерностях

Ошибка: “Query, Key, Value - это разные данные” ✅ Правильно: В self-attention все три матрицы получаются из одного входа через разные линейные преобразования 💡 Почему: Self-attention означает, что последовательность “смотрит сама на себя”

🎓 Главное запомнить

Attention = взвешенная сумма всех элементов последовательностиФормула: Attention(Q,K,V) = softmax(QK^T/√d_k)·V
Применение: ChatGPT, переводчики, рекомендательные системы ✅ Сложность: O(n²) по длине последовательности

🔗 Связь с другими темами

Назад: Урок 341 заложил основы работы с последовательностями - attention расширяет эти идеи Вперёд: Изучив attention, ты готов к Transformer архитектуре, BERT, GPT и современным языковым моделям Связи: Attention используется не только в NLP, но и в computer vision (Vision Transformer), рекомендательных системах и даже в играх!

Понял тему? Закрепи в боте! 🚀

Попрактикуйся на задачах и получи персональные рекомендации от AI

💪 Начать тренировку
💬 Есть вопрос? Спроси бота!