Нейронные сети: функции активации

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

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

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

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

Попробуйте пошагово выполнить вычисления для каждого узла, нажав кнопку >| (справа от кнопки воспроизведения). Просмотрите математические операции, выполненные для вычисления значения каждого узла, на панели «Вычисления» под графиком. Обратите внимание, что выход каждого узла теперь представляет собой сигмоидное преобразование линейной комбинации узлов предыдущего слоя, а выходные значения сжаты в диапазоне от 0 до 1.

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

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

Общие функции активации

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

Сигмоидная функция (описанная выше) выполняет следующее преобразование входного значения $x$, в результате чего получается выходное значение от 0 до 1:

\[F(x)=\frac{1} {1+e^{-x}}\]

Вот график этой функции:

Рисунок 4. График сигмоидной функции: S-образная кривая, которая асимптотически приближается к оси x при стремлении x к отрицательной  бесконечности и к 1 при стремлении x к бесконечности.
Рисунок 4. График сигмоидной функции.

Функция tanh (сокращение от «гиперболический тангенс») преобразует входное значение $x$, получая на выходе значение от –1 до 1:

\[F(x)=tanh(x)\]

Вот график этой функции:

Рисунок 5. График функции tanh: слегка более крутая S-образная кривая, чем у сигмоидной функции, которая асимптотически стремится к –1 при x, стремящемся к отрицательной бесконечности, и к 1 при x, стремящемся к бесконечности.
Рисунок 5. График функции tanh.

Функция активации выпрямленного линейного блока (или сокращенно ReLU ) преобразует выходные данные с помощью следующего алгоритма:

  • Если входное значение $x$ меньше 0, вернуть 0.
  • Если входное значение $x$ больше или равно 0, верните это входное значение.

Функция активации ReLU может быть представлена ​​математически с помощью функции max():

$$F(x)=max(0,x)$$

Вот график этой функции:

Рисунок 6. График функции ReLU: горизонтальная линия вдоль оси x от минус бесконечности до 0, которая переходит в диагональную линию идущую вверх и вправо с наклоном 1 (y=x) от 0 до бесконечности.
Рисунок 6. График функции ReLU.

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

Другие функции активации

На практике любая математическая функция может служить функцией активации. Предположим, что \(\sigma\) представляет собой нашу функцию активации. Значение узла в сети определяется следующей формулой:

$$\sigma(\boldsymbol w \cdot \boldsymbol x+b)$$

Keras обеспечивает встроенную поддержку многих функций активации . Тем не менее, мы по-прежнему рекомендуем начать с ReLU.

Краткое содержание

В следующем видеоролике кратко изложен весь материал, который вы изучили до сих пор о построении нейронных сетей:

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

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

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