Воспроизводимость вычислений – это способность получить одинаковые результаты при повторении одного и того же процесса вычислений в любой момент времени и в любом месте. Это основополагающий принцип научных исследований, который также крайне важен в области информатики и аналитики данных.
Воспроизводимость вычислений позволяет исследователям проверять результаты друг друга, повторять эксперименты и проводить новые эксперименты на основе предыдущих. В контексте машинного обучения и аналитики данных, воспроизводимость также важна для создания стабильных и надежных моделей, которые не будут давать разные результаты при каждом запуске.
Для достижения воспроизводимости вычислений необходимо контролировать все аспекты процесса: от исходных данных и используемого программного обеспечения до конкретных методов анализа и представления результатов. Сегодня все это обеспечивают специализированные фреймворки (ClearML, MLFlow и другие), но самое главное, без чего не получиться сделать эксперимент воспроизводимым: используемый аналитический инструмент должен уметь повторять свои расчеты.
Вплоть до выхода Loginom версии 7.1 проблема воспроизводимости сценариев остро стояла перед аналитиком. Конечно, это затрагивало только некоторые ситуации, но могла доставить много хлопот.
Давайте сформулируем, по какой причине один и тот же сценарий Loginom может давать разные результаты? Ответ прост - если в вычислениях присутствует случайная компонента.
При формировании случайной последовательности чисел важно понимать термин псевдослучайная генерация. Псевдослучайное число - это число, которое генерируется в процессе, который кажется случайным, но фактически основан на начальном значении, известном как "зерно" (seed). Поскольку этот процесс детерминирован (то есть определен "зерном"), он будет воспроизводить ту же последовательность чисел каждый раз, когда он начинается с того же "зерна".
В стандартных компонентах Loginom существует две ситуации, когда требуется генерировать случайные числа.
Для первого случая в Loginom есть два компонента: Сэмплинг и Разбиение на множества. Подробнее о них можно почитать здесь и здесь.
Второй случай используется во многих компонентах, в основном из группы Data Mining. Во-первых, потому что случайное разбиение на множества можно произвести внутри такого компонента, плюс там же настроить метод валидации через K-fold или Монте-Карло. Все эти процедуры требуют генерации случайных чисел.
Если не использовать встроенные в компонент процедуры разбиения и валидации, ряд компонентов все равно будут требовать генерацию случайных чисел для формирования начального приближения. Например, в кластеризации методом k-means (компонент Кластеризация) алгоритм стартует с центров кластеров, инициализированных случайным образом.
Но аналитику не нужно помнить все нюансы тех или иных алгоритмов. Для обеспечения воспроизводимости сценария достаточно контролировать параметр настройки Random seed, который задается в Мастере узла.
По умолчанию при добавлении узла в сценарий параметр Random seed генерируется однократно, и при дальнейших запусках не изменяется. В случае, когда требуется прим каждом запуске его генерировать заново, предусмотрена специальная настройка.
Это бывает полезно в случаях, когда требуется подобрать начальное приближение, дающее хорошие результаты, например, удачно сформированные кластера. Несколько запусков алгоритма с разными Random seed помогут в этом.