Машинное обучение, воспроизводимые результаты

29.01.2020

Многие алгоритмы машинного обучения являются стохастическими. Поэтому при каждой компиляции модели получаются разные значения точности и других показателей эффективности алгоритма.

Как сделать воспроизводимые результаты? Например при необходимости сравнить эффективность алгоритма с разным набором гиперпараметров.

Есть два основных подхода:

  1. прогонять алгоритм на тестовом датасете много (30+) раз, чтобы нивелировать погрешность инициализации генератора случайных чисел (ГСЧ);
  2. зафиксировать смещение (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)

Важно не забывать, что при использовании сторонних библиотек им может понадобиться дополнительная явная инициализация величины смещения ГСЧ. В этом случае необходимо обратиться к документации по этим библиотекам.

Подробнее на английском языке.