Содержание статьи
Азбука ИИ: «Рекуррентные нейросети»
Пример кода
Для примера давайте рассмотрим последовательность Apple is red. Вы хотите, чтобы RNN предсказывала слово red при получении входной последовательности Apple is. Когда скрытый слой обрабатывает слово Apple, он сохраняет его копию в своей памяти. Затем, увидев слово is, модель извлекает слово Apple из памяти и понимает контекст всей последовательности: Apple is. Это позволяет ей с высокой точностью прогнозировать слово red. Благодаря этому RNN полезны для распознавания речи, машинного перевода и других задач языкового моделирования.
Нейронные сети с прямой связью, как и RNN, представляют собой искусственные нейронные сети, через которые передается информация. Нейронная сеть с прямой связью может выполнять простые задачи классификации, регрессии или распознавания, но не умеет запоминать обработанные ранее входные данные. Например, она забывает Apple к тому времени, когда ее нейроны доходят до обработки слова is. RNN преодолевает это ограничение памяти, помещая скрытое состояние памяти в специальный нейрон.
Сверточные нейронные сети – это искусственные нейронные сети, предназначенные для обработки данных временных рядов. Вы можете использовать сверточные нейронные сети для извлечения пространственной информации из видео и изображений, пропуская их через ряд сверточных и объединяющих слоев в нейронной сети. RNN предназначены для обнаружения долгосрочных зависимостей в последовательных данных
Трансформеры не используют скрытые сведения о состоянии для фиксации взаимозависимостей в последовательностях данных. Вместо этого они параллельно обрабатывают последовательности данных по схеме слежения за собой. Это позволяет трансформерам быстрее и точнее обучаться на более длинных последовательностях и лучше их обрабатывать, чем обычные рекуррентные нейронные сети. Благодаря механизму слежения за собой трансформеры преодолевают ограничения по памяти и взаимозависимостям в последовательности, которые характерны для рекуррентных нейронных сетей. Трансформеры могут обрабатывать последовательности данных параллельно и применяют позиционное кодирование, чтобы отслеживать взаимозависимости входных данных.
Нейронная сеть Элмана состоит из трёх слоев: [math]x[/math] , [math]y[/math] , [math]z[/math] . Дополнительно к сети добавлен набор «контекстных блоков»: [math]u[/math] (рис. 5). Средний (скрытый) слой соединён с контекстными блоками с фиксированным весом, равным единице. С каждым шагом времени на вход поступает информация, которая проходит прямой ход к выходному слою в соответствии с правилами обучения. Фиксированные обратные связи сохраняют предыдущие значения скрытого слоя в контекстных блоках (до того как скрытый слой поменяет значение в процессе обучения). Таким способом сеть сохраняет своё состояние, что может использоваться в предсказании последовательностей, выходя за пределы мощности многослойного перцептрона.
Рекурсивные нейронные сети (англ. Recurrent neural networks) представляют собой более общий случай рекуррентных сетей, когда сигнал в сети проходит через структуру в виде дерева (обычно бинарные деревья). Те же самые матрицы весов используются рекурсивно по всему графу в соответствии с его топологией.
Действительно, задача переноса стиля с одного изображения на другой решается при помощи нейросетей и операции свертки, которая разбивает изображение на несколько масштабов и позволяет нейросетям анализировать их независимо друг от друга, а впоследствии и перемешивать между собой. Аналогичные операции
Инженеры машинного обучения обучают глубокие нейронные сети разных типов, в том числе RNN, передавая в модель обучающие данные и корректируя ее производительность. В машинном обучении каждый нейрон имеет вес, который определяет важность информации, полученной им во время обучения, для прогнозирования результатов. Каждый слой в RNN имеет определенный вес.
Многие ко многим
В процессе работы RNN передают входные последовательности данных на скрытые слои. Также они имеют самозацикленный или повторяющийся рабочий процесс: скрытый слой может запоминать предыдущие входные данные в компоненте краткосрочной памяти и использовать их для будущих прогнозов. Модель использует текущее входное значение и сохраненное в памяти значение для прогнозирования следующей последовательности.
Одна из главных областей применения РНС на сегодняшний день — работа с языковыми моделями, в частности — анализ контекста и общей связи слов в тексте. Для РНС структура языка — это долгосрочная информация, которую надо запомнить. К ней относятся грамматика, а также стилистические особенности того корпуса текстов, на которых производится обучение. Фактически РНС запоминает, в каком порядке обычно следуют слова, и может дописать предложение, получив некоторую затравку. Если эта затравка случайная, может получиться совершенно бессмысленный текст, стилистически напоминающий шаблон, на котором училась РНС. Если же исходный текст был осмысленным, РНС поможет его стилизовать, однако в последнем случае одной РНС будет мало, так как результат должен представлять собой «смесь» случайного, но стилизованного текста от РНС и осмысленной, но «неокрашенной» исходной части. Эта задача уже настолько напоминает популярные ныне
Двунаправленная рекуррентная нейронная сеть (BRNN) обрабатывает последовательности данных, используя прямые и обратные слои скрытых узлов. Прямой слой работает аналогично обычной RNN, то есть сохраняет предыдущее входное значение в скрытом состоянии и использует его для прогнозирования следующего выходного значения. Обратный слой, в свою очередь, действует в противоположном направлении, то есть использует и текущее входное значение, и будущее скрытое состояние для обновления текущего скрытого состояния. Объединение этих уровней позволяет BRNN повысить точность прогнозирования с учетом контекстов прошлого и будущего значений. Например, вы можете с помощью BRNN успешно предсказать слово trees в предложении Apple trees are tall.
Проблема исчезающего градиента – это состояние, в котором градиент обучения модели приближается к нулю. Исчезновение градиента означает, что RNN потеряла возможность эффективно обучаться по предложенным данным, что приводит к недообучению. Недообученная модель не может хорошо работать в реальных условиях, потому что ее веса настроены неверно. Для RNN характерен высокий риск исчезающего или взрывного градиента при обработке длинных последовательностей данных.
» («долгосрочная краткосрочная память», также существует множество других вариаций перевода), заложившую основу для большинства современных РНС. В своей работе авторы описывали модификацию, решавшую проблему долгосрочной памяти простых РНС: их нейроны хорошо «помнят» недавно полученную информацию, но не имеют возможности надолго сохранить в памяти что-то, что обработали много циклов назад, какой бы важной та информация ни была. В LSTM-сетях внутренние нейроны «оборудованы» сложной системой так называемых ворот (gates), а также концепцией клеточного состояния (cell state), которая и представляет собой некий вид долгосрочной памяти. Ворота же определяют, какая информация попадет в клеточное состояние, какая сотрется из него, и какая повлияет на результат, который выдаст РНС на данном шаге. Подробно разбирать LSTM мы не будем, однако отметим, что именно эти вариации РНС широко используется сейчас, например, для машинного перевода Google.
Рекуррентная нейронная сеть (RNN) – это модель глубокого обучения, которая обучена обрабатывать и преобразовывать последовательный набор входных данных в последовательный набор выходных данных. Последовательным набором данных называют такие данные, в которых компоненты имеют строгую упорядоченность и взаимосвязи на основе сложной семантики и синтаксических правил (например, слова, предложения или данные временных рядов). RNN – это программная система из множества взаимосвязанных компонентов, которая квазичеловеческим способом выполняет преобразование последовательных наборов данных, например перевод текста с одного языка на другой. RNN сейчас в значительной степени вытесняются искусственным интеллектом на основе трансформеров и большими языковыми моделями (LLM), которые намного эффективнее выполняю обработку последовательных наборов данных.
RNN обрабатывает данные последовательно, что ограничивает ее возможность эффективно обрабатывать большое количество текстов. Например, типичная модель RNN может успешно анализировать мнение покупателя по нескольким предложениям. Но для создания резюме по целой странице текста ей потребуются огромные вычислительные мощности, большой объем памяти и много времени.
RNN часто имеют архитектуру «один к одному», где одна входная последовательность строго сопоставляется с одним выходом. Но вы можете гибко настраивать их в разных конфигурациях с учетом конкретных целей. Ниже приведены несколько распространенных типов RNN.
Рекурсивная сеть
в том же значении, в каком он есть в большинстве текстов. То есть музыка может нравиться или не нравиться, но если в ней нет слов — она не несет информационной нагрузки (конечно, если это не секретный код). Именно с приданием своим произведениям смысла и наблюдаются проблемы у РНС: они могут превосходно выучить грамматику языка и запомнить, как должен
Трансформеры – это специальные модели глубокого обучения, действующие по схеме слежения за собой в нейронной сети из двух компонентов с прямой связью (кодировщик – декодировщик). Они могут обрабатывать последовательные данные так же, как рекуррентная нейронная сеть.
RNN состоят из нейронов, то есть узлов обработки данных, которые в ходе совместной работы выполняют сложные задачи. Нейроны распределяются по входному, выходному и нескольким скрытым слоям. Входной слой получает информацию для обработки, а выходной слой возвращает результат. Обработка, анализ и прогнозирование данных происходят в скрытых слоях.
Взрывной градиент означает ситуацию, в которой градиент экспоненциально растет вплоть до полной потери стабильности RNN. Когда градиент становится бесконечно большим, RNN теряет предсказуемость и проявляет проблемы с производительностью, например переобучение. Переобучением называется ситуация, в которой модель достаточно точно прогнозирует результат на основе обучающих данных, но не справляется с реальными данными.
Концепция внимания (attention) — это способ «подсказать» сети, на что следует потратить больше внимания при обработке данных. Другими словами, внимание в рекуррентной нейронной сети — это способ увеличить важность одних данных по сравнению с другими. Поскольку человек не может выдавать подсказки каждый раз (это нивелировало бы всю пользу от РНС), сеть должна научиться подсказывать себе сама. Вообще, концепция внимания является очень сильным инструментом в работе с РНС, так как позволяет быстрее и качественнее подсказать сети, на какие данные стоит обращать внимание, а на какие — нет. Также этот подход может в перспективе решить проблему быстродействия в системах с большим объемом памяти. Чтобы лучше понять, как это работает, надо рассмотреть две модели внимания: «мягкую» (soft) и «жесткую» (hard). В первом случае сеть все равно обратится ко всем данным, к которым имеет доступ, но значимость (то есть вес) этих данных будет разной. Это делает РНС более точной, но не более быстрой. Во втором случае из всех существующих данных сеть обратится лишь к некоторым (у остальных будут нулевые веса), что решает сразу две проблемы. Минусом «жесткой» концепции внимания является тот факт, что эта модель перестает быть непрерывной, а значит — дифференцируемой, что резко усложняет задачу ее обучения. Тем не менее, существуют решения, позволяющие исправить этот недостаток. Поскольку концепция внимания активно развивается в последние пару лет, нам остается ждать в ближайшее время новостей с этого поля.
Под конец можно привести пример системы, использующей концепцию внимания: это Dynamic Memory Networks — разновидность, предложенная исследовательским подразделением Facebook. В ней разработчики описывают «модуль эпизодической памяти» (episodic memory module), который на основании памяти о событиях, заданных в виде входных данных, а также вопроса об этих событиях, создает «эпизоды», которые в итоге помогают сети найти правильный ответ на вопрос. Такая архитектура была опробована на bAbI, крупной базе сгенерированных заданий на простой логический вывод (например, дается цепочка из трех фактов, нужно выдать правильный ответ: «Мэри дома. Она вышла во двор. Где Мэри? Во дворе».), и показала результаты, превосходящие классические архитектуры вроде LSTM.
Что еще происходит в мире рекуррентных нейросетей прямо сейчас?
По словам Андрея Карпатого (Andrej Karpathy) — специалиста по нейросетям и автора превосходного блога, «концепция внимания — это самое интересное из недавних архитектурных решений в мире нейросетей». Однако не только на внимании акцентируются исследования в области РНС. Если постараться кратко сформулировать основной тренд, то им сейчас стало сочетание различных архитектур и применение наработок из других областей для улучшения РНС. Из примеров можно назвать уже упомянутые нейросети от Google, в которых используют методы, взятые из работ по обучению с подкреплением, нейронные машины Тьюринга, алгоритмы оптимизации вроде Batch Normalization и многое другое, — все это вместе заслуживает отдельной статьи. В целом отметим, что хотя РНС не привлекли столь же широкого внимания, как любимцы публики — сверточные нейросети, это объясняется лишь тем, что объекты и задачи, с которыми работают РНС, не так бросаются в глаза, как DeepDream или Prisma. Это как в социальных сетях — если пост публикуют без картинки, ажиотажа вокруг него будет меньше.
Поэтому всегда публикуйтесь с картинкой.
Seq-2-seq (Sequence to sequence, Seq2seq) сеть является базовой архитектурой many-to-many RNN и используется для трансляции одной последовательности в другую (рис. 8). Она состоит из двух рекуррентных сетей: кодировщика и декодировщика. Кодировщик вычисляет вектор, кодирующий входную последовательность. Далее данный вектор передается декодировщику, который в свою очередь по полученному скрытому представлению восстанавливает целевую последовательность. При этом каждый посчитанный выход используется для обновления скрытого представления.