Attention is All You Need
Революция в обработке последовательностей
Ashish Vaswani, Noam Shazeer, Niki Parmar, et al. (2017)
Transformer
Self-Attention
NLP

Проблема существующих подходов

RNN/LSTM

  • Последовательная обработка данных
  • Проблемы с длинными зависимостями
  • Трудно распараллелить
  • Вычислительно затратно

CNN для последовательностей

  • Ограниченное рецептивное поле
  • Требуется много слоёв для глобальных зависимостей
  • Не учитывает порядок элементов

Решение: Механизм внимания

Позволяет модели напрямую обращаться к любой части входной последовательности, независимо от расстояния, с постоянным количеством операций.

Ключевые инновации

Self-Attention

Прямые связи между всеми элементами последовательности, независимо от расстояния

Multi-Head Attention

Несколько механизмов внимания, работающих параллельно для изучения разных типов зависимостей

Positional Encoding

Информация о порядке элементов добавляется через специальные embeddings

Архитектура Transformer

Transformer Architecture

Encoder

  • 6 идентичных слоёв
  • Каждый слой содержит:
    • Multi-head self-attention
    • Position-wise feed-forward network
  • Residual connections и layer normalization

Decoder

  • 6 идентичных слоёв
  • Дополнительно к encoder содержит:
    • Masked multi-head attention
    • Multi-head attention над выходом encoder
  • Также residual connections и layer normalization

Scaled Dot-Product Attention

Attention(Q, K, V) = softmax(QKT/√dk)V

Компоненты

  • Q (Query) - что ищем
  • K (Key) - что можем предложить
  • V (Value) - фактическая информация
  • dk - размерность ключей (масштабирующий коэффициент)

Почему масштабирование?

При больших dk скалярное произведение становится очень большим, pushing the softmax into regions with extremely small gradients.

Реализация на Python

import torch
import torch.nn.functional as F

def attention(query, key, value, mask=None):
    d_k = query.size(-1)
    scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(d_k)
    
    if mask is not None:
        scores = scores.masked_fill(mask == 0, -1e9)
    
    p_attn = F.softmax(scores, dim=-1)
    return torch.matmul(p_attn, value), p_attn

Multi-Head Attention

Multi-Head Attention

Концепция

  • Несколько attention heads (обычно 8)
  • Каждый head изучает разные аспекты зависимостей
  • Линейные проекции для Q, K, V перед attention
  • Результаты конкатенируются и проецируются обратно

Преимущества

Позволяет модели совместно обращать внимание на информацию из разных подпространств представления в разных позициях.

Реализация

class MultiHeadedAttention(nn.Module):
    def __init__(self, h, d_model):
        super().__init__()
        self.d_k = d_model // h
        self.h = h
        self.linears = clones(nn.Linear(d_model, d_model), 4)
        
    def forward(self, query, key, value, mask=None):
        nbatches = query.size(0)
        
        # 1) Проецируем и меняем размерность для h heads
        query, key, value = [
            lin(x).view(nbatches, -1, self.h, self.d_k).transpose(1, 2)
            for lin, x in zip(self.linears, (query, key, value))
        ]
        
        # 2) Применяем attention ко всем проекциям
        x, self.attn = attention(query, key, value, mask)
        
        # 3) Конкатенируем и проецируем обратно
        x = x.transpose(1, 2).contiguous() \
             .view(nbatches, -1, self.h * self.d_k)
        return self.linears[-1](x)

Positional Encoding

Зачем нужно?

Поскольку Transformer не содержит рекуррентных и сверточных операций, ему необходимо явное представление порядка элементов в последовательности.

Формула

PE(pos,2i) = sin(pos/100002i/dmodel)
PE(pos,2i+1) = cos(pos/100002i/dmodel)
  • pos - позиция в последовательности
  • i - размерность
  • dmodel - размерность embedding

Визуализация

Positional Encoding

Синусоидальные функции разных частот создают уникальные паттерны для каждой позиции

Результаты и влияние

Производительность

WMT 2014 English-to-German

28.4 BLEU (Transformer)
25.8 BLEU (Previous best)

WMT 2014 English-to-French

41.8 BLEU (Transformer)
40.4 BLEU (Previous best)

Вычислительная эффективность

В 3-10 раз быстрее в обучении, чем рекуррентные модели на GPU/TPU благодаря полной параллелизации

Влияние на NLP

BERT (2018)

Bidirectional Encoder Representations from Transformers

GPT series (2018-2020)

Generative Pre-trained Transformer (GPT-1, GPT-2, GPT-3)

T5 (2019)

Text-to-Text Transfer Transformer

ChatGPT (2022)

Основан на архитектуре Transformer

За пределами NLP

Transformers успешно применяются в компьютерном зрении (ViT), обработке звука, биоинформатике и других областях

Выводы

Новая парадигма

Transformer представил полностью attention-based архитектуру, отказавшись от рекуррентных и сверточных слоёв

Вычислительная эффективность

Полностью параллелизуемая архитектура, быстрее обучение, лучшее качество на длинных последовательностях

Гибкость

Архитектура легко адаптируется для различных задач (перевод, классификация, генерация)

Будущее

Transformer стал основой для большинства современных моделей NLP и находит применение в других областях

Made with DeepSite LogoDeepSite - 🧬 Remix