Можно ли постепенно обучать нейронную сеть?

23

Я хотел бы обучить нейронную сеть, где выходные классы не определены (все) с самого начала. Все больше и больше классов будут введены позже на основе входящих данных. Это означает, что каждый раз, когда я представляю новый класс, мне нужно будет переучивать NN.

Как я могу обучать NN постепенно, то есть, не забывая ранее полученную информацию на предыдущих этапах обучения?

Fr_nkenstien
источник

Ответы:

10

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

Современным ConvNets требуется 2-3 недели для обучения на нескольких графических процессорах ImageNet. Поэтому часто люди видят, как люди выпускают свои последние контрольные точки ConvNet для тех, кто может использовать сети для тонкой настройки. Например, в библиотеке Caffe есть модельный зоопарк, где люди делятся своими весами в сети.

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

При выполнении трансферного обучения следует помнить несколько вещей :

  • Ограничения от предварительно обученных моделей. Обратите внимание, что если вы хотите использовать предварительно обученную сеть, вы можете быть немного ограничены с точки зрения архитектуры, которую вы можете использовать для своего нового набора данных. Например, вы не можете произвольно извлечь слои Conv из предварительно обученной сети. Однако некоторые изменения являются прямыми: благодаря совместному использованию параметров вы можете легко запустить предварительно обученную сеть на изображениях различного пространственного размера. Это ясно видно в случае слоев Conv / Pool, потому что их прямая функция не зависит от пространственного размера входного объема (до тех пор, пока шаги "вписываются").

  • Курсы обучения. Обычно для настраиваемых весов ConvNet используется меньшая скорость обучения по сравнению с весами (произвольно инициализированными) для нового линейного классификатора, который вычисляет оценки классов вашего нового набора данных. Это потому, что мы ожидаем, что веса ConvNet относительно хорошие, поэтому мы не хотим искажать их слишком быстро и слишком сильно (особенно, когда новый линейный классификатор над ними обучается из случайной инициализации).

Дополнительная справка, если вас интересует эта тема: Насколько переносимы функции в глубоких нейронных сетях?

Максим
источник
Трансферное обучение - не единственный способ инкрементного обучения.
nbro
7

Вот один из способов сделать это.

После тренировки вашей сети вы можете сохранить ее вес на диске. Это позволяет вам загружать эти веса, когда новые данные становятся доступными, и продолжать тренировку практически с того места, где закончилось ваше последнее обучение. Однако, поскольку эти новые данные могут поставляться с дополнительными классами, теперь вы выполняете предварительную подготовку или точную настройку в сети с сохраненными ранее весами. На данный момент единственное, что вам нужно сделать, это сделать так, чтобы последний (ые) слой (и) вмещал новые классы, которые были введены с появлением вашего нового набора данных, и, что наиболее важно, включает дополнительные классы (например, если ваш последний слой) Первоначально у вас было 10 классов, а теперь вы нашли еще 2 класса, в рамках вашей предварительной подготовки / тонкой настройки вы заменяете ее на 12 классов). Короче, повтори этот круг:

Повторение

Цилидзи Мудау
источник
если вы размещаете только новые классы в последнем слое (учебные классы + новые классы), модель не может быть приспособлена, потому что мы хотим тренироваться с новыми классами (только), и модель ожидает массив с формой (обучение + новый классы).
Жоэль Карнейру