Трансформатор (модель машинного обучения)

редактировать
Алгоритм машинного обучения, используемый для обработки естественного языка

Преобразователь модель глубокого обучения, представленная в 2017 году, используемая в основном в области обработки естественного языка (НЛП).

Как рекуррентные нейронные сети ( RNN), преобразователи предназначены для обработки последовательных данных, таких как естественный язык, для таких задач, как перевод и обобщение текста. Однако, в отличие от RNN, трансформаторы не требуют, чтобы последовательные данные обрабатывались по порядку. Например, если входные данные представляют собой предложение на естественном языке, преобразователю не нужно обрабатывать его начало до конца. Благодаря этой особенности Transformer обеспечивает гораздо больше распараллеливания, чем RNN, и, следовательно, сокращает время обучения.

С момента своего появления Transformers стали предпочтительной моделью для решения многих проблем в NLP, замена старых рекуррентных моделей нейронных сетей, таких как долгосрочная краткосрочная память (LSTM). Поскольку модель Transformer способствует большему распараллеливанию во время обучения, она дает возможность обучения на более крупных наборах данных, чем это было возможно до ее внедрения. Это привело к разработке предварительно обученных систем, таких как BERT (представления двунаправленного кодера от трансформаторов) и GPT (генеративный предварительно обученный трансформатор), которые были обучены с использованием огромных наборов общих языковых данных и могут быть адаптированы к конкретным языковым задачам.

Содержание
  • 1 Предпосылки
  • 2 Архитектура
    • 2.1 Масштабируемое внимание к скалярному произведению
      • 2.1.1 Мульти-заголовок внимание
    • 2.2 Кодировщик
    • 2.3 Декодер
    • 2.4 Альтернативы
  • 3 Обучение
  • 4 Реализации
  • 5 Приложения
  • 6 Ссылки
Предпосылки

До введения Трансформаторы, большинство современных систем НЛП основывались на стробированных рекуррентных нейронных сетях (RNN), таких как LSTM и стробированные повторяющиеся блоки (GRU), с дополнительными механизмами внимания. Transformer построен на этих технологиях внимания без использования структуры RNN, подчеркивая тот факт, что сами по себе механизмы внимания, без периодической последовательной обработки, достаточно мощны для достижения производительности RNN с вниманием.

Стробированные RNN обрабатывают токены последовательно, поддерживая вектор состояния, который содержит представление данных, видимых после каждого токена. Для обработки токена nth {\ textstyle n ^ {th}}{\ textstyle n ^ {th}} модель объединяет состояние, представляющее предложение, до токена n - 1 {\ textstyle n-1}{\ textstyle n-1} с информацией о новом токене для создания нового состояния, представляющего предложение до токена n {\ textstyle n}{\ textstyle n} . Теоретически информация от одного токена может распространяться сколь угодно далеко вниз по последовательности, если в каждой точке состояние продолжает кодировать информацию о токене. Но на практике этот механизм несовершенен: отчасти из-за проблемы исчезающего градиента состояние модели в конце длинного предложения часто не содержит точной извлекаемой информации о ранних токенах.

Эта проблема была решена путем внедрения механизмов внимания. Механизмы внимания позволяют модели непосредственно смотреть и извлекать из состояния в любой более ранней точке предложения. Уровень внимания может получить доступ ко всем предыдущим состояниям и взвесить их в соответствии с некоторой изученной мерой релевантности для текущего токена, предоставляя более точную информацию о более удаленных релевантных токенах. Наглядный пример полезности внимания - перевод. В системе перевода с английского на французский первое слово французского вывода, скорее всего, сильно зависит от начала английского ввода. Однако в классической модели LSTM кодировщика-декодера для создания первого слова французского вывода модели задается только вектор состояния последнего английского слова. Теоретически этот вектор может кодировать информацию обо всем предложении на английском языке, давая модели все необходимые знания, но на практике эта информация часто плохо сохраняется. Если введен механизм внимания, модель может вместо этого научиться обращать внимание на состояния ранних английских лексем при создании начала французского вывода, давая ей гораздо лучшее представление о том, что она переводит.

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

Архитектура

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

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

Масштабируемое скалярное произведение

