Вход декодера в Seq2Seq - Анализ временных рядов - PullRequest
0 голосов
/ 20 апреля 2020

Я работаю с M xNet и выясняю модель Seq2Seq. Предположим, что каждый пакет будет обрабатывать 32 последовательности, и каждая последовательность будет иметь длину 20 (временные шаги). Чтобы создать архитектуру для работы с моделями seq2seq, мы собираемся разбить каждую последовательность на две части. Методы расщепления очень произвольны, но давайте предположим, что мы делим пополам последовательность. Первая часть будет называться «вход энкодера» и, действительно, будет входом для энкодера, который будет состоять из последовательности 10 (временных шагов), очевидно, этот вход состоит из N чисел переменной длины 10. Следовательно, мы будет иметь x1,…, x10 для каждой входной последовательности кодирования, умноженной на количество признаков, которые приведут к вектору признаков входов кодирования Xt. Теперь, поскольку выход декодера будет второй половиной последовательности, что должно быть входом декодера? Я устанавливаю вход декодера как вход энкодера, и модель работает довольно хорошо. Это прямая функция:

def forward(self, encoder_input, *args):

    state= self.encoder.begin_state(batch_size=encoder_input.shape[0], ctx=mx.cpu())
    encoder_output, encoder_state= self.encoder(encoder_input, state)
    decoder_output, decoder_state= self.decoder(encoder_input, encoder_state)
    output= self.dense(decoder_output)

    return output

Есть ли ошибка при использовании входа кодера в качестве входа декодера? Я видел несколько примеров в Keras, где они инициализируют вход декодера как np.array с формой вывода декодера. Я пытался установить вход декодера как массив нулей, но результаты (с точки зрения точности) очень сильно затухают.

1 Ответ

0 голосов
/ 20 апреля 2020

Я нашел в «Hands on Machine Learning»:

Другими словами, декодер задается как входное слово, которое должно быть выведено на предыдущем шаге (независимо от того, что это на самом деле вывод). Для самого первого слова ему дан токен начала последовательности (SOS). Ожидается, что декодер завершит предложение токеном конца последовательности (EOS).

Поэтому я предполагаю, что если вход кодера будет составлен из первой последовательности из n наблюдений для z, независимо от того, что является выходным сигналом кодера, мы должны передать декодеру состояния кодера и вход декодера, который является ожидаемым выходным сигналом кодировщика, или, другими словами, последовательность первых n наблюдений метки. Несмотря на все, в моем анализе с python нет никаких доказательств лучших результатов. Возможно, подача декодера только с меткой кодировщика лучше, когда мы получили много функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...