Позволяет модели напрямую обращаться к любой части входной последовательности, независимо от расстояния, с постоянным количеством операций.
Прямые связи между всеми элементами последовательности, независимо от расстояния
Несколько механизмов внимания, работающих параллельно для изучения разных типов зависимостей
Информация о порядке элементов добавляется через специальные 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 и находит применение в других областях