Машинное обучение, воспроизводимые результаты
Многие алгоритмы машинного обучения являются стохастическими. Поэтому при каждой компиляции модели получаются разные значения точности и других показателей эффективности алгоритма.
Как сделать воспроизводимые результаты? Например при необходимости сравнить эффективность алгоритма с разным набором гиперпараметров.
Есть два основных подхода:
- прогонять алгоритм на тестовом датасете много (30+) раз, чтобы нивелировать погрешность инициализации генератора случайных чисел (ГСЧ);
- зафиксировать смещение (
seed
) инициализации генератора случайных чисел, чтобы во время тестирования получать одинаковые начальные значения весов и коэффицентов, зависящие от ГСЧ.
Первый подход не всегда удобен из-за своей потенциальной ресурсоемкости, но все же является более предпочтительным.
Отдельно стоит отметить, что оба подхода желательно использовать не на одном, а на нескольких тестовых наборах. Наборы можно получать с помощью кроссвалидации (обычной или с перемешиванием), либо изначально подготовить несколько выборок (при этом учитывая утечку информации).
Второй подход в случае использования numpy
и tensorflow
реализуется путем явной установки величины смещения:
import nump as np
import tensorflow as tf
FIXED_SEED = 42
np.random.seed(FIXED_SEED)
tf.random.set_seed(FIXED_SEED)
Важно не забывать, что при использовании сторонних библиотек им может понадобиться дополнительная явная инициализация величины смещения ГСЧ. В этом случае необходимо обратиться к документации по этим библиотекам.
Подробнее на английском языке.