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

Для простоты рассмотрим многослойный персептрон.

У нас был набор входов. Эти входные данные были отправлены на скрытый слой, и мы вычислили значение Z, которое было произведением входных функций и некоторых весов. После этой операции мы использовали функцию активации для вычисления выхода H. Мы использовали сигмовидную функцию активации на Z. Результаты затем отправлялись на следующий уровень, где у нас были некоторые веса и смещение, и затем мы вычисляли выход O.

Для получения более подробной информации вы можете обратиться к моему предыдущему блогу для лучшего понимания https://medium.com/@gauravrajpal1994/introduction-to-neural-networks-1d111bb4649

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

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

Визуализируем с помощью TensorFlow Playground.

На игровой площадке TensorFlow мы видим слева, что у нас есть несколько вариантов данных. В середине у нас определена наша архитектура. У нас есть входы X1 и X2 и один скрытый слой, а затем выходной слой. Мы также можем увидеть возможность изменить функцию активации, скорость обучения и т. Д. Цель состоит в том, чтобы создать границу принятия решения, которая отделяет оранжевые точки от синих точек. Итак, давайте посмотрим, каков был результат после использования функции активации как линейной.

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

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

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

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

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

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

ВИДЫ ФУНКЦИЙ АКТИВАЦИИ.

ФУНКЦИЯ ЛИНЕЙНОЙ АКТИВАЦИИ

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

Математическое уравнение для линейной функции активации: y = ax, которое говорит, что для любого входа x выход будет кратным x.

Рассмотрим a = 1, график будет иметь вид,

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

Второе условие функции активации, которое гласит: «Она должна быть дифференцируемой в каждой точке». . Посмотрим на производную линейной функции активации. Мы увидим, когда мы возьмем производную по t x, мы получим коэффициент x, то есть a.

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

ФУНКЦИЯ АКТИВАЦИИ SIGMOID

Это наиболее популярная функция активации, и мы использовали ее ранее, чтобы продемонстрировать, как она полезна для фиксации нелинейности данных с помощью Tensor Flow Playground.

Математическое уравнение функции активации сигмовидной кишки выглядит следующим образом:

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

Давайте посмотрим на производную функции активации SIGMOID.

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

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



ФУНКЦИЯ АКТИВАЦИИ TANH

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

Математическое уравнение функции активации tanh выглядит следующим образом:

В функции активации tanh выходные значения находятся между (-1, 1), где, как и в сигмоидной функции активации, мы видели, что выходные значения находятся в диапазоне от (0,1).

РАЗНИЦА МЕЖДУ SIGMOID И TANH

На графике выше мы видим, что функция tanh круче в центре около 0. Также этот график показывает, что TANH - это масштабированная версия SIGMOID.

Давайте посмотрим на производную функции активации TANH.

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

ФУНКЦИЯ АКТИВАЦИИ ReLU

ReLU расшифровывается как повторно ctified L iner U nit. Это одна из наиболее часто используемых функций активации в глубоком обучении.

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

Мы видим, что для всех значений больше 0 она действует как линейная функция и может быть представлена ​​как max (0, x), где x - любое действительное число. Также ясно, что при любых отрицательных входных значениях весов результатом будет 0, что означает, что нейроны не активируются в процессе прямого распространения. Поскольку активируется только определенное количество нейронов, функция активации ReLU эффективна с вычислительной точки зрения по сравнению с функцией активации сигмовидной и tanh.

РАЗНИЦА МЕЖДУ ReLU, TANH и SIGMOID

Вернувшись к функциям активации TANH и SIGMOID, мы увидели, что они обе дифференцируются в каждой точке, но, переходя к функции активации ReLU, мы видим, что он не дифференцируем в точке x = 0.

Посмотрим на производную функции активации ReLU.

Как мы видим, для всех значений больше 0 значение производной равно 1, а для значений меньше 0 - 0. Производная не определена при значении x = 0.

В целях реализации значение производной при x = 0 считается равным 0.

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

ФУНКЦИЯ АКТИВАЦИИ LEAKY ReLU

Leaky ReLU - это функция активации, которая преодолевает недостаток, встречающийся в слое ReLU, то есть вывод некоторых нейронов, становящихся 0. Чтобы решить эту проблему, она возвращает небольшое значение 0,01 x для x ‹0 вместо 0.

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

Давайте посмотрим на производную от функции активации Leaky ReLU.

Итак, когда мы вычисляем производную функции активации утечки relu, она будет 0,01 для всех значений x ≤ 0 и 1 для всех значений x ›0.

ФУНКЦИЯ АКТИВАЦИИ SOFTMAX

Активация SoftMax обычно используется для мультиклассовой классификации.

Прежде чем перейти к объяснению, почему эта функция активации используется для мультиклассовой классификации, давайте сначала разберемся, в чем именно заключается проблема мультиклассовой классификации. Например:

Рассмотрим рисунок ниже, для каждого наблюдения у нас есть 5 функций, а целевая переменная имеет 3 класса (класс 1, класс 2 и класс 3).

