Я запутался между тем, как правильно использовать dropout с RNN в кератах, особенно с устройствами GRU.Документация keras относится к этому документу (https://arxiv.org/abs/1512.05287), и я понимаю, что одну и ту же маску выпадения следует использовать для всех временных шагов. Это достигается с помощью аргумента отсева при указании самого слоя GRU. Что я не понимаю, так это:
Почему в Интернете есть несколько примеров, включая собственный пример keras (https://github.com/keras-team/keras/blob/master/examples/imdb_bidirectional_lstm.py) и назначение «Обнаружение триггерного слова» в курсе «Модели секвенций» Эндрю Нг, где ониявно добавьте выпадающий слой "model.add (Dropout (0.5))", который, в моем понимании, будет добавлять разные маски к каждому временному шагу.
В упомянутой выше статье предлагаетсячто делать это неуместно, и мы можем потерять сигнал, а также долговременную память из-за накопления этого шума пропадания во всех временных шагах. Но тогда, как работают эти модели (использующие разные маски выпадения на каждом временном шаге) в состоянии учиться и хорошо выполнять.
Я сам обучил модель, которая использует различные dropou• маскируется на каждом шаге по времени, и хотя я не получил результатов, как хотел, модель может превосходить тренировочные данные.Это, в моем понимании, делает недействительными «накопление шума» и «потеря сигнала» на всех временных шагах (у меня есть 1000 временных рядов, которые вводятся в слои GRU).
Любые идеи,объяснения или опыт с ситуацией будут полезны.Спасибо.
ОБНОВЛЕНИЕ:
Чтобы прояснить ситуацию, я упомяну выдержку из документации keras о Dropout Layer ("noise_shape: 1D целочисленный тензор, представляющий форму двоичной маски выпадения, которая будетумножить на вход. Например, если ваши входы имеют форму (batch_size, временные шаги, функции) и вы хотите, чтобы маска выпадения была одинаковой для всех временных шагов, вы можете использовать noise_shape = (batch_size, 1, features ").Полагаю, можно видеть, что при явном использовании слоя Dropout и необходимости одинаковой маски на каждом временном шаге (как упомянуто в статье) нам необходимо отредактировать этот аргумент noise_shape, чего не было в примерах, которые я связывал ранее.