Обучение нейросетей
Обучить нейросеть — это не только «посчитать градиент и сделать шаг». Реальные трудности в деталях режима: регуляризация борется с переобучением, dropout и нормализационные слои ведут себя по-разному на обучении и инференсе, накопление градиентов позволяет обучать большими батчами на маленькой памяти, а перестановочно-инвариантные архитектуры работают с неупорядоченными множествами.
Ловушки здесь тонкие и почти всегда про фазу «train vs inference». Dropout на инференсе не выкидывает нейроны. BatchNorm на инференсе использует сохранённые статистики, а не текущий батч. LayerNorm вообще не зависит от батча. Перепутать любую из этих деталей — значит получить модель, которая на тесте ведёт себя не так, как на обучении. Полная карта — ниже.
Карта темы
- Регуляризация нейросетей — dropout, L2 weight decay, нормализация, аугментация и ранняя остановка как способы бороться с переобучением.
- Dropout — случайное обнуление нейронов на обучении и согласование масштаба активаций на инференсе.
- Нормализационные слои — семейство Batch/Layer/Instance/Group Norm и по какой оси каждый нормирует.
- BatchNorm — обучение и инференс — статистики батча против бегущих статистик и контраст с LayerNorm.
- Накопление градиентов — эмуляция большого батча суммой градиентов по микро-батчам.
- Архитектуры для множеств — перестановочно-инвариантные сети (Deep Sets, GAT) для неупорядоченных входов переменной длины.
Частые ошибки и ловушки
| Ошибка | Последствие |
|---|---|
| Оставить dropout активным на инференсе | Недетерминированные, скачущие предсказания |
| Забыть перемасштабировать активации после dropout | Величина активаций на тесте не совпадает с обучением |
| Считать, что BatchNorm на инференсе берёт текущий батч | Выход зависит от соседей по батчу — неверно и нестабильно |
| Путать LayerNorm с BatchNorm по оси нормировки | LayerNorm нормирует объект по признакам, батч ни при чём |
| Вызывать zero_grad после каждого микро-батча | Накопление стёрто — большой батч не эмулируется |
| Брать RNN или конкатенацию для неупорядоченного множества | Результат зависит от порядка соседей, чего быть не должно |
Значение для собеседований
Тему спрашивают, чтобы проверить, понимаете ли вы разницу фаз обучения и инференса. Кандидат, который сам, без наводки, говорит «на инференсе dropout ничего не выкидывает, а активации домножаются на (1−p)», сразу показывает глубину.
Что обычно проверяют:
- Какие вообще бывают способы регуляризации и почему больший размер модели — не регуляризация.
- Что делает dropout на каждой фазе и зачем перемасштабирование.
- Чем BatchNorm отличается от LayerNorm и почему в трансформерах берут LayerNorm.
- Как обучать «большим батчом» при нехватке памяти.
Типичный неверный ответ: «BatchNorm и на инференсе считает статистики по текущему батчу». На самом деле на инференсе он использует сохранённые бегущие статистики, поэтому выход детерминирован и не зависит от состава батча.