Рубрики
Без рубрики

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

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

Автор оригинала: Pankaj Kumar.

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

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

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

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

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

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

  • Бинарный шаг
  • Линейный
  • Сигмоид
  • Усадьба
  • Relu.
  • Утечка RELU.
  • Софтмакс

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

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

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

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

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

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

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

Реализация функции активации Sigmoid в Python

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

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

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 Library:

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 состоит в том, что градиент отрицательных входов выходит на нулю.

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

Чтобы решить эту проблему, у нас есть еще одна альтернатива, известная как Элезначная функция активации 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

Заключение

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