Я пытаюсь реализовать смесь экспертного слоя, аналогичного описанному в: https://arxiv.org/abs/1701.06538
В основном этот слой имеет несколько подслоев F_i (x_i), которые обрабатывают проецируемую версиюввода.Существует также слой стробирования G_i (x_i), который по сути является механизмом внимания для всех подуровней экспертов:
sum (G_i (x_i) * F_i (x_i).
My NaiveПодход заключается в создании списка для подслоев:
sublayer_list = nn.ModuleList () для i в диапазоне (num_of_layer): sublayer_list.append (self.make_layer ())
Тогдапри применении этого я использую другой цикл for
out_list = [] для i, l в перечислении (sublayer_list): out_list.appned (l (input [i])) *
Однако добавлениеэтот уровень Mixture-of-Expert замедляет обучение почти в 7 раз (по сравнению с уровнем, в котором слой MoE заменен на MLP аналогичного размера). Мне интересно, есть ли более эффективные способы реализовать это в pytorch? Большое спасибо!