Реализация функции сигмоида на Python
В этом учебнике вы научитесь реализовывать функцию активации сигмоид в Python. Поскольку сигмоидальная функция является функцией активации в нейронных сетях, важно понимать, как ее реализовать на Python. Вы также узнаете некоторые ключевые характеристики сигмоидной функции и почему она так полезна в глубоком обучении.
К концу этого обучающего руководства вы научитесь:
Что такое сигмовидная функция и почему она используется в глубоком обучении
Как реализовать сигмовидную функцию в Python с помощью numpy и scipy
Как построить сигмовидную функцию в Python с помощью Matplotlib и Seaborn
Как применить сигмовидную функцию к массивам numpy и спискам Python
Оглавление
Что такое сигмовидная функция?
Сигмоидная функция - это функция, имеющая "S"-образную кривую, также известную как сигмоидная кривая. Наиболее известным примером является логистическая функция, которая вычисляется по следующей формуле:
Когда функция изображена на графике, она выглядит следующим образом:

Вы можете задаваться вопросом о том, как эта функция связана с глубоким обучением. Функция сигмоида часто используется в качестве функции активации в глубоком обучении. Это связано с тем, что функция возвращает значение, которое находится между 0 и 1. Поскольку шаг обратного распространения ошибки зависит от дифференцируемости функции активации, сигмоидальная функция является отличным вариантом. Наконец, производная функции может быть выражена через саму функцию.
Как реализовать сигмовидную функцию в Python с помощью numpy
Хотя numpy не предоставляет встроенной функции для расчета сигмоидной функции, он упрощает разработку пользовательской функции для достижения этой цели. Давайте посмотрим, как мы можем это сделать:
# Разработка функции сигмоид в NumPy
import numpy as np
def sigmoid(x):
# Функция сигмоид: f(x) = 1.0 / (1.0 + exp(-x))
return 1.0 / (1.0 + np.exp(-x))
В приведенной выше функции мы использовали функцию numpy.exp()
, которая возводит e
в степень отрицательного аргумента.
Давайте посмотрим, как мы можем использовать функцию, передав значение 0,5:
# Проверка нашей функции сигмоид
import numpy as np
def sigmoid(x):
# Функция сигмоид: f(x) = 1.0 / (1.0 + exp(-x))
return 1.0 / (1.0 + np.exp(-x))
print(sigmoid(0.5)) # Вычисление значения функции сигмоид для x = 0,5
# Возвращает:
# 0.6224593312018546
Аналогично, во многих моделях глубокого обучения вы встретите функцию, записанную в виде анонимной лямбда-функции. Давайте посмотрим, как можно преобразовать указанную выше функцию в лямбда
# Разработка сигмоидной функции в numpy как лямбда-функция
import numpy
sigmoid = lambda x: 1.0 / (1.0 + numpy.exp(-x))
В некоторых учебных материалах вы увидите реализацию с использованием библиотеки math
. Однако я не рекомендую этот подход по следующим двум причинам:
Функция
math.exp()
приведет к значениям NaN при очень низких отрицательных значениях.Вы, вероятно, все равно будете импортировать NumPy, поэтому использование NumPy может привести к уменьшению числа импортов
В следующем разделе вы научитесь реализовывать функцию сигмоида на Python с помощью scipy
Как реализовать сигмовидную функцию в Python с помощью scipy
При использовании библиотеки scipy у вас есть два варианта реализации логистической функции сигмоиды:
scipy.stats.logistic()
scipy.special.expit()
Первый из них на самом деле является оболочкой для второго, что может привести к более медленной реализации.
Давайте посмотрим, как мы можем реализовать функцию с использованием scipy:
# Использование scipy для реализации сигмоидной функции
from scipy.special import expit
print(expit(0.5))
Как применить сигмовидную функцию к массивам numpy
Часто вам может потребоваться применить сигмоидальную функцию к нескольким значениям. В большинстве случаев эти значения будут сохранены в массивах numpy. К счастью, благодаря особенностям реализации массивов numpy, это делается довольно просто. Давайте посмотрим, как это делается:
# Применение функции сигмоид к NumPy-массивам
import numpy as np
def sigmoid(x):
# Функция сигмоид: f(x) = 1.0 / (1.0 + exp(-x))
return 1.0 / (1.0 + np.exp(-x))
arr = np.array([-2, -1.5, -1, 0, 1, 1.5, 2]) # NumPy-массив чисел
print(sigmoid(arr)) # Применение функции сигмоид к элементам массива
# Возвращает:
# [0.11920292 0.18242552 0.26894142 0.5 0.73105858 0.81757448 0.88079708]
Как применить сигмовидную функцию к спискам Python
В некоторых случаях вам также может потребовать применить функцию к списку. Из-за способа реализации функции ее необходимо применять к каждому значению. Самый простой способ сделать это - использовать понимание списка, которое позволяет нам перебирать каждый элемент и применять к нему функцию, как показано ниже:
# Применение функции сигмоид к списку значений
import numpy as np
def sigmoid(x):
# Функция сигмоид: f(x) = 1.0 / (1.0 + exp(-x))
return 1.0 / (1.0 + np.exp(-x))
values = [-2, -1.5, -1, 0, 1, 1.5, 2] # Список чисел
print([sigmoid(value) for value in values]) # Применение функции сигмоид к каждому значению списка
# Возвращает:
# [0.11920292 0.18242552 0.26894142 0.5 0.73105858 0.81757448 0.88079708]
Как построить сигмовидную функцию в Python с помощью Matplotlib
В этом разделе мы рассмотрим, как построить сигмоидную функцию в Python с помощью Matplotlib. Умение строить график функции - отличный способ понять, как функция работает и почему она так хорошо подходит для глубокого обучения.
Давайте сначала реализуем код, а затем рассмотрим, как мы достигли желаемого:
# График функции сигмоид в Python с помощью Matplotlib
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
# Функция сигмоид: f(x) = 1.0 / (1.0 + exp(-x))
return 1.0 / (1.0 + np.exp(-x))
values = np.arange(-10, 10, 0.1) # Создание набора значений x с шагом 0,1
plt.plot(values, sigmoid(values)) # Рисование графика функции сигмоид
plt.xlabel('x') # Задание метки оси X
plt.ylabel('sigmoid(x)') # Задание метки оси Y
plt.title('Функция сигмоид в Matplotlib') # Задание заголовка графика
plt.show() # Показывание графика
Это приводит к следующему изображению:

Заключение
В этом учебнике вы узнали, как реализовать сигмоидную функцию на Python. Сначала вы познакомились с самой функцией и узнали о ее связи с глубоким обучением. Затем вы научились реализовывать функцию с использованием как numpy, так и scipy. После этого вы узнали, как применять функцию к массивам numpy и спискам Python. Наконец, вы научились строить график функции с помощью Matplotlib.
Дополнительные ресурсы
Чтобы узнать больше о связанных темах, ознакомьтесь с нижеприведенными учебными пособиями:
Введение в машинное обучение в Python
Метод опорных векторов (SVM) в Python с помощью Sklearn
Линейная регрессия в Scikit-Learn (sklearn): Введение
Классификатор дерева решений с помощью Sklearn на Python
Last updated