.. _chap_modern_rnn: Современные рекуррентные нейронные сети ======================================= В предыдущей главе были рассмотрены ключевые идеи, лежащие в основе рекуррентных нейронных сетей (RNN). Однако, как и в случае со свёрточными нейронными сетями, в архитектурах RNN было предложено огромное количество инноваций, которые привели к созданию нескольких сложных конструкций, успешно зарекомендовавших себя на практике. В частности, наиболее популярные из них содержат механизмы для смягчения известной численной нестабильности, с которой сталкиваются RNN, проявляющейся в виде затухающих и взрывающихся градиентов. Напомним, что в :numref:`chap_rnn` мы боролись с взрывающимися градиентами, применяя грубый эвристический метод обрезки градиента. Несмотря на эффективность этого приёма, проблема затухающих градиентов остается нерешенной. В этой главе мы вводим ключевые идеи, лежащие в основе наиболее успешных архитектур RNN для последовательностей, которые происходят из двух работ. Первая, *Long Short-Term Memory* :cite:`Hochreiter.Schmidhuber.1997`, вводит *ячейку долгой краткосрочной памяти* — вычислительный элемент, заменяющий традиционные узлы в скрытом слое сети. Благодаря этим ячейкам долгой краткосрочной памяти сети способны преодолевать трудности с обучением, с которыми сталкивались более ранние рекуррентные сети. Интуитивно ячейка долгой краткосрочной памяти решает проблему затухания градиента, сохраняя значения во внутреннем состоянии каждой ячейки и передавая их по рекуррентному ребру с весом 1 через множество последовательных временных шагов. Набор мультипликативных вентилей помогает сети определять не только входные данные, которые следует допускать в состояние памяти, но и то, когда содержимое состояния памяти должно влиять на выход модели. Вторая статья, *Bidirectional Recurrent Neural Networks* :cite:`Schuster.Paliwal.1997`, описывает архитектуру, в которой для определения выхода в любой точке последовательности используется информация как из будущего (следующие временные шаги), так и из прошлого (предыдущие временные шаги). Это контрастирует с предыдущими сетями, в которых на выход влияли только прошлые входные данные. Двунаправленные рекуррентные нейронные сети стали основным инструментом для задач маркировки последовательностей в обработке естественного языка, а также во множестве других задач. К счастью, эти два нововведения не являются взаимоисключающими, и их успешно объединяли для классификации фонем :cite:`Graves.Schmidhuber.2005` и распознавания рукописного текста :cite:`graves2008novel`. В первых разделах этой главы будут рассмотрены архитектура LSTM, её облегченная версия — управляемый рекуррентный блок (GRU), ключевые идеи, лежащие в основе двунаправленных RNN, а также краткое объяснение того, как слои RNN объединяются для формирования глубоких RNN. Далее мы исследуем применение RNN в задачах преобразования последовательностей в последовательности, рассмотрев машинный перевод и такие ключевые концепции, как архитектуры *кодировщик–декодировщик* и *лучевой поиск*. .. toctree:: :maxdepth: 2 lstm gru deep-rnn bi-rnn machine-translation-and-dataset encoder-decoder seq2seq beam-search