Как работает GPT: метафорическое объяснение ключа, значения, запроса во внимании с использованием рассказа о зелье

Основой ChatGPT является модель GPT, созданная с использованием архитектуры Transformer. Основой Трансформера является механизм Внимания. Для многих самое сложное для понимания понятие «Внимание» — это ключ, значение и запрос. В этом посте я буду использовать аналогию с зельем, чтобы усвоить эти понятия. Даже если вы уже понимаете математику трансформатора механически, я надеюсь, что к концу этого поста вы сможете развить более интуитивное понимание внутренней работы GPT от начала до конца.

Это объяснение не требует математической подготовки. Для технически подкованных я добавлю больше технических пояснений в […]. Вы также можете безопасно пропускать примечания в [квадратных скобках] и боковые примечания в блоках цитат, подобных этому. На протяжении всего своего письма я придумывал удобочитаемую интерпретацию промежуточных состояний модели трансформатора, чтобы помочь объяснению, но GPT не думает точно так же.

[Когда я говорю о «внимании», я имею в виду исключительно «само-внимание», поскольку именно оно стоит за GPT. Но та же самая аналогия объясняет и общее понятие «внимание».]

Настройка

GPT может извергать абзацы связного контента, потому что он превосходно справляется с одной задачей: «Дано текст, какое слово будет следующим?» Давайте разыграем GPT по ролям: "Сара неподвижно лежит на кровати, чувствуя себя ____". Вы можете заполнить пробел?

Одним из разумных ответов среди многих является усталость. В оставшейся части поста я расскажу, как GPT приходит к этому ответу. (Ради забавы я поместил эту подсказку в ChatGPT, и она написала из нее короткую историю.)

Аналогия: (Ключ, Значение, Запрос) или (Метка, Зелье, Рецепт)

Вы отправляете приведенное выше приглашение в GPT. В GPT каждое слово снабжено тремя вещами: Key, Value, Query, значения которых изучаются при поглощении всего интернета текстов во время обучения модели GPT. Именно взаимодействие между этими тремя компонентами позволяет GPT понимать слово в контексте текста. Так что же они делают на самом деле?

Давайте проведем аналогию с алхимией. Для каждого слова у нас есть:

  • Зелье (также известное как «значение»): зелье содержит подробную информацию о слове. Для наглядности представьте, что состав слова «лежит» содержит такую ​​информацию, как «устал; нечестность; может иметь положительный оттенок, если это ложь во спасение; …”. Слово «ложь» может иметь несколько значений, например «солгать» (связано с нечестностью) или «ложиться» (связано с усталостью). Вы можете сказать истинный смысл только в контексте текста. Прямо сейчас зелье содержит информацию для обоих значений, потому что оно не имеет текстового контекста.
  • Рецепт алхимика (также известный как «запрос»): алхимик данного слова, например. «лежит», перебирает все близлежащие слова. Он находит несколько слов, относящихся к его собственному слову «ложь», и ему поручают наполнить пустую фляжку микстурой из этих слов. У алхимика есть рецепт, в котором перечислены конкретные критерии, определяющие, на какие зелья он должен обратить внимание.
  • Тег (также известный как «ключ»): каждое зелье (значение) имеет тег (ключ). Если тег (ключ) хорошо совпадает с рецептом (запросом) алхимика, алхимик обратит внимание на это зелье.

Внимание: Миксология Зелья Алхимика

На первом этапе (внимание) алхимики всех слов отправляются на свои собственные квесты, чтобы наполнить свои фляги зельями из соответствующих слов.

Возьмем, к примеру, алхимик слова «ложь». Он знает по предыдущему опыту — предварительно обученному всему интернету текстов — что слова, которые помогают интерпретировать «ложь» в предложении, обычно имеют форму: «некоторые плоские поверхности, слова, относящиеся к нечестности, слова, относящиеся к отдыху». Он записывает эти критерии в свой рецепт (запрос) и ищет теги (ключ) на зельях других слов. Если тег очень похож на критерии, он нальет много того зелья в свою фляжку; если тег не похож, он нальет мало или совсем не нальет этого зелья.

Итак, он находит тег для "кровати", который говорит "плоский предмет мебели". Это похоже на «несколько плоских поверхностей» в его рецепте! Он наливает зелье для «кровати» в свою фляжку. Зелье (значение) для "кровать" содержит такую ​​информацию, как "усталый, отдохнувший, сонный, больной".

