Поиск по сайту:

Функция активации Sigmoid — реализация Python


В этом уроке мы узнаем о сигмовидной функции активации. Сигмовидная функция всегда возвращает результат от 0 до 1.

После этого урока вы будете знать:

  • Что такое функция активации?
  • Как реализовать сигмовидную функцию в Python?
  • Как построить сигмовидную функцию в Python?
  • Где мы используем сигмовидную функцию?
  • Какие проблемы вызывает сигмовидная функция активации?
  • Лучшие альтернативы сигмовидной активации.

Что такое активационная функция?

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

Некоторые из популярных функций активации:

  • Двоичный шаг
  • Линейный
  • Сигмоид
  • Тан
  • РеЛУ
  • Дырявый ReLU
  • Софтмакс

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

Математическое уравнение для расчета выходных данных нейронной сети:

В этом уроке мы сосредоточимся на сигмовидной функции активации. Эта функция происходит от сигмовидной функции в математике.

Начнем с обсуждения формулы функции.

Формула для сигмовидной функции активации

Математически вы можете представить сигмовидную функцию активации как:

Вы можете видеть, что знаменатель всегда будет больше 1, поэтому результат всегда будет между 0 и 1.

Реализация сигмовидной функции активации в Python

В этом разделе мы узнаем, как реализовать сигмовидную функцию активации в Python.

Мы можем определить функцию в python как:

import numpy as np 
def sig(x):
 return 1/(1 + np.exp(-x))

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

import numpy as np 
def sig(x):
 return 1/(1 + np.exp(-x))


x = 1.0
print('Applying Sigmoid Activation on (%.1f) gives %.1f' % (x, sig(x)))

x = -10.0
print('Applying Sigmoid Activation on (%.1f) gives %.1f' % (x, sig(x)))

x = 0.0
print('Applying Sigmoid Activation on (%.1f) gives %.1f' % (x, sig(x)))

x = 15.0
print('Applying Sigmoid Activation on (%.1f) gives %.1f' % (x, sig(x)))

x = -2.0
print('Applying Sigmoid Activation on (%.1f) gives %.1f' % (x, sig(x)))

Выход :

Applying Sigmoid Activation on (1.0) gives 0.7
Applying Sigmoid Activation on (-10.0) gives 0.0
Applying Sigmoid Activation on (0.0) gives 0.5
Applying Sigmoid Activation on (15.0) gives 1.0
Applying Sigmoid Activation on (-2.0) gives 0.1

График активации сигмоида с использованием Python

Для построения сигмовидной активации мы будем использовать библиотеку Numpy:

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-10, 10, 50)   
p = sig(x)
plt.xlabel("x") 
plt.ylabel("Sigmoid(x)")  
plt.plot(x, p) 
plt.show()

Выход :

Мы видим, что результат находится между 0 и 1.

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

Одним из недостатков сигмовидной функции является то, что ближе к конечным областям значения Y очень слабо реагируют на изменение значений X.

Это приводит к проблеме, известной как проблема исчезающего градиента.

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

Давайте обсудим некоторые альтернативы, которые решают эту проблему.

Функция активации ReLu

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

Функция активации ReLu возвращает 0, если ввод отрицательный, в противном случае возвращает ввод как есть.

Математически это представляется как:

Вы можете реализовать его на Python следующим образом:

def relu(x):
    return max(0.0, x)

Давайте посмотрим, как это работает на некоторых входах.

def relu(x):
    return max(0.0, x)
 
x = 1.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = -10.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = 0.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = 15.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = -20.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))

Выход:

Applying Relu on (1.0) gives 1.0
Applying Relu on (-10.0) gives 0.0
Applying Relu on (0.0) gives 0.0
Applying Relu on (15.0) gives 15.0
Applying Relu on (-20.0) gives 0.0

Проблема с ReLu заключается в том, что градиент для отрицательных входных данных оказывается равным нулю.

Это снова приводит к проблеме исчезающего градиента (нулевого градиента) для отрицательных входных данных.

Для решения этой проблемы у нас есть еще одна альтернатива, известная как функция активации Leaky ReLu.

Негерметичная функция активации ReLu

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

Математически мы можем определить это как:

f(x)= 0.01x, x<0
    = x,   x>=0

Вы можете реализовать его на Python, используя:

def leaky_relu(x):
  if x>0 :
    return x
  else :
    return 0.01*x
  
x = 1.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))

x = -10.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))

x = 0.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))

x = 15.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))

x = -20.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))

Выход :

Applying Leaky Relu on (1.0) gives 1.0
Applying Leaky Relu on (-10.0) gives -0.1
Applying Leaky Relu on (0.0) gives 0.0
Applying Leaky Relu on (15.0) gives 15.0
Applying Leaky Relu on (-20.0) gives -0.2

Заключение

Этот урок был о функции активации Sigmoid. Мы узнали, как реализовать и построить функцию на питоне.