Функции активации в нейронных сетях

Активационные функции в нейронных сетях

Введение

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

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

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

Цели обучения

  1. Понять роль и изменение функций активации в нейронных сетях.
  2. Изучить часто используемые функции активации и их плюсы и минусы.
  3. Определить ситуации для конкретных функций активации и их влияние на градиентный поток.

Эта статья была опубликована в рамках Блогона Дата Сайенс.

Что такое функция активации?

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

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

Чтобы глубже погрузиться в это важное понятие, изучите некоторые стандартные функции активации и их особенности. Функция активации также играет важную роль в нормализации выхода каждого нейрона, ограничивая его в определенном диапазоне, обычно между 0 и 1 или между -1 и 1.

В нейронной сети входы подаются на нейроны внутри входного слоя. Каждому нейрону присваивается вес, и вывод нейрона рассчитывается путем умножения входного сигнала на его соответствующий вес. Этот вывод затем передается на следующий слой.

Функция активации представляет собой математическую “ворота” между входом, поступающим в текущий нейрон, и выводом, передаваемым следующему слою. Она может быть настолько простой, как ступенчатая функция, эффективно переключающая вывод нейрона вкл/выкл на основе определенного правила или порога.

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

Узнайте больше: Функции активации | Основы глубокого обучения

Часто используемые функции активации

  • Сигмоидная функция
  • Тангенс гиперболический функция
  • ReLU функция
  • Leaky ReLU функция
  • ELU (Exponential Linear Units) функция

Сигмоидная функция

Формула и график сигмоидной функции следующие:

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

Сигмоидная функция показывает, что ее вывод находится в открытом интервале (0,1). Мы можем рассматривать ее как вероятность, но в строгом смысле не следует относить к ней как к вероятности. Сигмоидная функция ранее была более широко распространена. Ее можно представить как скорость срабатывания нейрона. В середине, где наклон относительно большой, находится чувствительная зона нейрона. Ингибирующая зона нейрона находится по бокам, с плавным наклоном.

Думайте о сигмоидной функции как о способе описания активности или “подпитке” нейрона в нейронной сети. Представьте, что у вас есть нейрон, как выключатель, в вашей сети.

  • Когда вывод сигмоидной функции близок к 1, вы можете представить, что нейрон является очень чувствительным, как будто готов реагировать сильно на входные данные.
  • В середине, где наклон крутой, это место, где нейрон наиболее чувствителен. Если вы немного измените входные данные, вывод нейрона изменится значительно.
  • На боках, где наклон плавный, это похоже на ингибирующую зону нейрона. Здесь даже если вы немного измените входные данные, нейрон не реагирует сильно. Он не очень чувствителен в этих областях.

Сама функция имеет некоторые недостатки.

  1. Когда входное значение немного отходит от начала координат, градиент функции становится очень маленьким, почти равным нулю.
  • Почему значения нулевые или незначительные?
  • Вывод сигмоидной функции находится в интервале 0 или 1. Формула сигмоидной функции – F(x) = 1 / (1 + e^-z), поэтому мы ставим значение z = 0 или 1. (1 + e^-z) всегда больше. но это выражение находится в знаменателе, поэтому общий расчет очень маленький.
  • Таким образом, значения функции градиента очень малы или почти равны нулю.
  • В обратном распространении в нейронной сети мы полагаемся на правило последовательных дифференцирований для вычисления градиентов каждого веса (w). Однако, когда обратное распространение проходит через сигмоидную функцию, градиент в этой цепи может стать экстремально маленьким. Более того, если это происходит в нескольких слоях с сигмоидными функциями, это может привести к тому, что вес (w) оказывает минимальное влияние на функцию потерь. Эта ситуация не является благоприятной для оптимизации веса и часто называется “градиентным затуханием” или “градиентным исчезновением”.
  • Рассмотрим слой…

2. Вывод функции смещен не к нулю, что может ухудшить эффективность обновления веса.

3. Сигмоидная функция включает в себя экспоненциальные операции, которые могут быть вычислительно более медленными для компьютеров.

Преимущества и недостатки сигмоидной функции

Гиперболическая тангенс-функция

Формула и график гиперболической тангенс-функции следующие:

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

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

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

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

Преимущества и недостатки гиперболической тангенс-функции

Функция ReLU

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

Функция ReLU, сокращение от Rectified Linear Unit, является относительно новой и очень влиятельной функцией активации в глубоком обучении. В отличие от некоторых других функций активации, ReLU чрезвычайно проста. Она просто выводит максимальное значение между нулем и своим входным значением. Несмотря на то, что у ReLU отсутствует полная дифференцируемость, мы можем использовать подход субградиента для обработки ее производной, как показано на рисунке выше.

ReLU получила широкую популярность в последние годы, и это неспроста. Она выделяется по сравнению с традиционными функциями активации, такими как сигмоидная и гиперболический тангенс.

Преимущества и недостатки функции ReLU

Функция Leaky ReLU

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

Чтобы решить проблему “мёртвых” нейронов ReLU, исследователи предложили несколько решений. Одним интуитивным подходом является установка первой половины ReLU в качестве малого положительного значения, например, 0,01x, вместо строгого нуля. Другой метод, называемый параметрическим ReLU, вводит обучаемый параметр alpha. Функция параметрического ReLU имеет вид f(x) = max(alpha * x, x). С помощью обратного распространения ошибки сеть может определить оптимальное значение alpha (для выбора значения alpha выберите наименьшее значение).