Алхимик по слову «ложь» продолжает поиск. Он находит тег для слова «неподвижный», который говорит «связанный с отдыхом» (среди других коннотаций слова «неподвижный»). Это связано с его критерием "спокойный", поэтому он вливает часть зелья из "неподвижный", который содержит такую ​​информацию, как "спокойный, тихий, неподвижный". .

Он просматривает теги «на», «Сара», «то», «чувство» и не находит их релевантными. Поэтому он не наливает ни одно из их зелий в свою фляжку.

Помните, ему тоже нужно проверить свое зелье. Тег его собственного зелья «лежит» говорит «глагол, связанный с отдыхом», что соответствует его рецепту. Поэтому он также наливает в колбу немного своего зелья, которое содержит такую ​​информацию, как «устал; нечестный; может иметь положительный оттенок, если это ложь во спасение; …”.

К концу его квеста по проверке слов в тексте его фляжка полна.

В отличие от оригинального зелья для «лжи», это смешанное зелье теперь учитывает контекст этого конкретного предложения. А именно, в нем много элементов «усталый, измученный» и лишь щепотка «нечестный».

В этом квесте алхимик знает, что нужно обращать внимание на правильные слова, и комбинирует значение этих релевантных слов.Это метафорический шаг для «внимания». Мы только что объяснили наиболее важное уравнение для Transformer, лежащей в основе архитектуры GPT:

Расширенные примечания:

1. Каждый алхимик смотрит на каждую бутылку, включая свою [Q·K.transpose()].

2. Алхимик может быстро сопоставить свой рецепт (запрос) с тегом (ключом) и быстро принять решение. [Сходство между запросом и ключом определяется скалярным произведением, что является быстрой операцией.] Кроме того, все алхимики выполняют свои квесты параллельно, что также помогает ускорить процесс. [Q·K.transpose() — умножение матриц, которое можно распараллелить. Скорость — это выигрышная особенность Transformer по сравнению с его предшественником Recurrent Neural Network, который выполняет последовательные вычисления.]

3. Алхимик разборчив. Он выбирает только несколько лучших зелий, вместо того, чтобы смешивать все понемногу. [Мы используем softmax, чтобы свернуть Q·K.transpose(). Softmax подтянет входные данные к более экстремальным значениям и сведет многие входные данные почти к нулю.]

4. На этом этапе алхимик не учитывает порядок слов. Будь то «Сара все еще лежит на кровати, чувствуя себя» или «Сара все еще лежит в постели, чувствуя ложь», наполненная фляга (выход внимания) будет одинаковой. [В отсутствие «позиционного кодирования» Attention(Q, K, V) не зависит от позиций слов.]

5. Фляга всегда возвращается заполненной на 100%, ни больше, ни меньше. [Softmax нормализуется до 1.]

6. Рецепт алхимика и теги зелий должны говорить на одном языке. [Запрос и ключ должны иметь одинаковую размерность, чтобы можно было использовать точечный продукт для связи. Ценность может принять другое измерение, если вы хотите.]

7. Технически подкованные читатели могут заметить, что мы не использовали маскирование. Я не хочу загромождать аналогию слишком большим количеством деталей, но я объясню ее здесь. При само-внимании каждое слово может видеть только предыдущие слова. Таким образом, в предложении "Сара неподвижно лежит на кровати, чувствуя", "лежит" видит только "Сара"; «по-прежнему» видит только «Сара», «лежит». Алхимик «неподвижного» не может добраться до зелий «на», «на», «кровати» и "чувство".

Feed Forward: химия смешанных зелий

До этого момента алхимик просто наливает зелье из других бутылей. Другими словами, он наливает зелье «лжи» — «устал; нечестный;…» —однородной смесью в колбу; он пока не может выделить часть «усталость» и отбросить часть «нечестность». [Внимание: просто суммируйте разные V вместе, взвешенные по softmax.]

