Мы используем файлы cookie на этом сайте, чтобы улучшить ваш пользовательский опыт.
Пожалуйста, ознакомьтесь с Политикой конфиденциальности для получения более подробной информации.

AI
ML/DL
AI platform
Свёрточная нейронная сеть с нуля. Слой активации
01.10.2024

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

 

Зачем нужны слои активации?

 

Нейронные сети по сути своей являются обыкновенными функциями, содержащими огромное число параметров, однако выполняющие довольно простые операции. Если рассматривать нейронные сети прямого распространения, то можно заметить, что операции, выполняемые каждым слоем, являются обыкновенными линейными преобразованиями, а потому могут быть без труда заменены на одну большую матрицу. Такие преобразования не способны апроксимировать произвольную функцию с заданной точностью, а потому необходимо вносить нелинейности на каждом слое. Поэтому после полносвязного (и, обычно, после любого другого обучаемого) слоя всегда ставится слой активации. Из-за подобных изменений уже нельзя заменить все матрицы слоёв на одну матрицу, выполняющую эквивалентное преобразование. Это позволяет создавать необычайно сложные преобразования входных данных в выходные, затрачивая при этом минимальное число усилий.

 

Что такое слои активации?

 

Слой активации — это слой, который применяет некоторую (обычно) несложную функцию к каждой точке входного тензора. Существуют также функции активации, которые зависят от всех значений сразу (например, softmax), но суть остаётся той же: значения входного тензора преобразуются в выходные значения с помощью некоторой функции.

 

Какие бывают виды функций активации?

 

Функций активации существует довольно много. Наиболее известными являются сигмоидальная (sigmoid), гиперболический тангенс (tanh), выпрямитель (ReLU) и функция мягкого максимума (softmax). Также нередко встречаются такие функции активации, как LeakyReLU, ELU, parametric ReLU, SoftSign и другие. Важной особенностью функций активации является их дифференцируемость (хотя для некоторых функций это выполняется не всегда), поскольку при обратном распространении ошибки необходимо вычислять градиенты, использующие производную функции активации. В приведённом ниже списке можно сравнить различные функции активации:

 

  • Sigmoid:

 

Функция:
Производная:
Область значений:      (0, 1)

 

Графики функции и производной:

  • Tanh
Функция:
Производная:
Область значений:       (-1, 1)

 

Графики функции и производной:

  • ReLU
Функция: x, x > 0

0, x ≤ 0

Производная: x, x > 0

0, x ≤ 0

Область значений: [0, +∞)

 

Графики функции и производной:

  • Leaky ReLU
Функция: x, x > 0

αx, x ≤ 0

Производная: 1, x > 0

α, x ≤ 0

Область значений: (-∞, +∞)

 

Графики функции и производной:

 

  • ELU

 

Функция: x, x > 0

α(ex – 1), x ≤ 0

Производная: 1, x > 0

αex, x ≤ 0

Область значений: [-α, +∞)

 

Графики функции и производной:

  • Softplus
Функция: ln(1 + ex)
Производная:
Область значений:   (0, +∞)

 

Графики функции и производной:

  • Softsign
Функция:
Производная:
Область значений:      (-1, 1)

 

Графики функции и производной:

Как выбрать функцию активации?

 

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

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

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

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