Часть 1: Введение

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

Цель функции активации — внести нелинейность в выходной сигнал нейрона. Вот пример, демонстрирующий необходимость функции активации.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense
from mlxtend.plotting import plot_decision_regions

# Generate a a sample dataset for binary classification
X, y = make_classification(n_features=2, n_redundant=0, n_informative=2)

# Scale the features
scaler = MinMaxScaler()
X = scaler.fit_transform(X)

# Train a neural network model without an activation function:
model_linear = Sequential()
model_linear.add(Dense(3, activation=None, input_dim=2))
model_linear.add(Dense(1, activation='linear'))
model_linear.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model_linear.fit(X, y, epochs=50, verbose=0)

# Train a neural network model with a non-linear activation function
model_nonlinear = Sequential()
model_nonlinear.add(Dense(3, activation='relu', input_dim=2))
model_nonlinear.add(Dense(1, activation='sigmoid'))
model_nonlinear.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model_nonlinear.fit(X, y, epochs=50, verbose=0)

# Plot the decision regions of the two models
fig, ax = plt.subplots(1, 2, figsize=(12, 4))
plot_decision_regions(X, y, clf=model_linear, ax=ax[0])
ax[0].set_title('Linear Model')
plot_decision_regions(X, y, clf=model_nonlinear, ax=ax[1])
ax[1].set_title('Non-Linear Model')
plt.show()

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

Примечание: активация=Нет или активация=’линейная’ означают одно и то же: применение функции линейной активации к выходным данным слоя. Функция линейной активации просто возвращает входные данные в качестве выходных и не вносит никакой нелинейности.

Характеристики хороших функций активации в нейронной сети:

  1. Нелинейность. Хорошие функции активации должны быть способны вводить нелинейность в модель, позволяя ей фиксировать сложные взаимосвязи между входными и выходными данными. Например, функции сигмовидной, tanh и ReLU являются нелинейными и широко используются в глубоком обучении.
  2. Плавность: функции активации должны быть плавными и непрерывными, без резких скачков и всплесков. Это помогает модели сходиться во время обучения и снижает риск переобучения. Например, сигмовидная и танх-функции являются гладкими и широко используются в глубоком обучении. Сигмовидная функция имеет плавную, непрерывную кривую, без резких скачков и всплесков. Напротив, ступенчатая функция не является функцией плавной активации и имеет внезапные скачки, что может привести к более медленной сходимости модели во время обучения или застреванию в локальных минимумах.
  3. Вычислительная эффективность: функции активации должны быть эффективными в вычислительном отношении, то есть они не должны требовать большого количества вычислений для получения результата. Например, функцию активации ReLU (выпрямленная линейная единица) вычислить очень просто. Он просто включает в себя применение к входным данным простой пороговой функции, а именно: def relu(x): return max(0, x). Это делает функцию активации ReLU очень быстрой и эффективной в вычислительном отношении, и она широко используется в моделях глубокого обучения. Напротив, другие функции активации, такие как сигмовидная или танх-функции, требуют более интенсивных вычислений, поскольку включают в себя более сложные математические операции. Хотя эти функции по-прежнему можно использовать в моделях глубокого обучения, они могут потребовать больше вычислительных ресурсов и замедлить процесс обучения.
  4. Дифференцируемость: функции активации должны быть дифференцируемыми, чтобы можно было рассчитать градиенты для обратного распространения ошибки.
  5. Насыщающее поведение: функции активации не должны иметь насыщающего поведения. Насыщение — это когда функция активации насыщается или застревает на определенном значении, что означает, что ее градиент становится очень маленьким или равен нулю. Это может привести к исчезновению градиентов и замедлить процесс обучения, поскольку градиенты, используемые при обратном распространении ошибки, становятся очень маленькими. Например, в сигмовидной функции активации выходной сигнал насыщается до 0, когда входной сигнал становится все более отрицательным, и насыщается до 1, когда входной сигнал становится все более положительным. Аналогично, в функции гиперболического тангенса выходной сигнал насыщается до -1, когда входной сигнал становится все более отрицательным, и насыщается до 1, когда входной сигнал становится все более положительным.
  6. Центрирование по нулю: выходные данные функции активации должны быть симметричны в нуле, чтобы градиенты не смещались в определенном направлении. Примером функции активации с центром в нуле является функция гиперболического тангенса (tanh). Функция tanh сопоставляет свои входные данные с выходными данными, центрированными вокруг нуля и имеющими диапазон от -1 до 1. Это означает, что ее выходные данные симметричны относительно нуля и, таким образом, помогают предотвратить смещение градиентов в одном направлении. существуют функции активации, не имеющие нулевого центра. Например, функция активации выпрямленной линейной единицы (ReLU), которая обычно используется в сетях глубокого обучения, имеет выходные данные, которые либо равны нулю, либо положительны. Это означает, что функция активации ReLU не симметрична в нуле и градиенты могут смещаться в положительном направлении. Если градиенты смещаются в положительную сторону, это означает, что процесс оптимизации смещается в сторону положительных весов. Функция ReLU определяется как f(x) = max(0, x), которая выводит 0 для всех отрицательных входных данных и x для всех положительных входных данных. График функции ReLU не симметричен относительно нулевой точки, поэтому он не центрирован по нулю.

Заключительное примечание: Спасибо за чтение! Надеюсь, вы найдете эту статью информативной.

Сохраняйте любопытство и поддерживайте активность нейронов! А если вы жаждете дополнительных знаний, обязательно ознакомьтесь с моим предстоящим продолжением: Разоблачение функций активации | Часть 2: Классификация функций активации»

До новых встреч, приятного обучения!