Как работают двунаправленные RNN с отслеживанием состояния в Keras

В Keras оболочка Bidirectional для RNN также поддерживает stateful=true. Я не совсем понимаю, как это должно работать:

В однонаправленной модели с отслеживанием состояния состояние пакета передается следующему пакету. Я предполагаю, что это работает так же для прямого уровня в двунаправленной модели.

Но откуда отсталый слой получает свои состояния? Если я все правильно понимаю, технически он должен получить свое состояние из "следующей" партии. Но очевидно, что «следующая» партия еще не вычислена, так как же это работает?


person birnbaum    schedule 15.02.2017    source источник


Ответы (1)


О слое Bidirectional можно думать следующим образом:

forward = Recurrent(..)(input)
backward = Recurrent(..., reverse_input=True)(input)
output = merge([forward, backward], ...)

Итак, как видите, вы теряете временную ориентацию. Вы анализируете ввод как с начала, так и с конца. В данном случае - установка stateful=True просто берет свое начальное состояние из предыдущей выборки в соответствии с направлением двунаправленной ветви (forward берет из forward, backward берет из backward).

Это приводит к тому, что ваша модель теряет интерпретацию — выборки из параллельных партий могут быть интерпретированы как компактная последовательность, разделенная на партии.

person Marcin Możejko    schedule 03.03.2017