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

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

К концу этого обучающего руководства вы научитесь:

  • Что такое сигмовидная функция и почему она используется в глубоком обучении

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

  • Как построить сигмовидную функцию в Python с помощью Matplotlib и Seaborn

  • Как применить сигмовидную функцию к массивам numpy и спискам Python

Оглавление

Что такое сигмовидная функция?

Сигмоидная функция - это функция, имеющая "S"-образную кривую, также известную как сигмоидная кривая. Наиболее известным примером является логистическая функция, которая вычисляется по следующей формуле:

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

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

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

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

# Developing the Sigmoid Function in numpy
import numpy as np

def sigmoid(x):
    return 1.0 / (1.0 + np.exp(-x))

В приведенной выше функции мы использовали функцию numpy.exp(), которая возводит e в степень отрицательного аргумента.

Давайте посмотрим, как мы можем использовать функцию, передав значение 0,5:

# Testing Out Our Sigmoid Function
import numpy as np

def sigmoid(x):
    return 1.0 / (1.0 + np.exp(-x))
print(sigmoid(0.5))

# Returns: 0.6224593312018546

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

# Developing the Sigmoid Function in numpy as a Lambda Function
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:

# Using scipy to Implement the Sigmoid Function
from scipy.special import expit
print(expit(0.5))

# Returns: 0.6224593312018546

Как применить сигмовидную функцию к массивам numpy

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

# Applying the Sigmoid Function to numpy Arrays
import numpy as np

def sigmoid(x):
    return 1.0 / (1.0 + np.exp(-x))

arr = np.array([-2, -1.5, -1, 0, 1, 1.5, 2])

print(sigmoid(arr))

# Returns: [0.11920292 0.18242552 0.26894142 0.5 0.73105858 0.81757448 0.88079708]

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

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

# Applying the Sigmoid Function to a List of Values
import numpy as np

def sigmoid(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])

# Returns: [0.11920292 0.18242552 0.26894142 0.5 0.73105858 0.81757448 0.88079708]

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

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

Давайте сначала реализуем код, а затем рассмотрим, как мы достигли желаемого:

# Plotting the Sigmoid Function in Python with Matplotlib
import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1.0 / (1.0 + np.exp(-x))

values = np.arange(-10, 10, 0.1)

plt.plot(values, sigmoid(values))
plt.xlabel('x')
plt.ylabel('sigmoid(x)')
plt.title('Sigmoid Function in Matplotlib')
plt.show()

Это приводит к следующему изображению:

Заключение

В этом учебнике вы узнали, как реализовать сигмоидную функцию на Python. Сначала вы познакомились с самой функцией и узнали о ее связи с глубоким обучением. Затем вы научились реализовывать функцию с использованием как numpy, так и scipy. После этого вы узнали, как применять функцию к массивам numpy и спискам Python. Наконец, вы научились строить график функции с помощью Matplotlib.

Дополнительные ресурсы

Чтобы узнать больше о связанных темах, ознакомьтесь с нижеприведенными учебными пособиями:

  • Введение в машинное обучение в Python

  • Support Vector Machines (SVM) in Python with Sklearn

  • Linear Regression in Scikit-Learn (sklearn): An Introduction

  • Decision Tree Classifier with Sklearn in Python

Last updated