Основные строительные блоки Трансформатора - это масштабированные единицы внимания на основе скалярного произведения. Когда предложение передается в модель Transformer, веса внимания рассчитываются между каждым токеном одновременно. Блок внимания производит вложения для каждого токена в контексте, которые содержат информацию не только о самом токене, но также взвешенную комбинацию других соответствующих токенов, взвешенных по весам внимания.

Конкретно, для каждой единицы внимания модель Трансформатора изучает три весовые матрицы; веса запроса WQ {\ displaystyle W_ {Q}}{\ displaystyle W_ {Q}} , веса ключей WK {\ displaystyle W_ {K}}{\ displaystyle W_ {K}} и веса значений WV {\ Displaystyle W_ {V}}{\ displaystyle W_ {V}} . Для каждого токена i {\ displaystyle i}i входное встраивание слова xi {\ displaystyle x_ {i}}x_{i}умножается на каждая из трех весовых матриц для создания вектора запроса qi = xi WQ {\ displaystyle q_ {i} = x_ {i} W_ {Q}}{\ displaystyle q_ {i} = x_ {i} W_ {Q}} , ключевого вектора ki = xi WK {\ displaystyle k_ {i} = x_ {i} W_ {K}}{\ displaystyle k_ {i} = x_ {i} W_ {K}} , и вектор значений vi = xi WV {\ displaystyle v_ {i} = x_ {i} W_ {V}}{\ displaystyle v_ {i} = x_ {i} W_ {V}} . Веса внимания рассчитываются с использованием векторов запроса и ключевых: вес внимания aij {\ displaystyle a_ {ij}}a_ {ij} от токена i {\ displaystyle i}i до токен j {\ displaystyle j}j - это скалярное произведение между qi {\ displaystyle q_ {i}}q_ {i} и kj {\ displaystyle k_ {j }}k_j . Веса внимания делятся на квадратный корень из размерности ключевых векторов, dk {\ displaystyle {\ sqrt {d_ {k}}}}{\ displaystyle {\ sqrt {d_ {k}}} } , который стабилизирует градиенты во время обучения, и прошел через softmax, который нормализует веса для суммирования до 1 {\ displaystyle 1}1 . Тот факт, что WQ {\ displaystyle W_ {Q}}{\ displaystyle W_ {Q}} и WK {\ displaystyle W_ {K}}{\ displaystyle W_ {K}} представляют собой разные матрицы, позволяет вниманию быть несимметричным. : если токен i {\ displaystyle i}i обращается к токену j {\ displaystyle j}j (т.е. qi ⋅ kj {\ displaystyle q_ {i } \ cdot k_ {j}}{\ displaystyle q_ {i} \ cdot k_ {j}} большой), это не обязательно означает, что токен j {\ displaystyle j}j будет соответствовать токену i {\ displaystyle i}i (например, qj ⋅ ki {\ displaystyle q_ {j} \ cdot k_ {i}}{\ displaystyle q_ {j} \ cdot k_ {i}} большой). Результатом единицы внимания для токена i {\ displaystyle i}i является взвешенная сумма векторов значений всех токенов, взвешенная как aij {\ displaystyle a_ {ij}}a_ {ij} , внимание от i {\ displaystyle i}i к каждому токену.

Вычисление внимания для всех токенов может быть выражено как вычисление одной большой матрицы, что полезно для обучения из-за оптимизации вычислительной матричной операции, которая ускоряет вычисление матричных операций. Матрицы Q {\ displaystyle Q}Q , K {\ displaystyle K}K и V {\ displaystyle V}Vопределяются как матрицы, в которых i {\ displaystyle i}i th строки - это векторы qi {\ displaystyle q_ {i}}q_ {i} , ki {\ displaystyle k_ {i}}k_ {i} , и vi {\ displaystyle v_ {i}}v_ {i} соответственно.

Внимание (Q, K, V) = softmax (QKT dk) V {\ displaystyle {\ begin {align} {\ text {Attention}} (Q, K, V) = {\ text {softmax}} \ left ({\ frac {QK ^ {\ mathrm {T}}} {\ sqrt {d_ {k}}}}} \ right) V \ end {align}}}{\ displaystyle {\ begin {align} {\ text {Attention}} (Q, K, V) = {\ text {softmax}} \ left ({\ frac {QK ^ {\ mathrm {T }}} {\ sqrt {d_ {k}}}} \ right) V \ end {align}}}

Многоголовое внимание

