Глава 9. Глубокое обучение для последовательностей и текста
345
conv2d и maxPooling2d, рекуррентности нет, выходная информация не передается
в них обратно, поэтому они получили название слоев
прямого распространения
(feedforward layers).
Благодаря этим уникальным особенностям simpleRNN разрушает симметрию
между входными элементами и чувствителен к упорядоченности входных элемен
тов. Если переупорядочить элементы последовательных входных данных, выходные
данные также изменятся. Это отличает simpleRNN от плотного слоя.
В блоке Б на рис. 9.2 приведено более абстрактное представление simpleRNN. Его
называют
свернутой
(rolled) диаграммой RNN, в отличие от развернутой (unrolled)
диаграммы в блоке A, поскольку все временные шаги в ней свернуты в один цикл.
Свернутая диаграмма соответствует циклу
for
в языках программирования, с по
мощью которого simpleRNN и прочие типы RNN реализуются внутри TensorFlow.js.
Но вместо того, чтобы демонстрировать сам код, давайте взглянем на приведенный
в листинге 9.1 намного более краткий псевдокод simpleRNN — реализацию архи
тектуры simpleRNN, приведенной на рис. 9.2. Он позволит вам сосредоточиться на
самой сути работы слоя RNN.
Листинг 9.1.
Псевдокод внутренних вычислений simpleRNN
Из листинга 9.1 видно, как выходной сигнал для временно
'
го шага
i
становится со
стоянием для следующего временно
'
го шага (следующей итерации цикла).
Состояние
(state) — важное понятие для RNN, с его помощью она запоминает, что произошло
на уже виденных ею временн
ы
х шагах входной последовательности. В цикле
for
это
состояние памяти объединяется с последующими временн
ы
ми шагами и становится
новым состоянием памяти. Благодаря этому simpleRNN может поразному реаги
ровать на один и тот же входной элемент в зависимости от предыдущих элементов
последовательности. Подобная чувствительность на основе памяти — краеугольный
камень последовательной обработки. Простой пример: при декодировании кода Мор
зе, состоящего из точек и тире, значение тире зависит от последовательности точек
и тире перед ним (и после него). Еще один пример: в английском языке слово
last
может означать совершенно разные вещи в зависимости от предшествующих слов.
Название simpleRNN очень удачно, поскольку его выходной сигнал и состояние
совпадают. Позднее мы обсудим более сложные и перспективные архитектуры
RNN. В некоторых из них выходной сигнал и состояние — две отдельные сущности,
а в прочих бывает даже несколько состояний.
Еще стоит отметить, что благодаря циклу
for
RNN могут обрабатывать входные
последовательности из произвольного числа шагов. Подобное нельзя осуществить
346
Do'stlaringiz bilan baham: |