ВниманиеQKV от Trax

Уровень AttentionQKV, реализованный Trax, выглядит следующим образом: AttentionQKV

def AttentionQKV(d_feature, n_heads=1, dropout=0.0, mode='train'):
  """Returns a layer that maps (q, k, v, mask) to (activations, mask).
  See `Attention` above for further context/details.
  Args:
    d_feature: Depth/dimensionality of feature embedding.
    n_heads: Number of attention heads.
    dropout: Probababilistic rate for internal dropout applied to attention
        activations (based on query-key pairs) before dotting them with values.
    mode: One of `'train'`, `'eval'`, or `'predict'`.
  """
  return cb.Serial(
      cb.Parallel(
          core.Dense(d_feature),
          core.Dense(d_feature),
          core.Dense(d_feature),
      ),
      PureAttention(  # pylint: disable=no-value-for-parameter
          n_heads=n_heads, dropout=dropout, mode=mode),
      core.Dense(d_feature),
  )

В частности, какова цель трех параллельных плотных слоев? Вход в этот слой - q, k, v, маска. Почему q, k, v проходят через плотный слой?

1 ответ

Решение

Этот фрагмент кода является реализацией уравнения в верхней части страницы 5 документа " Внимание" - это все, что вам нужно в статье, в которой представлены модели Transformer в 2017 году. Вычисления показаны на рисунке 2 документа:

Скрытые состояния проецируются в h головы внимания, которые параллельно делают масштабируемое скалярное произведение. Проекцию можно интерпретировать как извлечение информации, актуальной для головы. Затем каждая головка выполняет вероятностный поиск на основе различных (изученных) критериев.

Другие вопросы по тегам