Рекуррентная сеть
Обработка последовательностей
Входные данные часто представляются в виде последовательности , например:
-
динамика цен на акции,
-
динамика действий посетителя веб-сайта,
-
изменение погоды,
-
текст как последовательность слов,
-
речь как последовательность звуков,
-
видео как последовательность кадров.
Далее для определённости будем рассматривать текст как последовательность слов, подаваемых на вход нейросети в виде эмбеддингов, хотя те же рассуждения применимы и для обработки последовательностей других типов.
Независимая обработка
Мы могли бы обрабатывать каждый элемент последовательности независимо, используя многослойный персептрон :
Но такой подход не учитывает зависимости выхода от других элементов последовательности. Например, будущие действия посетителя веб-сайта зависят от его старых действий, динамика будущих цен зависит от их исторических изменений, новые слова текста зависят от старых и т.д.
Проиллюстрируем это примером. Пусть решается задача разметки частей речи для текста (part-of-speech tagging, POS), в которой каждому слову нужно автоматически сопоставить часть речи. Пусть мы обрабатываем фразу "I like to watch movies":
При независимой обработке слов модель будет часто ошибаться, поскольку не учитывает контекст соседних слов, влияющих на роль каждого слова в предложении.
-
[watch] может быть как глаголом, так и существительным, например, во фразе "this is a very expensive watch".
-
[like] также может выступать как существительное, например, во фразе "he gave this post a like".
Если бы модель учитывала предыдущие слова (перед [like] стоит [I], перед [watch] стоит [to]), подобной неоднозначности для неё бы не возникало.
Использование свёрток
Мы могли бы применить операцию свёртки, чтобы учесть левый контекст:
Но тогда был бы учтён контекст, состоящий лишь из одного левого соседа. Часто важен более длинный контекст, например для разрешения неоднозначности слова [watch] во фразе "I like to walk and watch movies".
Для учёта контекста из соседей можно было бы применить свёртку с более широким ядром или раз применить свёртку с двумерным ядром. Ранее мы уже рассматривали эту идею в свёрточных сетях для обработки последовательностей. Недостатком архитектуры является то, что использование свёрток приводит к обработке, учитывающей лишь ограниченный контекст.