В моем предыдущем посте о Deep Learning я кратко представил идею и структуру того, как выглядит Deep Learning. Мы обсудили, что такое матрица весов (W), вектор смещения (B) и скорость обучения (альфа) и что нейронные сети могут иметь много слоев, и каждый слой может иметь много нейронов. Сегодня мы подробно обсудим, как реализовать шаги по повышению производительности нашей нейронной сети.

Что такое гиперпараметр?

Это параметр в машинном обучении, значение которого инициализируется до того, как происходит обучение. Они похожи на настройки, которые мы можем изменять и изменять, чтобы управлять поведением алгоритма. Их нельзя узнать напрямую из данных, и их нельзя исправить для данного алгоритма. Они оптимизируются в процессе обучения нейронной сети. Рассмотрим пример: в алгоритме Дерево решений гиперпараметры могут быть: Общее количество листьев в дереве, высота дерева, минимальный размер разделения листа, количество листьев в каждый уровень дерева.

В нашей нейронной сети есть следующие гиперпараметры:

  1. Количество скрытых слоев (L) в нейронной сети.
  2. Количество скрытых единиц / нейронов (n ^ [1], n ^ [2],….) в каждом слое.
  3. Выбор функции активации, используемой в скрытых слоях. Например: tanh, ReLU, сигмовидная кишка.
  4. Скорость обучения (альфа) при обратном распространении.
  5. Количество итераций / эпох, необходимых для обучения нашей модели.

Они определяют окончательные значения W и B, поэтому выбор правильного гиперпараметра имеет первостепенное значение.

Почему так важна оптимизация гиперпараметров? Что такое смещение и отклонение?

Давайте посмотрим на пример ниже.

Допустим, у нас есть набор точек данных 0 и X, случайным образом нанесенных на график, как показано выше. Нам нужна плоскость, которая отделяет 0 от X.

На первой диаграмме слева мы видим линейную плоскость, которая не очень хорошо разделяет их. Это пример недостаточной подгонки (сильное смещение), поскольку l внутренняя плоскость не может уловить основной тренд входных данных. На диаграмме посередине мы видим кривую, которая отлично справляется с отделением нулей от крестиков. Однако это слишком хорошо, чтобы вызвать переоснащение (высокая дисперсия). Модель нейронной сети, которая адаптирована к обучающим данным и плохо обобщается на невидимые тестовые данные, имеет высокую ошибку обобщения и, как говорят, переоценивает данные. Последняя диаграмма справа показывает среднюю плоскость, которая захватывает большую часть распределения данных, не делая слишком много или слишком мало. В этом случае нет ни высокой систематической ошибки, ни большой дисперсии. Нам нужен алгоритм, который будет хорошо работать не только с обучающими данными, но и с новыми входными данными. Следовательно, настройка гиперпараметров имеет первостепенное значение.

Как решить эти проблемы?

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

Регуляризация

Часто получение большего количества обучающих данных для уменьшения высокой дисперсии обходится дорого. Кроме того, добавление дополнительных обучающих данных (X, Y) увеличивает точность обобщения до определенного предела. Альтернативный подход к повышению производительности - использование регуляризации. При регуляризации мы просто добавляем дополнительный член к нашей функции затрат, который является нормой Фробениуса весовой матрицы W. Параметр лямбда называется параметром регуляризации, который обозначает степень регуляризации. Установка лямбда на 0 не приводит к регуляризации, в то время как большие значения лямбды соответствуют большей регуляризации. Лямбда обычно устанавливается с помощью перекрестной проверки. Регуляризация штрафует только веса на каждом уровне и оставляет смещения нерегуляризованными. В основном это связано с тем, что вес W имеет множество параметров (каждый нейрон каждого скрытого слоя), в то время как b имеет только один параметр, что означает, что для смещения обычно требуется меньше данных, чем весов для точной подгонки.

Снижение веса:

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

Почему этот метод работает?

Если увеличить лямбду, то вес W ^ [l] почти стремится к нулю. Следовательно, Z = W.X + B также становится 0. Это может привести к исчезновению нейрона в слое, и этот ноль распространяется назад по сети, делая больше нейронов нулевыми / нулевыми. Таким образом, сложная нейронная сеть становится намного проще. Однако, если будет удалено слишком много нейронов, мы можем просто перейти от сценария с высокой дисперсией к сценарию с высоким смещением. Следовательно, выбор подходящего значения лямбда очень важен.

Код для реализации регуляризации:

Следующие фрагменты кода показывают реализацию регуляризации в Python. В приведенном ниже примере нейронной сети есть 3 скрытых слоя. Активация ReLU используется для всех скрытых слоев, кроме последнего слоя. Последний слой L = 3 использует сигмоид в качестве своей функции активации. Таким образом, W1, A1, B1, W2, A2, B2, W3, A3, B3 - параметры, соответствующие каждому слою. Y - это результат. Поскольку лямбда уже является сохраненным ключевым словом в Python, мы будем использовать лямбда для обозначения лямбда. Если lambd = 0, это означает, что регуляризация не добавляется.

Формула для вычисления L2-регуляризации показана на рис. 1.4 выше. Функция ниже просто реализует формулу для расчета стоимости с регуляризацией.

Нам также необходимо рассчитать обратное распространение. Код для этого приведен ниже.

Ссылка:

  1. Специализация по глубокому обучению от Эндрю Нг на Coursera.
  2. Записи лекций профессора Иддо Дрори из Нью-Йоркского университета.
  3. Википедия и изображения Google для ресурсов изображений.
  4. Блоги Deep Learning.
  5. Книга Яна Гудфеллоу и Йошуа Бенжио.
  6. Википедия для определений и ссылок.

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