В предыдущей истории: Загадка потерь при обучении и валидации в поведенческом клонировании для CNN из Udacity SDC Project 3 я думал, не пошло ли что-то не так в моих реализациях. Я обсуждал эту проблему в каналах Udacity Slack. Я заметил, что мой код генерации данных пропускал проверочный набор в обучающий набор в следующую эпоху. Эксперт канала говорит: Нет, нельзя смешивать данные обучения и проверки.

Я думал, что проверочный набор не просачивается в тренировочный набор для каждой эпохи, а перетасовывается в тренировочный набор для следующей эпохи. Это большое дело?

И мой наставник Гилад Грессель из Udacity прислал мне сообщение: «Я сделал это из данных вашего блога, можете ли вы сделать это из ваших новых данных, чтобы не было утечек?»

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

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

Тестирование эпох на треке симуляции неожиданно (для меня) показывает, что потеря проверки действительно хорошо указывает на производительность. Эпохи 3–9 на этот раз довольно хорошо шли по треку, а эпохи 1, 19 и 20 выпадали из трека. Теперь потеря при проверке лучше влияет на производительность этого эксперимента.

Для предыдущего эксперимента валидационный набор был перемешан/утек в следующие эпохи, поэтому валидационный проигрыш вел себя как тренировочный проигрыш и не делал того, что предполагалось. Таким образом, утечка проверочного набора — это большое дело.

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

Кстати, мой наставник также помог мне лучше понять концепцию «переоснащения». Если модель слишком подходит, не должна ли эпоха иметь лучшую производительность, поскольку она больше всего подходит для трека? Оказывается, правильная концепция заключается в том, что она соответствует «тренировочным данным». Было бы лучше, если бы трек был очень похож / специфичен для тренировочных данных. Вот почему проверочный набор является импортным, чтобы предотвратить такого рода переобучение и помочь модели обобщиться на трек. Надеюсь, мы сможем извлечь уроки из чужих ошибок. Я склонен учиться на своих :).