Давайте создадим простую нейронную сеть для обсуждаемой выше задачи. Мы увидим, что у нас есть 5 входных функций во входном слое. Далее у нас есть 1 скрытый слой с 4 нейронами. Очевидно, что мы можем увеличить количество нейронов и количество слоев в архитектуре, но пока мы рассматриваем только нейрон с 4 скрытыми слоями. Каждый из этих нейронов использует входные данные, веса и смещение для вычисления значения Z, представленного Zij (1-й нейрон 1-го слоя, мы называем его Z11 и т. Д.). К этим значениям мы применяем функции активации и отправляем результат на выходной слой.

Теперь вы можете угадать количество нейронов в выходном слое ???

Если вы догадались, 3 вы были правы, поскольку у нас было 3 класса в нашей целевой переменной нашего набора данных. Каждый отдельный нейрон даст вам вероятность отдельных классов.

На приведенном выше рисунке мы видим, что 1-й нейрон в выходном слое дает нам вероятность его принадлежности к Классу 1. Точно так же 2-й нейрон даст нам вероятность его принадлежности к Классу 2, и, наконец, 3-й нейрон даст нам вероятность его принадлежности к Классу 3.

Теперь предположим, что мы вычисляем значение Z с использованием весов и смещения выходного слоя и применяем функцию активации сигмоида, зная, что функция активации сигмоида дает нам значение от 0 до 1, мы получим некоторые выходные значения.

Если мы подумаем глубже, то увидим, что в этом случае мы столкнемся с двумя проблемами. Во-первых, если мы применим порог = 0,5, он скажет нам, что входной слой принадлежит 2 классам (класс 1: 0,84 и класс 2: 0,67). Во-вторых, значения вероятности не зависят друг от друга (вероятность того, что точка данных принадлежит классу 1, не учитывает вероятность других 2 классов).

Это причина, по которой функция активации SIGMOID не является предпочтительной для задачи мультиклассовой классификации. Поэтому вместо SIGMOID мы используем функцию активации SOFTMAX.

Используя активацию SoftMax, мы можем получить относительные вероятности, что означает, что он использует значения вероятностей нескольких классов в целевом объекте для вычисления окончательного результата.

Давайте посмотрим, как работает функция активации SoftMax.

Функция SoftMax превращает логиты [2,0, 1,0, 0,1] в вероятности [0,7, 0,2, 0,1], а сумма вероятностей равна 1.

В глубоком обучении термин логитовый слой обычно используется для последнего нейронного слоя нейронной сети для задачи классификации, которая производит необработанные значения прогноза в виде действительных чисел в диапазоне от [-infinity, + infinity]. - Википедия

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

Рассмотрим пошагово, что происходит в основном (Предположение):

ШАГ 1. Предположим, что мы получили следующие значения для выходного слоя.

ШАГ 2. Применение функции активации SoftMax к каждому из этих нейронов.

Следует отметить, что это значения вероятности для точки входных данных, принадлежащих соответствующим классам. Мы должны отметить, что сумма вероятностей в этом случае равна 1. Таким образом, в этом случае ясно, что вход принадлежит классу 1. Также, если значения вероятностей любого класса изменяются, значение вероятности для класса 1 также изменится.

Это все о функции активации SOFTMAX. Надеюсь, вы это поняли?

КАК ВЫБРАТЬ ФУНКЦИЮ АКТИВАЦИИ ДЛЯ НАШЕЙ НЕЙРОННОЙ СЕТИ?

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

  1. Функция линейной активации

Он используется для задачи типа РЕГРЕССИЯ на уровне вывода, где целевая переменная является непрерывной. Как мы уже обсуждали, функция линейной активации не может улавливать нелинейность данных, поэтому желательно иметь ее на выходном уровне, в то время как мы можем использовать нелинейные функции, такие как RELU и TANH, над скрытым слоем.

2. Функция активации сигмовидной кишки

Как мы уже знаем, он возвращает значения от 0 до 1, которые рассматриваются как вероятности выходных классов. Обычно он используется для ПРОБЛЕМЫ БИНАРНОЙ КЛАССИФИКАЦИИ, в то время как мы можем использовать другую функцию активации на скрытом уровне.

3. Функция активации ReLU и TanH

Эти функции активации обычно используются для СКРЫТЫХ СЛОЕВ нейронной сети. Фактически, функция активации ReLU работает лучше, чем другие функции активации, и является популярным выбором.

4. Функция активации Softmax

Подобно сигмоидной функции активации, функция активации softmax возвращает вероятности каждого класса и используется на выходном уровне и наиболее часто используется в МНОГОКЛАССИЧЕСКИЙ КЛАССИФИКАТОР.

ЗАКЛЮЧЕНИЕ

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

Свяжитесь со мной в LinkedIn: https://www.linkedin.com/in/gaurav-rajpal/

Следите за новостями об оптимизаторах / функциях потерь и демонстрационных проектах по глубокому обучению.

С уважением,

Гаурав Раджпал ([email protected])