Почему нелинейная функция активации должна использоваться в нейронной сети backpropagation?

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

за этим вопросом следует следующий:что производная от функции активации используемой для в backpropagation?

8 ответов


назначение функции активации ввести нелинейность в сети

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

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

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

>>> in_vec = NP.random.rand(10)
>>> in_vec
  array([ 0.94,  0.61,  0.65,  0.  ,  0.77,  0.99,  0.35,  0.81,  0.46,  0.59])

>>> # common activation function, hyperbolic tangent
>>> out_vec = NP.tanh(in_vec)
>>> out_vec
 array([ 0.74,  0.54,  0.57,  0.  ,  0.65,  0.76,  0.34,  0.67,  0.43,  0.53])

общая функция активации, используемая в backprop (гиперболический тангенс), которые оцениваются от -2 до 2:

enter image description here


линейную функцию активации можно использовать, однако в очень ограниченных случаях. На самом деле, чтобы лучше понять функции активации, важно взглянуть на обычный наименьший квадрат или просто линейную регрессию. Линейная регрессия направлена на поиск оптимальных Весов, которые приводят к минимальному вертикальному эффекту между объясняющими и целевыми переменными в сочетании с входными данными. Короче говоря, если ожидаемый результат отражает линейную регрессию, как показано ниже, то линейная активация функции могут быть использованы: (верхний рисунок). Но как и на втором рисунке ниже линейная функция не даст желаемых результатов: (средний рисунок). Однако нелинейная функция, как показано ниже, даст желаемые результаты: (нижний рисунок) enter image description here

функции активации не могут быть линейными, потому что нейронные сети с линейной функцией активации эффективны только на один слой глубиной, независимо от того, насколько сложны их архитектура. Вход в сети обычно является линейным преобразованием (вход * вес), но реальный мир и проблемы нелинейны. Чтобы сделать входящие данные нелинейными, мы используем нелинейное отображение, называемое функцией активации. Функция активации-это функция принятия решений, которая определяет наличие определенного нейронного признака. Он отображается между 0 и 1, где ноль означает отсутствие функции, а один означает ее присутствие. К сожалению, небольшие изменения, происходящие в Весах не может быть отражено в значениях активации, так как может принимать только 0 или 1. Поэтому нелинейные функции должны быть непрерывными и дифференцируемыми между этим диапазоном. Нейронная сеть должна иметь возможность принимать любой вход от-infinity до +infinite, но она должна иметь возможность сопоставлять его с выходом, который в некоторых случаях колеблется между {0,1} или между {-1,1} - таким образом, потребность в функции активации. Нелинейность необходима в функциях активации, потому что ее целью в нейронной сети является создание нелинейная граница решения через нелинейные комбинации веса и входных сигналов.


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

то же самое касается случая, когда все нейроны имеют аффинные функции активации (т. е. функция активации на форме f(x) = a*x + c, где a и c являются константами, что является обобщением линейных функций активации), что приведет только к аффинного преобразования от входа к выходу, что тоже не очень интересно.

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


"в настоящей работе используется Теорема Стоуна-Вейерштрасса и косинусный сквашер Галланта и Уайта, чтобы установить, что стандартные многослойные сетевые архитектуры с использованием абритарных функций сжатия могут аппроксимировать практически любую интересующую функцию с любой желаемой степенью точности, при условии, что доступно достаточно много скрытых единиц."(Hornik et al., 1989, Neural Networks)

функция раздавливания, например, нелинейная активация функция, которая сопоставляется с [0,1], как функция активации сигмовидной.


бывают случаи, когда чисто линейная сеть может дать полезные результаты. Говорят, у нас есть сеть из трех слоев с формами (3,2,3). Ограничивая средний слой только двумя измерениями, мы получаем результат, который является "плоскостью наилучшего соответствия" в исходном трехмерном пространстве.

но есть более простые способы найти линейные преобразования этой формы, такие как NMF, PCA и т. д. Однако это тот случай, когда многослойная сеть ведет себя не так, как однослойная персептрон.


Как я помню - сигмоидные функции используются, потому что их производная, которая вписывается в алгоритм BP, легко вычисляется, что-то простое, как f(x)(1-f(x)). Я не помню точно математику. Фактически можно использовать любую функцию с производными.


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


Это вовсе не требование. На самом деле,исправлено линейной функцией активации!--2--> очень полезно в больших нейронных сетей. Вычисление градиента намного быстрее, и он индуцирует разреженность, устанавливая минимальную границу в 0.

Подробнее см. ниже: https://www.academia.edu/7826776/Mathematical_Intuition_for_Performance_of_Rectified_Linear_Unit_in_Deep_Neural_Networks


Edit:

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

Да, технически это нелинейная функция, потому что она не является линейной в точке x=0, однако все же правильно сказать, что она линейна во всех других очки, поэтому я не думаю, что здесь полезно придираться,

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