В теории Leaky ReLU предлагает все преимущества ReLU, устранив проблемы, связанные с “мёртвыми” нейронами. Leaky ReLU позволяет иметь малый, ненулевой градиент для отрицательных значений, предотвращая “отключение” нейронов. Однако, является ли Leaky ReLU более эффективным, чем ReLU, зависит от конкретной задачи и архитектуры. Здесь нет универсального ответа, и выбор между ReLU и ее вариантами часто требует эмпирического тестирования и настройки.

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

Преимущества и недостатки функции Leaky ReLU

Функция ELU (Exponential Linear Units)

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

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

Преимущества и недостатки функции ELU

Обучение нейронных сетей с помощью функций активации

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

Влияние функций активации на обучение:

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

Затухающие градиенты:

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

Борьба со затухающими градиентами:

  • Rectified Linear Unit (ReLU) и его варианты, такие как Leaky ReLU, решают проблему затухающих градиентов, предоставляя ненулевой градиент для положительных значений.
  • Функции ReLU обеспечивают более быструю сходимость в силу отсутствия затухающих градиентов при положительных значениях.

Роль активационных функций с нулевым центром:

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

Адаптивный выбор активационных функций:

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

Практические примеры

Использование TensorFlow и Keras

import tensorflow as tffrom tensorflow.keras.layers import Densefrom tensorflow.keras.models import Sequential# Пример данныхx = [[-1.0, 0.0, 1.0], [-2.0, 2.0, 3.0]]# Активация с сигмоидойmodel_sigmoid = Sequential([Dense(3, activation='sigmoid', input_shape=(3,))])output_sigmoid = model_sigmoid.predict(x)# Активация с тангенсомmodel_tanh = Sequential([Dense(3, activation='tanh', input_shape=(3,))])output_tanh = model_tanh.predict(x)# Активация с ReLUmodel_relu = Sequential([Dense(3, activation='relu', input_shape=(3,))])output_relu = model_relu.predict(x)# Активация с Leaky ReLUmodel_leaky_relu = Sequential([Dense(3, activation=tf.nn.leaky_relu, input_shape=(3,))])output_leaky_relu = model_leaky_relu.predict(x)# Активация с ELUmodel_elu = Sequential([Dense(3, activation='elu', input_shape=(3,))])output_elu = model_elu.predict(x)print("Вывод с сигмоидой:\n", output_sigmoid)print("Вывод с тангенсом:\n", output_tanh)print("Вывод с ReLU:\n", output_relu)print("Вывод с Leaky ReLU:\n", output_leaky_relu)print("Вывод с ELU:\n", output_elu)#import csv

Использование PyTorch

import torchimport torch.nn as nn# Пример данныхx = torch.tensor([[-1.0, 0.0, 1.0], [-2.0, 2.0, 3.0]], dtype=torch.float32)# Активация с сигмоидойsigmoid = nn.Sigmoid()output_sigmoid = sigmoid(x)# Активация с тангенсомtanh = nn.Tanh()output_tanh = tanh(x)# Активация с ReLUrelu = nn.ReLU()output_relu = relu(x)# Активация с Leaky ReLUleaky_relu = nn.LeakyReLU(negative_slope=0.01)output_leaky_relu = leaky_relu(x)# Активация с ELUelu = nn.ELU()output_elu = elu(x)print("Вывод с сигмоидой:\n", output_sigmoid)print("Вывод с тангенсом:\n", output_tanh)print("Вывод с ReLU:\n", output_relu)print("Вывод с Leaky ReLU:\n", output_leaky_relu)print("Вывод с ELU:\n", output_elu)

Вот результаты примеров кода с использованием различных активационных функций:

Вывод с сигмоидой:

Вывод с сигмоидой: [[0.26894143  0.5        0.7310586 ] [ 0.11920292  0.8807971  0.95257413]]

Вывод с тангенсом:

Вывод с тангенсом: [[-0.7615942  0.         0.7615942] [-0.9640276   0.9640276  0.9950547]]

Вывод с ReLU:

Вывод с ReLU: [[0. 2. 3.] [ 0. 2. 3.]]

Вывод с Leaky ReLU:

Вывод с Leaky ReLU: [[-0.01  0.    1.  ] [-0.02   2.    3.  ]]

Вывод с ELU:

Вывод с ELU: [[-0.63212055   0.   1. ] [-1.2642411     2.   3. ]]

Заключение

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

Основные выводы:

  • Функции активации являются основополагающим элементом нейронных сетей, преобразующим входные сигналы и позволяющим учить сложные взаимосвязи в данных.
  • Распространенные функции активации включают сигмоиду, тангенс гиперболический, ReLU, утечкающую ReLU и ELU, каждая из которых имеет уникальные характеристики и области применения.
  • Понимание преимуществ и недостатков функций активации помогает выбирать подходящую функцию для конкретных задач нейронных сетей.
  • Функции активации являются важным компонентом для решения проблем с градиентами, такими как затухание градиента, во время обратного распространения ошибки.

Часто задаваемые вопросы (ЧЗВ)

Показанные в этой статье материалы не принадлежат Analytics Vidhya и используются по усмотрению автора.