Реализация функции сигмоида на 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. Однако я не рекомендую этот подход по следующим двум причинам:

  1. Функция math.exp() приведет к значениям NaN при очень низких отрицательных значениях.

  2. Вы, вероятно, все равно будете импортировать NumPy, поэтому использование NumPy может привести к уменьшению числа импортов

В следующем разделе вы научитесь реализовывать функцию сигмоида на Python с помощью scipy

Как реализовать сигмовидную функцию в Python с помощью scipy

При использовании библиотеки scipy у вас есть два варианта реализации логистической функции сигмоиды:

  1. scipy.stats.logistic()

  2. 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