Функции активации в нейронных сетях

Мотив, варианты использования, преимущества и ограничения

tl; dr В сообщении обсуждаются различные линейные и нелинейные функции активации, используемые в глубоком обучении и нейронных сетях. Мы также рассмотрим, как каждая функция работает в разных ситуациях, преимущества и недостатки каждой, а затем в заключение остановимся на одной последней функции активации, которая превосходит те, которые обсуждались в случае приложения для обработки естественного языка.

Вступление

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

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

Основная концепция

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

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

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

Линейная функция

Начнем с простейшей функции; линейная функция. Значение f (z) увеличивается пропорционально значению z. Входное значение - это взвешенная сумма весов и смещений нейронов в слое. Линейная функция решает проблему двоичной ступенчатой ​​функции, когда она сообщает только значения 0 и 1.

Вывод функции не ограничен каким-либо диапазоном; то есть значение f (z) может исходить, что не обязательно является проблемой, поскольку мы можем перейти к следующему или последнему уровню, взяв максимальное значение нейронов, сработавших после com. Кроме того, линейная функция активации имеет ряд недостатков, таких как:

  • Мы замечаем, что производная функции является константой. Это означает, что имеет место постоянный градиентный спуск, поскольку нет никакой связи со значением z.
  • Наша модель на самом деле не обучается, так как она не улучшает параметр ошибки, который составляет всю суть нейронной сети.
  • Поскольку активация является линейной, вложение в 2 или N скрытых слоев с одной и той же функцией не будет иметь реального эффекта. По сути, N слоев можно было бы сжать в один слой.

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

Сигмовидная функция (σ)

Сигмоидальная функция принимает значение в качестве входных данных и выводит другое значение от 0 до 1. Она нелинейна, и с ней легко работать при построении модели нейронной сети. Преимущество этой функции заключается в том, что она непрерывно дифференцируется по различным значениям z и имеет фиксированный диапазон вывода.

При наблюдении мы видим, что значение f (z) увеличивается, но очень медленно. Математическая причина заключается в том, что по мере увеличения z (по оси x) значение показателя e -z становится бесконечно малым, а значение f (z) становится равным до 1 в какой-то момент. Другими словами, функция подвержена проблеме исчезающего градиента, о которой мы говорили в предыдущей лекции. Проблема высокого уровня заключается в том, что модели, которые используют сигмовидную активацию наших медленных учеников и на этапе экспериментов, будут генерировать значения прогноза, которые имеют более низкую точность.

Другая проблема с этой функцией возникает, когда у нас есть несколько скрытых слоев в нашей нейронной сети. Все значения, которые мы получаем с помощью этой функции активации, являются положительными, а сигмовидная диаграмма выдает значения разной величины в диапазоне от 0 до 1, поэтому становится трудно оптимизировать.

Помимо недостатков, мы действительно видим, что сигмовидная функция используется, особенно в моделях бинарной классификации, как часть выходного слоя для захвата вероятности в диапазоне от 0 до 1. В большинстве случаев мы обычно сталкиваемся с проблемами, которые связаны с несколькими классами, и для таких моделей мы используем Функция Softmax (Подробнее об этой функции рассказано в предыдущей лекции).

Функция Тань

Функция Tanh - это модифицированная или увеличенная версия сигмовидной функции. Что мы видели в Sigmoid, так это то, что значение f (z) ограничено между 0 и 1; однако в случае Tanh значения ограничены от -1 до 1.

Это удобно в том смысле, что мы можем получать значения разных знаков, что помогает нам определить, какие оценки следует учитывать на следующем уровне, а какие игнорировать. Но у этой функции все еще есть проблема исчезающего градиента, которая была замечена в сигмоидной функции. Модель замедляется экспоненциально за пределами диапазона +2 и -2. Изменение градиента очень мало, за исключением этого узкого диапазона.

