Опечатка, из которой выросла теория хаоса
1961 год, Массачусетский технологический институт. Метеоролог Эдвард Лоренц гоняет на ламповой машине упрощённую модель атмосферы и решает ещё раз взглянуть на середину расчёта. Он вводит те же самые, как ему кажется, числа, запускает заново и получает совершенно другую погоду.
Причина оказалась бытовой. В первом прогоне машина держала шесть знаков после запятой, а во втором Лоренц перепечатал значения с распечатки, где их округлили до трёх. Расхождение в тысячные доли за несколько модельных суток превратилось в совсем другой прогноз.
Лоренц не стал списывать всё на глюк железа. Он показал, что в нелинейных динамических системах отклонение нарастает экспоненциально, вместо того чтобы гаснуть: две траектории, вышедшие почти из одной точки, расходятся всё быстрее, пока не станут полностью независимыми. Так появился эффект бабочки, а сам Лоренц постепенно перешёл из метеорологии в математику.
Дальше начинается инженерная часть, которая касается любого, кто считает числа в продакшене. Округление до трёх знаков живёт в каждом проекте в разных видах: float32 вместо float64, накопленная ошибка в длинном цикле, порядок суммирования. Сложение с плавающей точкой не ассоциативно, поэтому сумма миллиона значений зависит от того, в каком порядке её собирали, а на GPU порядок определяется тем, как работа легла на блоки. Меняется размер батча, версия библиотеки или флаг оптимизации, и меняются младшие разряды результата.
В устойчивой системе такой шум так и останется шумом в последних битах. В чувствительной он вылезает наверх: физические движки, где объекты начинают проваливаться сквозь пол, симуляции, расходящиеся после смены компилятора, два прогона обучения с одним seed и разными метриками, тесты, которые падают только на CI.
Отсюда набор скучных, но рабочих привычек. Числа с плавающей точкой сравнивают с допуском, без проверки на строгое равенство. Фиксируют не только seed, но и версии библиотек с драйверами. Логируют окружение вместе с результатом. Считают деньги в целых копейках и центах. И отдельно проверяют, насколько результат чувствителен к малым возмущениям входа, потому что модель, которая ломается от изменения в шестом знаке, сломается и на реальных данных.
Ещё Лоренц дал трезвую оценку пределов прогноза. Горизонт предсказуемости у хаотической системы конечен и не растягивается количеством вычислений. Погоду в деталях не посчитать дальше примерно двух недель, сколько бы петафлопсов ни стояло в машинном зале. Улучшать можно точность измерений и статистику ансамблевых расчётов, однако саму природу расхождения траекторий отменить нечем.
История 1961 года хороша тем, что целая область науки выросла из бытовой невнимательности при вводе данных. Стоит вспомнить её, когда в следующий раз числа не сойдутся на третьем знаке и захочется закрыть тикет словами про погрешность округления.
Источник: https://x.com/Math_files/status/2087609802637840804




