Прогулка по истории: от Fortran до современных алгоритмов ML | 16 февраля 2025 года, 21:02

Разбираюсь сегодня с алгоритмами ML и с удивлением узнал, что библиотека numpy до недавних пор зависела от кода на Фортране (BLAS/LAPACK), но сейчас проверил, они перешли на OpenBLAS, где фортрана больше нет, а вот SciPy, это очень популярная библиотека для научных расчетов (используется в Scikit-Learn, который я сейчас изучаю, а также в PyTorch, TensorFlow, Keras, и др.), все еще зависит от кода на Fortran 77. Она использует ARPACK, например:

BLAS и LAPACK, которые все еще входят в OpenBLAS и много куда еще, разработаны в 70-х годах. Например, BLAS используется в Apple Accelerate. Очень много всего не изменялось с 1979 года, потому что там чистая математика, чего ее изменять. LAPACK появился чуть позже, в 1980-х. ARPACK, упомянутый выше, попозже, в 1992. Также питоновские библиотеки активно используют Фурье-анализ, а это библиотека FFTPACK на Fortran 77. MINPACK, для оптимизации параметров в ML, активно используется в SciPy и TensorFlow. Ну из 90-х там уже очень много кода на С перешло в современные фреймворки. Интересно было именно на Фортран посмотреть, который старее лет на 15.

Я пока разбирался, нашел, что есть алгоритм Simulated Annealing, который полезен в задачах, где градиентные методы плохо работают из-за множества локальных минимумов.

Представьте, что вам нужно найти самый большой гриб в лесу. В этом лесу на каждом шагу растут грибы разного размера, и вы можете двигаться в любом направлении, сравнивая их. Но как выбрать стратегию, чтобы не застрять на просто «большом» грибе, если где-то дальше растет еще больше?

Если вы сразу остановитесь на первом большом грибе, то можете упустить настоящий гигант. Но если будете бесконечно ходить по лесу, сравнивая каждый гриб, то так никогда и не закончите поиск. Simulated Annealing помогает найти баланс: сначала вы исследуете лес свободно, пробуя разные направления, даже если встречаете грибы поменьше. Со временем ваши шаги становятся осторожнее, и вы все реже соглашаетесь на худший вариант. В конце концов, это приводит вас к самому большому грибу в лесу.

Так вот, этот алгоритм, оказывается, 1953 года, и он почти без изменений используется в SciPy, ну и в целом в машинном обучении, статистике, распознавании образов, логистике, хотя, конечно, сейчас меню возможностей для таких задач сильно шире. Алгоритм в 1953 придумывался для моделирования движения атомов в расплавленных металлах. Металл, когда нагревается, становится жидким, а при медленном охлаждении его атомы постепенно находят идеальное расположение. Если охлаждать слишком быстро, материал становится неоднородным.

Что сделали ученые? Они придумали метод случайных изменений в модели атомов. Иногда принимали худшие изменения, чтобы не застрять в «неудачной» структуре. Это привело к появлению Метода Метрополиса – основного компонента Simulated Annealing. Алгоритм был создан для физики, но потом его поняли математики (гы) и начали использовать в оптимизации.

Оставьте комментарий