Автор: Стефан Гаус, научный сотрудник команды Google Brain, аспирант Мостафы Дехгани, Амстердамский университет, стажер-исследователь Google
Источник | Публичный аккаунт разработчика Google
В прошлом году мы выпустили Transformer, новую модель машинного обучения, которая превосходит существующие алгоритмы машинного перевода и другие задачи понимания языка. До Transformer большинство методов машинного перевода на основе нейронных сетей полагались на рекуррентные нейронные сети (RNN), работающие в циклах, которые используют циклы (т. е. результат каждого шага переходит к следующему шагу) для выполнения в рекурсивном порядке (например, перевод предложений). дословные слова в). Хотя RNN очень эффективны при моделировании последовательностей, их последовательный характер означает, что они очень медленно обучаются, поскольку длинные предложения требуют большего количества шагов обработки, а их рекурсивная структура затрудняет обучение.
В отличие от методов на основе RNN, Transformer не требует циклов, а обрабатывает все слова или символы в последовательности параллельно, используя механизм пробуждения для объединения контекста с удаленными словами. Обрабатывая все слова параллельно и заставляя каждое слово обрабатывать другие слова в предложении в несколько этапов обработки, Transformer может обучаться намного быстрее, чем репликация моделей. Стоит отметить, что при этом результаты его трансляции намного лучше, чем у RNN. Однако на небольших, более структурированных задачах понимания языка или простых алгоритмических задачах, таких как копирование строк (например, преобразование ввода «abc» в «abcabc»), Transformer работает плохо. Напротив, модели, которые хорошо работают в этом отношении, такие как нейронные графические процессоры и нейронные машины Тьюринга, не справляются с крупномасштабными задачами понимания языка, такими как перевод.
В Universal Transformer мы используем новый и эффективный подход с параллельным циклом во времени, чтобы расширить стандартный Transformer до вычислительно универсальной (Turing-complete) модели, которая дает более надежные результаты в более широком диапазоне задач. Мы строим модель на параллельной структуре Transformer, чтобы поддерживать ее высокую скорость обучения. Но мы заменяем фиксированное наложение различных функций преобразования в Transformer несколькими применениями функции преобразования в одном параллельном во времени цикле (т. е. одна и та же изученная функция преобразования применяется ко всем символам параллельно на нескольких этапах обработки, где каждый шаг вывод подается на следующий шаг). Дело в том, что RNN обрабатывает последовательность символ за символом (слева направо), в то время как Универсальный Преобразователь обрабатывает все символы одновременно (как Преобразователь), а затем использует механизм пробуждения для уточнения интерпретации каждого символа параллельно для переменное число случаев. Этот механизм параллельного во времени цикла работает быстрее, чем последовательный цикл, используемый в RNN, а также делает универсальный преобразователь более мощным, чем стандартный преобразователь с прямой связью.
Модель универсального преобразователя объединяет информацию из разных позиций с помощью механизма самопробуждения, применяя функцию преобразования цикла для многократного уточнения ряда векторных представлений (показанных как h1–hm) для каждой позиции последовательности в параллелизованном виде. Стрелки указывают зависимости между операциямиНа каждом этапе используется механизм самопробуждения для передачи информации от каждого символа (например, слова в предложении) другим символам, как и в оригинальном Трансформере. Однако теперь количество таких трансформаций (т.е. количество шагов цикла) можно задавать заранее вручную (как какое-то фиксированное число или длину ввода) или динамически через сам универсальный преобразователь. Для достижения последнего мы добавляем механизм адаптивных вычислений в каждом месте, который может назначать больше шагов обработки для более неоднозначных символов или символов, требующих дополнительных вычислений.
Давайте воспользуемся интуитивным примером того, как это работает, например: «Я прибыл на берег после того, как переплыл реку». В этом случае для определения точного значения слова «берег» требуется больше контекстуальной информации, чем однозначные «я меня» или «река, река». Когда мы используем стандартный Transformer для кодирования этого предложения, нам нужно безоговорочно применять одинаковый объем вычислений к каждому слову. Однако адаптивный механизм универсального преобразователя позволяет модели тратить больше вычислений только на более неоднозначные слова, например, используя больше шагов для включения дополнительной контекстной информации, необходимой для устранения неоднозначности слова «банк», в то время как более явные слова требуют меньше шагов.
Поначалу наличие универсального преобразователя, который многократно применяет к своим входным данным только одну изученную функцию, кажется ограничивающим, особенно по сравнению со стандартным преобразователем, который обучается применять фиксированную последовательность различных функций. Однако изучение того, как многократно применять одну и ту же функцию, означает, что количество применений (шагов обработки) теперь является переменным, что является важным отличием. Таким образом, в дополнение к тому, что универсальный преобразователь позволяет выполнять больше вычислений для более неоднозначных символов, он также позволяет модели корректировать количество применений функций (большее количество шагов для более длинных последовательностей) на основе общего размера входных данных или на основе Дополнительные функции, изученные во время обучения, чтобы динамически решать, как часто применять функцию к любой заданной части ввода. Это делает Universal Transformer более мощным в теоретическом смысле, поскольку он может эффективно обучаться применению различных преобразований к разным частям ввода. Это то, чего не может стандартный Transformer, потому что он состоит из фиксированного стека изученных блоков преобразования, которые применяются только один раз.
Хотя универсальный трансформатор теоретически более мощный, мы также заботимся об экспериментальной производительности. Наши экспериментальные результаты подтверждают, что универсальные трансформеры действительно могут учиться на примерах тому, как копировать и переворачивать строки, а также выполнять сложение целых чисел лучше, чем трансформеры или RNN (хотя и не так хорошо, как нейронные графические процессоры). Кроме того, Universal Transformer значительно лучше обобщает различные сложные задачи понимания языка и достигает современной производительности в задаче логического вывода bAbI и сложной задаче языкового моделирования LAMBADA. Но, пожалуй, самое интересное, что Universal Transformer улучшил качество перевода на 0,9 значения BLEU при обучении таким же образом, как и базовый Transformer с тем же количеством параметров и обучающих данных. Когда Transformer был выпущен в прошлом году, он превзошел предыдущую модель на 2 значения BLEU, а относительное улучшение Universal Transformer составило 50% по сравнению с прошлым годом.
Таким образом, Universal Transformer устраняет разрыв между конкурентоспособными моделями последовательностей реального мира в крупномасштабных задачах понимания языка, таких как машинный перевод, и вычислительными моделями общего назначения, такими как нейронные машины Тьюринга или нейронные графические процессоры, которые могут использовать градиентный спуск для обучения, для выполнения случайных алгоритмические задачи. Мы рады видеть недавние достижения в моделях параллельной последовательности, а также увеличение вычислительной мощности и циклов в глубине обработки, и мы надеемся, что дальнейшие усовершенствования базового универсального преобразователя, представленного здесь, помогут нам создать более мощный, функция алгоритма, которая может использовать данные более эффективно, а производительность обобщения превосходит текущий оптимальный алгоритм.
Если вы хотите испытать это на себе, вы можете найти код для обучения и оценки Universal Transformers в репозитории Tensor2Tensor с открытым исходным кодом. Примечание: ссылка на кодGitHub.com/tensorflow/…
Благодарность Мостафа Дехгани, Стефан Гаус, Ориол Виньялс, Якоб Ушкорайт и Лукаш Кайзер, проводившие исследование. Также спасибо Ashish Vaswani, Douglas Eck и David Dohan за их плодотворные комментарии и вдохновение.