Буду ли я переоснащать свой LSTM, если я обучу его с помощью метода скользящих окон? Почему люди не используют его для LSTM?
Для упрощенного примера предположим, что мы должны предсказать последовательность символов:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Это плохо (или лучше?), Если я продолжаю тренировать свой LSTM со следующими мини-пакетами:
A B C D E F G H I J K L M N, backprop, erase the cell
B C D E F G H I J K L M N O, backprop, erase the cell
.... and so on, shifting by 1 every time?
Раньше я всегда тренировал это как:
A B C D E F G H I J K L M N, backprop, erase the cell
O P Q R S T U V W X Y Z, backprop, erase the cell
Вместо того, чтобы сдвигаться на единицу, было бы лучше сдвинуть окно на 2 записи вместо этого и т.д.? Что бы это значило (с точки зрения точности / переоснащения)?
Кроме того, если бы я использовал подход с «скользящим окном» в сети прямой связи, это привело бы к переоснащению? Я бы предположил, да, потому что сеть подвергается одним и тем же областям информации в течение очень долгого времени. Например, он подвергается воздействию в E F G H I J K
течение длительного времени.
Редактировать:
Пожалуйста, помните, что состояние ячейки стирается между тренировочными партиями, поэтому в это время у LSTM будет "удар в голову". Невозможно вспомнить, что было до OPQRSTUVWXYZ. Это означает, что LSTM не может узнать, что «О» следует за «М».
Итак, я подумал (таким образом, весь мой вопрос), почему бы не дать ему промежуточную (перекрывающуюся) партию между ... и в таком случае, почему бы не использовать несколько перекрывающихся мини-пакетов - для меня это обеспечило бы более плавное обучение? В конечном итоге это будет означать скользящее окно для LSTM.
Некоторая полезная информация, которую я нашел после того, как ответ был принят:
Первое слово английского перевода, вероятно, тесно связано с первым словом исходного предложения. Но это означает, что декодер должен рассматривать информацию из 50 шагов назад, и эта информация должна быть каким-то образом закодирована в векторе. Известно, что у рекуррентных нейронных сетей есть проблемы, связанные с такими дальними зависимостями. Теоретически, такие архитектуры, как LSTM, должны быть в состоянии справиться с этим, но на практике долгосрочные зависимости все еще проблематичны.
Например, исследователи обнаружили, что обращение исходной последовательности (подача ее назад в кодер) дает значительно лучшие результаты, поскольку сокращает путь от декодера до соответствующих частей кодера. Точно так же, подача входной последовательности дважды также помогает сети лучше запоминать вещи. Например, если одним из примеров обучения является «Джон ушел домой», вы должны указать «Джон ушел домой, Джон ушел домой» в сеть как один вход.
Редактировать после принятия ответа:
Спустя несколько месяцев я более склонен использовать метод скользящих окон, поскольку он лучше использует данные. Но в этом случае вы, вероятно, не хотите тренировать BCDEFGHIJKLMNO сразу после ABCDEFGHIJKLMNO. Вместо этого перетасуйте свои примеры, чтобы постепенно и равномерно «зачистить» всю информацию в вашем LSTM. Дайте ему HIJKLMNOPQRSTU после ABCDEFGHIJKLMNO и т. Д. Это напрямую связано с катастрофическим забвением. Как всегда, внимательно следите за набором Валидация и Тестирование и остановитесь, как только вы увидите, что их ошибки неуклонно возрастают
Кроме того, проблема «молот к голове» может быть улучшена с помощью синтетических градиентов. Смотрите его преимущества здесь: (связанный ответ обсуждает преимущества длинных последовательностей) /datascience//a/32425/43077
LSTM не требуют скользящего окна ввода. Они могут помнить то, что видели в прошлом, и если вы будете подавать обучающие примеры по одному, они сами выберут окно нужного размера для запоминания.
LSTM уже склонны к переоснащению, и если вы добавляете много избыточных данных с помощью скользящего окна, то да, они, вероятно, переизберутся.
С другой стороны, скользящее окно необходимо для прогнозирования временных рядов с нейронными сетями с прямой связью, поскольку для сетей FNN требуется фиксированный размер ввода и нет памяти, поэтому это наиболее естественный способ передачи им данных временных рядов.
Будет или нет FNN соответствовать, зависит от его архитектуры и ваших данных, но все стандартные методы регуляризации будут применяться, если это так. Например, вы можете попробовать выбрать меньшую сеть, регуляризацию L2, Dropout и т. Д.
источник