Компьютер считает приближённо. Понимание точности float, устойчивости и обусловленности спасает от NaN и «необъяснимых» расхождений.
Ключевые тезисы
- Логарифмические трюки (log-sum-exp) предотвращают переполнение при работе с вероятностями.
- Плохо обусловленные матрицы делают решение системы неустойчивым к шуму данных.
- Смешанная точность (fp16/bf16) ускоряет обучение, но требует масштабирования градиентов.
Подробный разбор
2 подтем — раскройте любую, чтобы увидеть объяснение, формулы, примеры и интерактивные графики.
1Числа с плавающей точкой и потеря точности
Откуда берутся NaN и почему `0.1 + 0.2 != 0.3`.
Компьютер хранит вещественные числа приближённо: float32 даёт около 7 значащих цифр, float16 — около 3. При вычитании близких чисел значащие цифры взаимно уничтожаются, и результат оказывается почти шумом.
# Наивный подсчёт дисперсии теряет точность
var = mean(x**2) - mean(x)**2 # катастрофическая потеря значимости
# Численно устойчивый вариант
var = mean((x - mean(x))**2)Обучение в смешанной точности (fp16/bf16) требует loss scaling: градиенты умножают на большой множитель, чтобы они не превратились в нули при округлении, а перед шагом оптимизатора делят обратно.
2Трюк log-sum-exp и стабильный softmax
Как считать вероятности, не получая inf и nan.
Прямое вычисление при даёт переполнение. Спасает наблюдение: вычитание константы из всех логитов не меняет softmax.
- суммирование по всем перечисленным элементам
- экспонента
По той же причине библиотеки предлагают функции вида log_softmax и BCEWithLogitsLoss: они принимают логиты, а не вероятности, и внутри делают устойчивое вычисление. Ручная связка sigmoid + log — типичный источник NaN в обучении.
Связанные темы
Стабильность обучения нейросетей · Градиенты и производные
Backpropagation97%
Обратное распространение ошибки · Глубокое обучениеЭффективное вычисление градиентов по всем параметрам сети за один обратный проход с помощью правила цепочки.
Normalization Layers85%
Слои нормализации · Глубокое обучениеBatchNorm, LayerNorm, RMSNorm: стабилизация распределения активаций, без которой глубокие сети почти не обучаются.
Gradient Clipping85%
Обрезка градиента · Оптимизация обученияОграничение нормы градиента перед шагом оптимизатора — простейшая защита от расходимости обучения.
Mixed Precision85%
Смешанная точность · Оптимизация обученияОбучение в fp16 или bf16 при накоплении в fp32: двукратная экономия памяти и заметное ускорение.
Learning Rate Scheduling85%
Расписание скорости обучения · Оптимизация обученияИзменение шага по ходу обучения: большой в начале для исследования, малый в конце для точной настройки.
Calculus80%
Математический анализ · ОсновыПроизводные показывают, как изменится ошибка при малом изменении параметра. Именно это делает возможным градиентное обучение.
Gradient80%
Градиент · Математический справочникВектор частных производных, указывающий направление наибыстрейшего роста функции.
Hessian80%
Гессиан · Математический справочникМатрица вторых производных, описывающая локальную кривизну функции.
Gradient Descent80%
Градиентный спуск · Оптимизация обученияИтеративный шаг против градиента функции потерь — базовый алгоритм обучения.