Когда что использовать? И несколько известных проблем.

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

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



В предыдущей статье я в основном упоминал:

функция активации, как это звучит, действует как (нелинейный) активатор нейрона / единицы на следующем сетевом уровне (после учета смещения и весовых коэффициентов).

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

Это гарантирует, что NN не просто выводит линейную комбинацию своих входов. Разве это не была бы просто модель линейной регрессии? :-)

Типы активаций

Типов активационных функций действительно много, таких как:

  • Линейный: Двоичный шаг, Линейный - я не говорю об этом здесь!
  • Нелинейные: сигмовидная, Tanh (гиперболическая касательная), ReLU (выпрямленная линейная единица) и ее варианты ( Leaky, Parametrized), ELU (экспоненциальные линейные единицы), Softmax, Swish, и H-Swish.

Что касается сверточных нейронных сетей (CNN) как примера глубоких нейронных сетей, три наиболее важные функции активации: Sigmoid, ReLU и Softmax .

Сигмовидная

Активация сигмоида используется для масштабирования выходного сигнала от 0 до 1.

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

Напротив, softmax (см. Ниже) требует, чтобы входные данные / наблюдения принадлежали только одному классу.

Закодированное определение активации сигмовидной кишки выглядит так:

Использование: конечный выходной слой.
Недостатки: большие вычислительные ресурсы; некоторые утверждают, что это вызывает проблемы с градиентами, такие как неправильное формирование и исчезающие градиенты.

Ниже я изображаю эту и другие активации рядом.

ReLU

Функция активации ReLU (Rectified Linear Unit) определяется как равная нулю для отрицательного входа и равная входу в противном случае (т. Е. Для нулевого или положительного входа).

Написание этой активации с нуля может выглядеть так:

Проблема в том, что ReLU возвращает ноль для любого отрицательного входного сигнала, что может привести к прекращению / зависанию активации ReLU в процессе обучения (обратное распространение).

В результате градиенты активации равны нулю. Таким образом, единицы, связанные с этой активацией, никогда не будут обновлять свои параметры (смещения и веса).

Использование: как правило, скрытые слои.
Недостатки: не с нулевым центром; может взорваться (стать бесконечным)

Следовательно, мы хотим ослабить это строгое правило нулевого выхода. Именно это и делает активация LeakyReLU.

Дырявый ReLU

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

И пример того, как запрограммировать эту функцию:

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

Ниже я изображаю эту и другие активации рядом.

Использование: обычно скрытых слоев.
Недостатки: может взорваться (стать бесконечным)

Теперь давайте перейдем к третьей по важности функции активации в моем списке.

Софтмакс

Активация softmax - это что-то вроде комбинации нескольких сигмовидных функций.

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

Итак, вот разница с Sigmoid: первый позволяет входным данным / наблюдениям принадлежать многим классам.

Я бы закодировал определение этой функции следующим образом:

Эта активация может быть размещена на последнем уровне сверточной нейронной сети (CNN) для классификации классов рукописных цифр (от 0 до 9). Каждое входное изображение можно идентифицировать только как один класс, поэтому общая сумма выходных данных равна единице. Например, цифра 9 может быть идентифицирована как 9 с вероятностью 95%, в то время как 5% переходит к цифре 8, поэтому сумма выходных данных равна 95%+5%=100%=1.

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

Мы можем сравнить вышеупомянутые функции активации на одном рисунке:

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

Проблема взрывающихся градиентов

Распространенная проблема в глубоком обучении.

Многие функции активации (то есть оба случая ReLU и Leaky ReLU) могут доходить до бесконечности и взрывать узел нейронной сети.

Это очень расстраивает. Особенно после часов / дней тренировок огромная потрясающая глубокая сеть. Внезапно некоторые узлы взрываются и теряют весь прогресс!

Конечно, мы этого не хотим.

Решение

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

Это также помогает преодолеть проблему переобучения в качестве приятного бонуса.

Я недавно описал эту технику здесь:



На этом мы завершаем эту статью.

Резюме

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

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

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

Конечно, этот вопрос имеет большее значение, поскольку я не описал все существующие активации.

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

Если вас что-то интересует, я предлагаю просто углубиться в вопрос. Ведь все начинается с любопытства.

Спасибо, что дочитали до конца.

И последнее, но не менее важное: если вы обнаружили какую-либо ошибку, у вас есть вопрос или комментарий, не стесняйтесь обращаться ко мне. Подключаемся: LinkedIn.

P.S .: Если вам нравится непрерывное чтение на этой прекрасной платформе Medium.com, подумайте о поддержке авторов этого сообщества, подписавшись на членство ЗДЕСЬ. Это стоит всего 5 долларов в месяц и поддерживает всех авторов.