Этот вопрос связан с новой статьей: Большая Птица: Трансформеры для более длинных последовательностей . В основном, о реализации Разреженного Внимания (что указано в Дополнительных материалах, часть D). В настоящее время я пытаюсь реализовать его в PyTorch.
Они предлагают новый способ ускорить вычисления, заблокировав исходный запрос и ключевые матрицы (см. ниже)
Когда вы выполняете умножение матриц на шаге (b), вы получаете что-то вроде этого: .
Поэтому мне было интересно: как бы вы перешли от этого представления (изображение выше) к разреженной матрице (используя PyTorch, см. ниже)? В статье просто говорится: «просто измените форму результата», и я не знаю простых способов сделать это (особенно, когда у меня есть несколько блоков в разных положениях (см. шаг (c) на первом изображении).
РАЗРЕШЕНИЕ: У Huggingface есть реализация BigBird в pytorch.
Я в конечном итоге следую рекомендациям в документе. Когда дело доходит до распаковки результата, я использую: torch.sparse_coo_tensor
Обновлено: Разреженные тензоры все еще требуют памяти! более эффективное решение описано здесь
вы можете посмотреть на реализацию DeepSpeed
ОБНОВЛЕНИЕ: у Huggingface есть реализация BigBird в pytorch (вы можете посмотреть их код)
Спасибо, я собираюсь проверить, я также ищу простую технику для самостоятельного обучения, пожалуйста, дайте мне знать, если у вас есть информация об этом
у вас есть реализация механизма разреженного внимания?