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

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

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

* Что такое сигмовидная функция и почему она используется в глубоком обучении
* Как реализовать сигмовидную функцию в Python с помощью numpy и scipy
* Как построить сигмовидную функцию в Python с помощью Matplotlib и Seaborn
* Как применить сигмовидную функцию к массивам numpy и спискам Python

Оглавление

* [Что такое сигмовидная функция](#chto-takoe-sigmovidnaya-funkciya)?
* [Как реализовать сигмовидную функцию в Python с помощью numpy](#kak-realizovat-sigmovidnuyu-funkciyu-v-python-s-pomoshyu-numpy)
* [Как реализовать сигмовидную функцию в Python с помощью scipy](#kak-realizovat-sigmovidnuyu-funkciyu-v-python-s-pomoshyu-scipy)
* [Как применить сигмовидную функцию к массивам numpy](#kak-primenit-sigmovidnuyu-funkciyu-k-massivam-numpy)
* [Как применить сигмовидную функцию к спискам Python](#kak-primenit-sigmovidnuyu-funkciyu-k-spiskam-python)
* [Как построить сигмовидную функцию в Python с помощью Matplotlib](#kak-postroit-sigmovidnuyu-funkciyu-v-python-s-pomoshyu-matplotlib)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

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

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

<figure><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/faaa0c014ae28ac67db5c49b3f3e8b08415a3f2b" alt="{\displaystyle f(x)={\frac {1}{1+e^{-x}}}}" height="89" width="258"><figcaption><p>Формула логистической сигмовидной функции</p></figcaption></figure>

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

<figure><img src="https://datagy.io/wp-content/uploads/2022/04/How-Plot-the-Sigmoid-Function-in-Python.png" alt="How Plot the Sigmoid Function in Python" height="480" width="640"><figcaption><p>Как выглядит сигмовидная функция</p></figcaption></figure>

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

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

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

```python
# Разработка функции сигмоид в 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()`](https://bemind.gitbook.io/neural/uchebniki-po-pandas-i-numpy/numpy/ispolzovanie-funkcii-numpy.exp-dlya-vychisleniya-eksponenty), которая возводит `e` в степень отрицательного аргумента.

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

```python
# Проверка нашей функции сигмоид
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
```

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

```python
# Разработка сигмоидной функции в 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:

```python
# Использование scipy для реализации сигмоидной функции
from scipy.special import expit
print(expit(0.5))
```

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

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

```python
# Применение функции сигмоид к 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

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

```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
# График функции сигмоид в 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() # Показывание графика
```

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

<figure><img src="https://datagy.io/wp-content/uploads/2022/04/How-Plot-the-Sigmoid-Function-in-Python.png" alt="How Plot the Sigmoid Function in Python" height="480" width="640"><figcaption><p>Построение сигмовидной функции в Python с помощью Matplotlib</p></figcaption></figure>

### Заключение

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

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

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

* Введение в машинное обучение в Python
* Метод опорных векторов (SVM) в Python с помощью Sklearn
* Линейная регрессия в Scikit-Learn (sklearn): Введение
* Классификатор дерева решений с помощью Sklearn на Python
