Почему нелинейная функция активации должна использоваться в нейронной сети 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:
линейную функцию активации можно использовать, однако в очень ограниченных случаях. На самом деле, чтобы лучше понять функции активации, важно взглянуть на обычный наименьший квадрат или просто линейную регрессию. Линейная регрессия направлена на поиск оптимальных Весов, которые приводят к минимальному вертикальному эффекту между объясняющими и целевыми переменными в сочетании с входными данными. Короче говоря, если ожидаемый результат отражает линейную регрессию, как показано ниже, то линейная активация функции могут быть использованы: (верхний рисунок). Но как и на втором рисунке ниже линейная функция не даст желаемых результатов: (средний рисунок). Однако нелинейная функция, как показано ниже, даст желаемые результаты: (нижний рисунок)
функции активации не могут быть линейными, потому что нейронные сети с линейной функцией активации эффективны только на один слой глубиной, независимо от того, насколько сложны их архитектура. Вход в сети обычно является линейным преобразованием (вход * вес), но реальный мир и проблемы нелинейны. Чтобы сделать входящие данные нелинейными, мы используем нелинейное отображение, называемое функцией активации. Функция активации-это функция принятия решений, которая определяет наличие определенного нейронного признака. Он отображается между 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 в качестве примера из-за его недавней популярности.