7 трюков для глубокого обучения, о которых вы не знали

0
6264
Добавить в избранное

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

7 нетривиальных советов и трюков для глубокого обучения

Модели глубокого обучения, например, сверточные нейронные сети, имеют множество гиперпараметров. При поиске их оптимальных величин по однородной сетке требуются аппаратные и временные ресурсы. Рассмотрим семь способов, как сократить время обучения моделей и повысить их точность.

1. Используйте для глубокого обучения мощные архитектуры

Узнайте о преимуществах технологии переноса обучения (transfer learning) и изучите архитектуры сверточных нейросетей. Используйте профессионально сделанный на промышленных мощностях велосипед или хотя бы в деталях освойте его устройство прежде, чем изобретать свой. Соответствующие примеры предобученных моделей найдутся для всех популярных фреймворков: Keras (Список KaggleПриложение KerasПример OpenCV), TensorFlow (VGG16ResNet), Torch (LoadCaffe), Caffe (Model Zoo).

2. Используйте малые скорости обучения для предобученных моделей

Заранее настроенные веса – это не то же самое, что инициализированные случайным образом. Изменяйте их значения более деликатно. Выбор скорости зависит от модели обучения и того, насколько хорошо прошло предобучение.

3. Играйте с прореживанием (dropout)

Как и в случае регуляризации регрессионных моделей Ridge и LASSO, в глубоком обучении нет оптимальных для всех моделей значений альфа и прореживания. Эти гиперпараметры необходимо настраивать. Начиная с больших вариаций, при помощи np.logspace() уменьшайте интервал рассмотрения параметра аналогично скорости обучения. Общие стратегии следующие:

  • Используйте небольшие проценты прореживания: 20-50% для скрытых слоев и 20% для входных значений. Слабые дропауты не приводят к существенным эффектам, а слишком сильное прореживание вызывает недообучение.
  • Применяйте прореживание не только на скрытых слоях, но и на входном слое. Это также повышает эффективность обучения.
  • Тренируйте большие нейросети. Вы получите лучшую производительность, когда прореживание происходит в крупной сети, это дает модели больше возможностей для изучения независимых представлений.

4. Ограничивайте размеры весов

Чтобы обобщить модель, ограничьте абсолютные значения весов для определенных слоев. Покажем на примере датасета MNIST, как в Keras можно варьировать и прореживание, и величины весов:

Так замораживаются веса в первых пяти слоях:

Как вариант, можно установить для определенных слоев нулевую скорость обучения. Либо использовать алгоритм адаптивного обучения каждого параметра, например, Adadelta или Adam. Это несколько сложнее и лучше оформлено в Caffe.

5. Не трогайте первые слои

Первые скрытые слои нейронной сети обычно захватывают универсальные интерпретируемые признаки, такие как формы, кривые и пересечения. Просто оставьте их в покое.

6. Модифицируйте выходной слой

Замените стандартные значения по умолчанию новой функцией активации с размером вывода, подходящим для выбранной области. Не ограничивайтесь очевидным решением. Так, для MNIST кажутся достаточными 10 классов выходных данных. Однако использование 12-16 классов позволяет улучшить и разрешение вариантов, и качество модели. Пример модификации выходного слоя в Keras c 14 классами для датасета MNIST:

7. Визуализируйте данные моделей

Важно получать зрительное представление модельных данных. Уровень абстракции Keras позволяет о многом не думать, но не дает рассмотреть части модели для глубокого анализа. Приведенный ниже код позволяет визуализировать модели TensorFlow:

Следующая пара строк позволяет создать граф модели в Keras и сохраняет его в png-файле:

Функция plot_model принимает также два опциональных булевых аргумента:

  • show_shapes (по умолчанию False) определяет, будут ли выходные формы присутствовать на графе.
  • show_layer_names (по умолчанию True) будут ли показываться на графе номера слоев.

Вы можете обработать объект pydot.Graph самостоятельно, например, в Jupyter-ноутбуке:

Надеемся, что эта подборка рекомендаций для глубокого обучения поможет вам в ваших проектах.

Источник

Другие советы для глубокого обучения:

Интересуетесь Data Science?

Подпишитесь на нашу рассылку, чтобы получать больше интересных материалов:

И не беспокойтесь, мы тоже не любим спам. Отписаться можно в любое время.




Оставьте комментарий