Забабахал архитектуру.
Обучаю трансформер.
Чет лосс почти не падает.
Кручу-верчу лернинг рейт, один хрен.
Смотрю на выход (с zero инициализацией на последнем слое), и он еле-еле колеблется в районе 0.
Чешу репу, смотрю код, и опа!
В трансформерном блоке было нечто такое (для краткости опущены нормализации и RoPE):
x = x + self_attn(x)
x = cross_attn(x)
x = x + feedforward(x)Добавил потерянный skip и все заработало 🚀.
Мораль сей басни такова - не теряйте skip connections!