Ответ вслух Middle Оптимизаторы и обучение спрашивают часто обновлено

Модель не обучается

Вопрос

Loss не падает с первых шагов. Как вы будете искать причину?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Первый тест: беру маленький батч, например 8 объектов, и пытаюсь довести loss почти до нуля. Если сеть не может переобучиться на 8 примерах, проблема в коде, а не в данных или модели.

Что должно прозвучать в ответе

  • Переобучиться на одном маленьком батче: если не получается, баг в коде

  • Проверить данные и метки: соответствие, нормализация, перемешивание

  • Проверить loss и выход: логиты против вероятностей, правильный reduction

  • Проверить цикл: zero_grad, backward, step, режим train, requires_grad

  • Подбор lr, нормы градиентов по слоям, инициализация

Что могут спросить следом

  • Что если модель переобучается на одном батче, но на всём датасете стоит?
  • Как быстро проверить, что метки не перепутаны?

Разбор

Первый тест: беру маленький батч, например 8 объектов, и пытаюсь довести loss почти до нуля. Если сеть не может переобучиться на 8 примерах, проблема в коде, а не в данных или модели. Дальше проверяю данные: смотрю глазами на пары вход-метка после всех преобразований, нормализацию входов, что метки не сдвинуты относительно объектов и что DataLoader перемешивает трейн. Проверяю выход и потерю: в CrossEntropyLoss идут логиты, а не вероятности; размерности совпадают; нет случайного broadcasting. Проверяю цикл: zero_grad перед backward, вызывается optimizer.step(), оптимизатору переданы параметры нужной модели, model.train() включён, параметры не заморожены. Затем смотрю нормы градиентов по слоям (нули или взрыв) и делаю короткий поиск lr по логарифмической сетке. Начальный loss тоже подсказка: для 10 классов при случайной инициализации он должен быть около ln 10 ≈ 2.3.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме