Я сам нашел ответ.
Я думаю, что другие ответы неверны, потому что они основаны на опыте работы с более простыми моделями / архитектурами. Основным моментом, который меня беспокоил, был тот факт, что шум в потерях обычно более симметричен (вы можете построить среднее значение, а шум будет случайным образом выше и ниже среднего). Здесь мы больше видим путь с низкой тенденцией и внезапные пики.
Как я уже писал, архитектура, которую я использую, - это кодер-декодер с вниманием. Несложно сделать вывод, что входы и выходы могут иметь разную длину. Потери суммируются по всем временным шагам, и НЕ нужно делить их на количество временных шагов.
https://www.tensorflow.org/tutorials/seq2seq
Важное примечание: стоит отметить, что мы делим потери на batch_size, поэтому наши гиперпараметры «инвариантны» по отношению к batch_size. Некоторые люди делят потери на (batch_size * num_time_steps), что преуменьшает количество ошибок, сделанных в коротких предложениях. Более тонко, наши гиперпараметры (примененные к первому способу) не могут использоваться вторым способом. Например, если оба подхода используют SGD с обучением 1.0, последний подход эффективно использует гораздо меньшую скорость обучения 1 / num_time_steps.
Я не усреднял потери, поэтому шум заметен.
P.S. Точно так же размер пакета, например, 8, может иметь несколько сотен входов и целей, поэтому на самом деле вы не можете сказать, что он маленький или большой, не зная средней длины примера.
person
DavidS1992
schedule
07.03.2018