Почему в тренировочном даталоадере должен быть параметр shuffle при обучении более одной эпохи
Что проверяют
Понимаете ли, на чём держится стохастический градиентный спуск: батч должен быть случайной выборкой из обучающего набора. Заодно смотрят, знаете ли, где перемешивание вредно.
Как отвечать
Градиент по батчу это оценка градиента по всей выборке, и оценка несмещённая только если батч набран случайно. Данные почти никогда не лежат случайно: выгрузка отсортирована по классу, по дате, по источнику. Без перемешивания батч получается однородным, сотня примеров одного класса подряд, модель качается вслед за порядком, статистики BatchNorm считаются по скошенному батчу, сходимость портится.
Вторая половина вопроса про эпохи. Без перемешивания каждая эпоха повторяет один и тот же порядок батчей, то есть одну и ту же последовательность обновлений весов. С shuffle=True загрузчик заново перемешивает индексы в начале каждой эпохи, батчи каждый раз собираются новые, и шум обновлений перестаёт быть периодическим.
train_loader = DataLoader(train_ds, batch_size=64, shuffle=True)
val_loader = DataLoader(val_ds, batch_size=64, shuffle=False)На валидации и тесте перемешивание не нужно: метрика от порядка не зависит, а фиксированный порядок удобнее, когда сравниваешь предсказания разных запусков.
Где спотыкаются
Объясняют перемешивание борьбой с переобучением. Переобучение определяется ёмкостью модели, объёмом данных и регуляризацией. Порядок примеров влияет на смещение градиента и на устойчивость обучения, а не на способность модели заучить обучающую выборку.
Забывают про распределённый режим. При обучении на нескольких процессах порядок задаёт свой сэмплер, и без вызова его метода со сменой номера эпохи перестановка будет одинаковой во всех эпохах. Там же ловят ошибку от попытки задать одновременно и свой сэмплер, и флаг перемешивания.
Перемешивают слишком рано и получают утечку. Для временных рядов разбиение на обучение и валидацию делается по времени, перемешивать можно только окна внутри обучающей части. Перемешали до разбиения, обучились на будущем и получили отличную метрику, которая не воспроизводится на проде.