Последнее, что касается Tanh и Sigmoid, градиент или производная функции Tanh круче по сравнению с сигмовидной функцией, которую мы можем наблюдать на рисунке 4 ниже. Наш выбор использования Sigmoid или Tanh действительно зависит от требований градиента для постановки задачи.

Выпрямленная функция линейных единиц (ReLU)

Rectified Linear Unit или сокращенно ReLU будет считаться наиболее часто используемой функцией активации в моделях глубокого обучения. Функция просто выводит значение 0, если получает какой-либо отрицательный ввод, но для любого положительного значения z она возвращает это значение обратно как линейная функция. Таким образом, это можно записать как f (z) = max (0, z)

Однако следует отметить, что функция ReLU по-прежнему является нелинейной, поэтому мы можем распространять ошибки в обратном направлении и иметь несколько слоев нейронов. Эта функция была быстро принята, так как ReLU позаботился о нескольких проблемах, с которыми сталкивались сигмоид и Тань:

  • Функция ReLU имеет производную 0 в половине своего диапазона, который охватывает все отрицательные числа. Для положительных входных значений производная равна 1. Итак, мы исправили проблему «исчезающего» градиента.
  • Одновременно активируются только несколько нейронов, что делает сеть разреженной, что делает ее эффективной (мы увидим, что разреженность - не всегда хорошо)
  • Он экономичен в вычислительном отношении по сравнению с Sigmoid и Tanh.

У ReLU есть свой набор ограничений и недостатков, несмотря на то, что он является лучшей функцией активации, чем другие нелинейные альтернативы:

  • Функция страдает от умирающей проблемы ReLU - для активаций, соответствующих значениям z ‹0, градиент будет равен 0, из-за чего веса не будут корректироваться во время градиентного спуска при обратном распространении. Это означает, что такие нейроны перестанут реагировать на изменения ошибки / ввода, поэтому выходная сеть станет пассивной из-за дополнительной разреженности.
  • Лучше всего использовать его между входным и выходным слоями, в частности, в скрытых

И последнее замечание по ReLU: есть способ противостоять умирающей проблеме ReLU с помощью модифицированной версии функции, называемой ReLU «Leaky». Короче говоря, мы берем значения z ‹0, которые формируют линию y = 0, и преобразуем ее в негоризонтальную прямую линию, добавляя небольшой ненулевой постоянный градиент α (обычно , α = 0,01). Итак, наша новая формула для z ‹0 - f (z) = αz.

Для получения дополнительной информации я приложил исследовательский документ для Leaky ReLU: https://arxiv.org/abs/1502.01852

Бонус: функция активации нелинейного куба

Есть одна интересная функция активации, которая применяется к тегам части речи (POS), которая работает лучше, чем все другие функции, упомянутые в статье. В статье Маннинга и Данки Чена (2014) предложен новый способ изучения нейронного классификатора для использования в жадном анализаторе зависимостей на основе переходов для обработки естественного языка. Они вводят нелинейную функцию куба, обозначенную z³, которая дополнительно уточняется в уравнении скрытого слоя ниже:

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

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

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

Нелинейный куб ›ReLU› Тань ›сигмовидная

Чтобы понять, как работает эта модель, я прикрепил ссылку на статью Мэннинга ниже.

Быстрый и точный парсер зависимостей с использованием нейронных сетей:
https://cs.stanford.edu/~danqi/papers/emnlp2014.pdf

Заключение

Мы узнали о многочисленных функциях активации, которые используются в моделях машинного обучения. Исследователи используют эти функции для сравнения того, что лучше всего работает с учетом постановки задачи. Жестких правил для выбора конкретной функции активации не существует. Однако это зависит от архитектуры модели, гиперпараметров и функций, которые мы пытаемся уловить. В идеале мы используем функцию ReLU в наших базовых моделях, но мы всегда можем попробовать другие, если не сможем достичь оптимального результата.

В качестве последнего примечания, не стесняйтесь комментировать свои собственные версии функций нелинейной активации, которые вы разработали, общий обзор и в каком сценарии он работает лучше всего.

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