Теперь начинается настоящая химия (прямая связь). Алхимик смешивает все вместе и производит какой-то синтез. Он замечает взаимосвязь между такими словами, как «сонный» и«отдых» и т. д. Он также замечает, что "нечестность" упоминается только в одном зелье. . Из прошлого опыта он знает, как заставить некоторые ингредиенты взаимодействовать друг с другом и как отказаться от одноразовых. [Уровень прямой связи представляет собой линейное (а затем нелинейное) преобразование значения. Слой прямой связи является строительным блоком нейронных сетей. Вы можете думать об этом как об «обдумывании» шага в Transformer, в то время как более ранний шаг миксологии — это просто «собирание».]

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

Последний линейный слой и слой Softmax: собрание алхимиков

Как нам перейти отсюда к конечному результату, который должен предсказать, что следующее слово после «Сара все еще лежит на кровати, чувствуя себя ___» «усталость»?

До сих пор каждый алхимик работал самостоятельно, следуя только своему слову. Теперь все алхимики разных слов собирают и складывают свои фляги в исходном порядке слов и представляют их на финальный линейный и softmax слой Трансформера. Что я имею в виду? Здесь мы должны отойти от метафоры.

Этот последний линейный слой синтезирует информацию по разным словам. Основываясь на предварительно обученных данных, можно сделать вывод, что предыдущее слово важно для предсказания следующего слова. Например, линейный слой может сильно сосредоточиться на последней колбе («колба чувства»).

Затем, в сочетании со слоем softmax, этот шаг назначает каждому слову в нашем словаре вероятность того, насколько вероятно, что это следующее слово после «Сара лежит на кровати, чувствуя…». Например, неанглийские слова получат вероятность, близкую к 0. Такие слова, как «усталый», «сонный», «исчерпанный», получат высокую вероятность. Затем мы выбираем лучшего победителя в качестве окончательного ответа.

Резюме

Теперь вы создали минималистичный GPT!

Подводя итог, для каждого слова на этапе внимания вы определяете, на какие слова (включая себя) каждое слово должно обращать внимание, основываясь на том, насколько хорошо запрос (рецепт) этого слова соответствует ключу (тегу) другого слова. Вы смешиваете значения этих слов (зелья) пропорционально тому вниманию, которое слово уделяет им. Вы обрабатываете эту смесь, чтобы «думать» (упреждать). Как только каждое слово обработано, вы комбинируете смеси из всех других слов, чтобы больше «думать» (линейный слой) и сделать окончательный прогноз того, каким должно быть следующее слово.

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

Это хорошая остановка.

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

Многоголовое внимание: множество наборов алхимиков

Пока у каждого слова есть только один рецепт алхимика, одна метка и одно зелье. [Для каждого слова, каждого запроса, значения, ключа — это отдельный вектор, а не матрица.] Но мы можем получить лучшие результаты, если снабдим каждое слово несколькими наборами рецептов, тегов, зелий. Для справки GPT использует 12 наборов (также называемых 12 головками внимания) на слово. Может быть, для каждого слова алхимик из первого набора специализируется на анализе настроений, алхимик из второго набора специализируется на разрешении ссылок (к чему относится это) и т. д.

Дополнительное примечание: группа алхимиков настроений изучала только зелья настроений; они не будут знать, как обращаться с зельями из других наборов, и никогда не прикоснутся к ним. [V, K, Q из одной и той же головы внимания тренируются совместно. V, K, Q от разных головок внимания не взаимодействуют на шаге многоголового внимания.]

12 алхимиков каждого слова вместе представляют свои специализированные наполненные фляги [объединяют результаты разных головок внимания]. Как группа, они проводят гигантскую химическую реакцию, используя все эти колбы, и представляют одно получившееся зелье [упреждающая связь, также известная как линейный слой].

Дополнительное примечание: как и раньше, в блоке декодера колбы разных слов не смешиваются друг с другом. [Шаг прямой связи зависит от позиции, то есть он применяется к каждому слову независимо.]

Эта метафора объясняет следующее уравнение и диаграмму из оригинальной статьи.

Складывание блоков: И… Повторяю!

Для лучших результатов мы повторяем блок декодера N раз. Для эталона GPT повторяется 12 раз. Интуитивно вы хотите чередовать акт сбора зелий из других релевантных слов (внимание) и самостоятельного синтеза этих зелий, чтобы извлечь из этого смысл (прямая связь): собирайте, синтезируйте; собирать, синтезировать…

Теперь вы можете знать алхимию... Я имею в виду... GPT!