Позволяет модели напрямую обращаться к любой части входной последовательности, независимо от расстояния, с постоянным количеством операций.
Прямые связи между всеми элементами последовательности, независимо от расстояния
Несколько механизмов внимания, работающих параллельно для изучения разных типов зависимостей
Информация о порядке элементов добавляется через специальные embeddings
При больших dk скалярное произведение становится очень большим, pushing the softmax into regions with extremely small gradients.
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
Позволяет модели совместно обращать внимание на информацию из разных подпространств представления в разных позициях.
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)
Поскольку Transformer не содержит рекуррентных и сверточных операций, ему необходимо явное представление порядка элементов в последовательности.
Синусоидальные функции разных частот создают уникальные паттерны для каждой позиции
В 3-10 раз быстрее в обучении, чем рекуррентные модели на GPU/TPU благодаря полной параллелизации
Bidirectional Encoder Representations from Transformers
Generative Pre-trained Transformer (GPT-1, GPT-2, GPT-3)
Text-to-Text Transfer Transformer
Основан на архитектуре Transformer
Transformers успешно применяются в компьютерном зрении (ViT), обработке звука, биоинформатике и других областях
Transformer представил полностью attention-based архитектуру, отказавшись от рекуррентных и сверточных слоёв
Полностью параллелизуемая архитектура, быстрее обучение, лучшее качество на длинных последовательностях
Архитектура легко адаптируется для различных задач (перевод, классификация, генерация)
Transformer стал основой для большинства современных моделей NLP и находит применение в других областях