Некоторое время назад я повесил статью с кратким обзором техник векторизации, и мне показалось логичным продолжить эту тему попыткой разобраться с тем, в какую сторону NLP шагнула дальше — выбор пал на механизм attention. Мы с Дарьей, моей коллегой по переводу, перевели и переработали видеоролик "Attention is all you need explained" в статью, которую и представляем вашему вниманию. Заранее прошу прощения за светофор в картинках: по-другому черный фон из скриншотов убрать не получалось :).

Введение

В 2017 году, в статье Attention is all you need, исследователи из Google представили архитектуру Transformer. Новизна Transformer заключалась в использовании self-attention (досл. с англ. — самовнимание, внутреннее внимание) — механизма, благодаря которому модель может сосредоточиться не на всех сразу, а на наиболее важных элементах входной последовательности.

Рассмотрим этот механизм и модель подробнее.

1. Зачем нужен attention

1.1. Про рекуррентные нейронные сети (RNNs)

До появления Transformer задачи NLP стандартно обрабатывались через рекуррентные нейронные сети (RNN) — они умеют сохранять внутреннее состояние, то есть помнить и учитывать результаты, полученные из предыдущей входной последовательности.

У RNN есть пара недостатков:

  1. в них сложно параллелить задачи;

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

1.2. Transformers. Механизм 'Self-attention'

Transformer устраняет эти недостатки, используя вместо рекуррентности механизм self-attention. Self-attention определяет веса важности элементов входной последовательности и не требует сохранять состояния, что решает обе упомянутые выше проблемы RNN.

1.3. Лингвистические сложности

Рассмотрим два предложения. Они похожи по смыслу и отличаются лишь одним словом. В первом предложении she принадлежит Alice, во втором — Barbara.

В первом предложении есть younger, поэтому attention относит she к Alice.

Во втором предложении есть older, поэтому attention относит she к Barbara.

Переключение attention обусловлено тем, что more experienced связано с even though.

Рассмотрим другие два предложения с очень похожими формулировками, но с разными смыслами. Сосредоточимся на слове it.

В первом предложении it связано со swap, во втором — с AI. Людям это интуитивно понятно.

Эффективная языковая модель тоже должна понимать эти нюансы — семантику слов, их порядок в предложении. Модель должна уметь сосредотачиваться на конкретных членах предложения и выявлять взаимосвязанные слова, причем все эти процессы должны быть реализованы исключительно через числовые представления и трансформации.

1.4. Машины понимают только числа

ИИ понимает и хорошо умеет работать только со скалярами, векторами, матрицами и тензорами (даже если тензоры большие и многомерные).

2. Суть идеи attention

2.1. Проектирование attention

Проблема решилась созданием трех матриц. Они работают с эмбеддингами слов, где представлена семантика каждого слова. Семантическое представление в свою очередь было вычислено по частотности и встречаемости этого слова вместе с другими.

В эмбеддинге также содержится позиционная информация, которая вычисляется через синусоиды и косинусоиды.

Три упомянутые выше матрицы — это:

  • Qquery/запрос;

  • Kkey/ключ;

  • Vvalue/значение.

Как и с семантикой в эмбеддингах, веса в этих матрицах рассчитываются при обучении. Отметим, что во время обучения в сеть типа GPT-3 или ChatGPT передаются огромные объемы текста. В частности, ChatGPT сообщает, что сеть обучалась на более чем триллионе обучающих примеров общим объемом в 45 терабайт. Поверим ей на слово :)

2.2. Обратное распространение ошибки

GPT-3 использует алгоритм обратного распространения ошибки (backpropagation). Этот алгоритм обновляет внутренние веса нейронных сетей с целью минимизации функции потерь (loss function).

2.2.1. Как он работает?

а. Сеть делает предположение по пакету входной последовательности.

б. Вычисляется размер потерь между ожидаемым и полученным выводом.

г. Рассчитываются градиенты потерь по правилу дифференцирования сложных функций (chain rule).

д. Для снижения ошибок веса обновляются против градиента потерь.

е. Этот процесс останавливается при достижении критерия сходимости (convergence), когда размер потерь не превышает заданное пороговое значение, или когда число итераций достигает предельного значения.

Обратное распространение ошибки помогает Transformer итеративно изменять свои веса, постепенно повышая точность и снижая потери в предсказаниях.

2.3. Матрицы Query, Key и Value

Веса матриц Query, Key и Value рассчитываются во время обучения сети. Матрицы работают с позиционными представлениями внутри эмбеддингов слов из входной последовательности.

  • Матрица [Q]uery — слово, для которого рассчитывается значение attention.

  • Матрица [K]ey — слово, которое оценивается через attention. Собственные значения и собственные векторы (eigenvalues и eigenvectors) в этих двух матрицах обычно схожи, и через их произведение рассчитывается оценка attention. Высокая оценка означает, что слова сильно взаимосвязаны, а низкая — что слабо взаимосвязаны.

  • Матрица [V]alue затем смотрит, насколько оценка attention для каждой пары слов соотносится с векторной оценкой правильного слова, предъявляемого сети во время обучения.

