Aug 13, 2018 02:04
Надеюсь, в заголовке достаточно громкое утверждение, чтобы привлечь внимание. Я хочу поговорить о тренировке нейросетей.
Чаще всего задачи машинного обучения формулируются в терминах оптимизации функции потерь. Функция потерь тем меньше, чем лучше модель приближает реальные данные. Типичная история такая: нас есть два датасета: обучающий и валидационный (тестовый оставим за скобками). На обучающем мы подбираем параметры модели так, чтобы уменьшилась ошибка на этих примерах уменьшилась ошибка, train loss. На тестовом проверяем, что модель не переобучилась, т.е. не просто подогналась под конкретные данные, а нашла закономерность и научилась обобщать; для этого мы меряем validation loss и надеемся, что он слабо отличается от train loss. Так устроено обучение фактически любого алгоритма Machine Learning.
Но есть нюанс, который редко осознается. А именно, что такой штуки как train loss по-большому счёту не существует. Дело в том, что train loss - это функция от параметров и данных. Если мы фиксируем набор обучающих данных, то у нас есть единственная функция потерь. Но нейросети обычно учат батчами - т.е. на каждом шаге оптимизации у нас есть случайный поднабор обучающих примеров. Каждый батч создает свой оптимизационный ландшафт, и минимумы этих ландшафтов совершенно не обязаны совпадать. Часть минимумов между батчами вообще не будет воспроизводиться, а другие, напротив, лежат неподалеку друг от друга - их-то мы и ищем. По сути на каждом шаге обучения мы учим новый классификатор, отталкиваясь от настроек старого.
Кажется, что нейронные сети не переобучаются, несмотря на прорву параметров, вовсе не за счёт какой-то особой нейросетевой магии, а за счёт того, что мы на каждом шаге обучения выбиваем классификатор из локального минимума, подменяя функцию потерь. В итоге вся сеть сходится не к локальному минимуму, а к большому скоплению рядом расположенных локальных минимумов - а это ровно то, что нам нужно.
Я в заголовке сказал, что такой штуки как глобальный минимум функции потерь нейронной сети вообще не существует. Это не совсем правда, он существует. Вот только реальную функцию потерь мы не знаем - а значит и найти её минимум не сможем. Но при наличии обучающей выборки у нас есть немалый ансамбль приближений этой функции. У нас нет цели искать глобальные минимумы этих апроксимаций - это довольно бессмысленная идея: вы добавите один пример - и все ваши минимумы куда-нибудь сдвинутся. Но скопление локальных минимумов такие приближения должны ловить хорошо.