Polyak averaging
Зачем это нужно? В обучении нейросетей на случайных мини-батчах веса постоянно колеблются: они приближаются к оптимальной области, но не стоят на месте. Эти колебания — шум, который мешает получить итоговое решение. Усреднение сглаживает шум и позволяет найти область с меньшим значением функции потерь. На практике это часто дает заметный прирост точности на тестовых данных и делает модель устойчивее к переобучению.
Как это работает на интуитивном уровне? Представьте, что вы стрелок на качающейся палубе корабля. Каждый выстрел отклоняется от цели случайно, но если вы сделаете серию выстрелов и вычислите среднюю точку попаданий, она окажется гораздо ближе к центру мишени. Так и здесь: каждый шаг градиентного спуска — это отдельный «выстрел», а усреднение параметров — это вычисление центроида всех точек, в которых побывала модель за последние эпохи.
Прикладной пример: при обучении нейросети для распознавания рака на медицинских снимках обучение на последних эпохах часто шумит — метрики то растут, то падают. Если в конце обучения сохранить веса после каждой эпохи и затем усреднить их, получится модель, которая, как правило, показывает более стабильные и точные результаты, чем модель с весами с последней эпохи. Этот прием применяется во многих современных нейросетевых библиотеках, например в PyTorch.
Итак, Polyak averaging — это простой и мощный способ получить качественную модель без дополнительных затрат на вычисления. Он не требует изменений в архитектуре и легко добавляется в любой процесс обучения. Именно поэтому его широко используют и в исследовательских экспериментах, и в промышленных системах.
Поделиться