2.4. Аналогия

Модель Transformer предсказывает следующее слово в последовательности, которой может быть перевод с одного языка на другой, краткое изложение длинного текста или создание текста статьи по ее заголовку.

Цель — сгенерировать наилучшее возможное слово или серию слов в выходной последовательности, для чего и используют attention.

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

Матрица Q подобна списку вопросов, которые вы держите в уме, чтобы раскрыть дело — она помогает программе «понять» текст.

Матрица K похожа на набор имеющихся улик. Для раскрытия дела вам нужно просмотреть их все, но в итоге вы сосредотачиваетесь только на наиболее релевантных уликах — соответственно и оценка attention рассчитывается через произведение матриц Q и K.

Матрица V обозначает релевантность рассматриваемой улики для дела. Дело в том, что, например, согласно оценке attention некие два слова могут быть сильно взаимосвязаны, но в то же время этими словами могут быть местоимение и существительное — и это нам никак не поможет предсказать следующее слово в последовательности.

Сценарий

Query

Key

Value

Детектив

Список вопросов для раскрытия дела

Выявление наиболее релевантных для дела улик

Определение релевантности рассматриваемых улик для раскрытия дела

Transformer

Выбор между резюмированием, переводом и созданием текста для предсказания следующего слова

Выбор слов, взаимосвязанных с представленным словом

Релевантность полученной пары слов к верному предсказанию

Поиск в библиотеке

Список вопросов по теме исследования

Библиотечный каталог

Релевантность книг из каталога для области исследования

2.5. Формула Query, Key и Value

На схеме ниже матрицы Q и K умножаются друг на друга, масштабируются, проходят через маскирование (декодер), результаты нормализуются (softmax) и умножаются на матрицу V.

Математически это можно записать в виде следующей формулы:

а. Умножить матрицу Q на транспонированную матрицу K. Результат — немасштабированная оценка attention.

б. Отмасштабировать оценку attention, разделив её на квадратный корень из размерности матрицы K. Размерностью может быть любое число; стандартно это — 64, значит делим на 8).

в. Затем отмасштабировать через softmax, чтобы все пересчитанные веса в сумме давали единицу.

г. Умножить эти отмасштабированные и нормализованные оценки attention на матрицу V.

Заключение

В заключение, модели Transformer, такие как ChatGPT и GPT-3, используются для таких задач по обработке языка, как перевод с одного языка на другой, перевод на язык программирования, краткое изложение текста, создание статьи по заголовку. Во всех случаях необходимо предсказывать следующее слово в последовательности.

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

Attention использует три матрицы, которые задействуют алгоритм обратного распространения ошибки. Благодаря attention вместе с векторным представлением семантики и позиций слова Transformer умеет справляться с переводом, смысловой компрессией или созданием контента.

Комментарии (8)


  1. Kreastr
    20.12.2023 03:26

    Ожидал увидеть в статье описание того как получают Q, K и V ( кроме общих слов про бэкпроп, который есть в любом методе обучения) и архитектуре, и почему такой метод расчета оказался так важен для производительности системы в сравнении с другими архитектурами.


    1. bartov-e Автор
      20.12.2023 03:26

      Спасибо, покопаюсь в этом направлении, мне туда тоже интересно идти. Для меня пока и эта инфа была новой, поэтому решил поделиться, вдруг кому-то еще такие объяснения как-то помогут разобраться.


  1. Tihron
    20.12.2023 03:26

    Таких статей много.Но ни одна не рассказывает об получении Q, K и V. Эта статья не уникальна, не оригинальна, просто повторение ранее выложенной в Сеть информации


    1. bartov-e Автор
      20.12.2023 03:26

      Спасибо за критику, учту. Однако оговорюсь, что я именно поэтому метки и поставил: уровень - "легкий", тип публикации - "Туториал". Туториалов лучше иметь побольше разных, никогда не знаешь, кому какое объяснение лучше зайдет. Мне лично зашло это.

      Про то, как вычислять Q, K и V - мне тоже интересно, буду копать в этом направлении, если найду что-то интересное, закину.


      1. Aykeye
        20.12.2023 03:26

        Из туториалов мне больше всего нравится Illustrated Transformer.
        https://jalammar.github.io/illustrated-transformer/
        Она очень подробно объясняет саму суть, и математика там по шагам расписана с числами и иллюстрациями, показывающие размерность данных.


        1. bartov-e Автор
          20.12.2023 03:26

          Спасибо. Положил в бэклог. Если кто-то из практикантов-переводчиков заинтересуется, сделаем перевод - вывесим здесь.
          Практикантов мне присылают регулярно, так что очень даже может получиться (правда, переводчики математику не жалуют :))).


  1. DandyDan
    20.12.2023 03:26

    Советую посмотреть код nanoGPT — он реально миниатюрный, и из него в целом можно понять, откуда берутся матрицы.

    Так же советую серию видео From Zero to Hero от того же автора.


    1. bartov-e Автор
      20.12.2023 03:26

      Спасибо, гляну.