Энтузиаст воспроизвёл «численные баги» softmax и cross-entropy в NumPy
Разработчик проверил на NumPy 1.26.4 заявление о двух численных ошибках в стандартных реализациях softmax и cross-entropy. В fp32 потеря и целевой градиент обнуляются при отрыве логитов около 16, а при дистилляции ошибка градиента упирается в пол ~4,6e−08.
- Обнуление в fp32 наступает при отрыве логитов 15,8–16,7 в зависимости от дерева суммирования
- При m=15 стандартная потеря даёт 2,38e−07 вместо 3,06e−07 — ошибка 22%
- В дистилляции стандартный градиент ошибается на 100% в компоненте, исправленный — на уровне 9,2e−16
- Исправление через expm1/log1p совпадает с эталоном fp64 до восьми порядков точнее
Читать дальше
Безопасность