Один набор матриц (WQ, WK, WV) {\ displaystyle \ left (W_ {Q}, W_ {K}, W_ {V} \ right)}{ \ displaystyle \ left (W_ {Q}, W_ {K}, W_ {V} \ right)} называется головкой внимания, и каждый слой в модели Transformer имеет несколько головок внимания. В то время как одна глава внимания уделяет внимание токенам, относящимся к каждому токену, с несколькими руководителями внимания модель может научиться делать это для разных определений «релевантности». Исследования показали, что многие главы внимания в Трансформерах кодируют отношения релевантности, которые могут интерпретироваться людьми. Например, есть головы внимания, которые для каждого токена в основном обращаются к следующему слову, или головы внимания, которые в основном обращаются от глаголов к их прямым объектам. Поскольку модели Transformer имеют несколько головок внимания, они могут улавливать множество уровней и типов отношений релевантности, от поверхностного до семантического. Множественные выходы для слоя внимания с несколькими головами объединяются для передачи на уровни нейронной сети с прямой связью.

Кодировщик

Каждый кодировщик состоит из двух основных компонентов: механизма самовнимания и нейронной сети с прямой связью. Механизм самовнимания принимает набор входных кодировок от предыдущего кодировщика и взвешивает их соответствие друг другу для создания набора выходных кодировок. Затем нейронная сеть с прямой связью дополнительно обрабатывает каждое выходное кодирование отдельно. Эти выходные кодировки, наконец, передаются следующему кодировщику в качестве его входных данных, а также декодерам.

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

Декодер

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

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

Альтернативы

Обучение архитектурам на основе трансформатора может быть очень дорого, особенно для длинных предложений. Альтернативные архитектуры включают Reformer, который снижает вычислительную нагрузку с O (L 2) {\ displaystyle O (L ^ {2})}O (L ^ {2}) до O (L ln ⁡ L) { \ displaystyle O (L \ ln L)}{\ displaystyle O (L \ ln L)} , где L {\ displaystyle L}L - длина последовательности. Это выполняется с помощью хеширования с учетом местоположения и обратимых слоев.

Обучение

Трансформаторы обычно проходят полу-контролируемое обучение с участием неконтролируемого предварительная подготовка, за которой следует контролируемая точная настройка. Предварительная подготовка обычно выполняется на гораздо большем наборе данных, чем точная настройка, из-за ограниченной доступности помеченных данных обучения. Задачи для предварительного обучения и тонкой настройки обычно включают:

реализации

Модель Transformer имеет реализована в основных средах глубокого обучения, таких как TensorFlow и PyTorch. Ниже приведен псевдокод для реализации варианта Transformer, известного как "vanilla" transformer:

def vanilla_transformer (enc_inp, dec_inp): "" "Вариант трансформатора, известный как" vanilla "трансформатор." "" X = embedding ( enc_inp) * sqrt (d_m) x = x + pos_encoding (x) x = выпадение (x) для _ in range (n_enc_layers): attn = multi_head_attention (x, x, x, None) attn = dropout (attn) attn = layer_normalization (x + attn) x = point_wise_ff (attn) x = layer_normalization (x + attn) # x в этой точке является выводом кодировщика enc_out = xx = embedding (dec_inp) * sqrt (d_m) x = x + pos_encoding (x) x = dropout (x) mask = causal_mask (x) for _ in range (n_dec_layers): attn1 = multi_head_attention (x, x, x, mask) attn1 = layer_normalization (attn1 + x) attn2 = multi_head_attention (attn1, enc_out, enc_out, None) attn2 = dropout (attn2) attn2 = layer_normalization (attn1 + attn2) x = point_wise_ff (attn2) x = layer_normalization (attn2 + x) return density (x)
Applications

Преобразователь находит mo st из его приложений в области обработки естественного языка (NLP), например, задач машинного перевода и прогнозирования временных рядов. Многие предварительно обученные модели, такие как GPT-3, GPT-2, BERT, XLNet и RoBERTa, демонстрируют способность Трансформаторов выполнять широкий спектр таких задач, связанных с НЛП, и имеют потенциал для поиска реальных задач. мировые приложения. Сюда могут входить:

В 2020 году это было показали, что архитектура трансформатора, а точнее GPT-2, может быть настроена для игры в шахматы.

Ссылки

.

Последняя правка сделана 2021-06-11 09:48:47
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте