В общем, ответов много: в разных реализациях он разный. Исходная реализация из статьи - https://github.com/lisa-groundhog/GroundHog/tree/master/experiments/nmt. Для более поздних реализаций, которые достигли лучшего качества перевода, вы можете проверить:
Теперь к вашему баллов:
В исходной статье это был нулевой вектор. Более поздние реализации используют проекцию либо конечного состояния кодировщика, либо среднего состояния кодировщика. Аргументом в пользу использования среднего является то, что оно более непосредственно передает градиенты в состояния кодировщика. Однако это решение, похоже, не сильно влияет на качество перевода.
Слой Maxout - это вариант нелинейного слоя. Это как бы два слоя ReLU в одном: вы делаете две независимые линейные проекции и берете максимум из них. Вы можете с радостью заменить Maxout на ReLU (современные реализации так и делают), но вы все равно должны использовать dropout.
Я не знаю ни одного значимого варианта использования в MT, когда я бы установил процент отсева по-разному. Обратите внимание, однако, что модели seq2seq используются во многих диких сценариях ios, когда это может иметь смысл.
Большинство реализаций действительно используют смещение при вычислении энергии внимания. Если вы используете два линейных слоя, смещение будет разделено на две переменные. Смещения обычно инициализируются нулем, поэтому они получают одинаковые градиенты и одинаковые обновления. Однако вы всегда можете отключить смещение в линейном слое.
Да, если вы хотите инициализировать s 0 с состояниями декодера. В механизме внимания об этом заботится матрица U .