Почему необходимо использовать нелинейную функцию активации в нейронной сети обратного распространения? [закрыто]


143

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

За этим вопросом следует следующий: Какая производная от функции активации используется для обратного распространения ошибки?


лучший ответ здесь, в искусственном интеллекте
eusoubrasileiro

Ответы:


170

Функция активации предназначена для внесения нелинейности в сеть.

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

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

другой способ думать об этом: без нелинейной функции активации в сети, 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])

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

введите описание изображения здесь


15
Зачем нам устранять линейность?
corazza

18
Если данные, которые мы хотим смоделировать, нелинейны, нам необходимо учесть это в нашей модели.
Дуг

39
Ответ одним предложением: << независимо от того, сколько слоев будет вести себя так же, как один перцептрон (потому что линейные функции, сложенные вместе, дают вам линейную функцию). >> . Ницца!
Автономный

12
Это немного вводит в заблуждение - как упоминал Эски, выпрямленные линейные функции активации чрезвычайно успешны, и если наша цель - просто моделировать / аппроксимировать функции, устранение нелинейности на всех этапах не обязательно является правильным ответом. Имея достаточное количество линейных элементов, вы можете аппроксимировать практически любую нелинейную функцию с высокой степенью точности. Я нашел, что это хорошее объяснение того, почему работают исправленные линейные единицы: stats.stackexchange.com/questions/141960/…
теган

12
@tegan выпрямленного линейные функции активации являются нелинейными. Я не уверен, какое отношение ваш комментарий имеет к ответу.
Эндолит

53

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

введите описание изображения здесь

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


1
+ One, тогда можно сделать вывод, что нелинейная функция используется для установления идеальной границы?
SIslam

1
Да, точно. В стабильном состоянии 0 или 1 он может производить 0,4 или 0,78, что делает его непрерывным в пределах диапазона.
chibole

3
Нейронная сеть должна иметь возможность принимать любой ввод от -infinity до + infinite, но она должна иметь возможность отображать его на выходе, который находится в диапазоне от {0,1} или от {-1,1} ... это напоминает мне Это ограничение ReLU заключается в том, что его следует использовать только в скрытых слоях модели нейронной сети.
Cloud Cho

22

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

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

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

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


1
Функции более высокого порядка могут быть аппроксимированы линейными функциями активации с использованием нескольких скрытых слоев. Универсальная аппроксимационная теорема характерна для MLP только с одним скрытым слоем.
eski

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

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

Правильно ли сказать, что основная цель функции активации - позволить нейронной сети создать нелинейную границу принятия решения?
stackoverflowuser2010

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

9

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

y = h2 * W3 + b3 
  = (h1 * W2 + b2) * W3 + b3
  = h1 * W2 * W3 + b2 * W3 + b3 
  = (x * W1 + b1) * W2 * W3 + b2 * W3 + b3 
  = x * W1 * W2 * W3 + b1 * W2 * W3 + b2 * W3 + b3 
  = x * W' + b'

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

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


5

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

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


3

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

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


2

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

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

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


2

Здесь есть несколько хороших ответов. Следует отметить книгу Кристофера М. Бишопа «Распознавание образов и машинное обучение». На эту книгу стоит сослаться, чтобы получить более глубокое представление о нескольких концепциях, связанных с машинным обучением. Выдержка из страницы 229 (раздел 5.1):

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


1

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


7
Насколько я помню, функция все еще хочет монотонно возрастать. Итак, не никакой функции.
Novak

1

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


1

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

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

Deeper: как правило, веса обновляются следующим образом:

W_new = W_old - Learn_rate * D_loss

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

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

введите описание изображения здесь

h и y - (оценочные) выход нейрона и фактическое выходное значение соответственно. А x - это вход нейронов. grad (f) выводится из входной функции активации. Вычисленное выше значение (с коэффициентом) вычитается из текущего веса, и получается новый вес. Теперь мы можем более четко сравнить эти два типа функций активации.

1- Если активирующая функция является линейной функцией, например: F (x) = 2 * x

тогда:

введите описание изображения здесь

новый вес будет:

введите описание изображения здесь

Как видите, все веса обновляются одинаково, и не имеет значения, какое входное значение !!

2- Но если мы используем нелинейную функцию активации, такую ​​как Tanh (x), то:

введите описание изображения здесь

а также:

введите описание изображения здесь

и теперь мы можем видеть прямой эффект ввода при обновлении весов! различное входное значение приводит к разным изменениям веса .

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

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

Функция нелинейной активации также может давать нормализованный выходной сигнал.


1

Нейронные сети используются для распознавания образов. А поиск закономерностей - очень нелинейный метод.

Предположим, в качестве аргумента мы используем линейную функцию активации y = wX + b для каждого отдельного нейрона и устанавливаем что-то вроде if y> 0 -> class 1 else class 0.

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

НЕПРАВИЛЬНО.

  • Для последнего скрытого слоя обновленное значение будет w {l} = w {l} - (альфа) * ​​X.

  • Для второго последнего скрытого слоя обновленное значение будет w {l-1} = w {l-1} - (alpha) * w {l} * X.

  • Для i-го последнего скрытого слоя обновленное значение будет w {i} = w {i} - (alpha) * w {l} ... * w {i + 1} * X.

Это приводит к тому, что мы умножаем все весовые матрицы вместе, что приводит к следующим возможностям: A) w {i} практически не изменяется из-за исчезающего градиента B) w {i} изменяется резко и неточно из-за стремительного градиента C) w {i} изменяется хорошо достаточно, чтобы дать нам хорошую оценку

В случае C это означает, что наша проблема классификации / прогнозирования, скорее всего, была простой задачей, основанной на линейном / логистическом регрессоре, и никогда не требовала нейронной сети!

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


-3

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

Для получения дополнительных сведений см. Следующее: https://www.academia.edu/7826776/Mat Mathematical_Intuition_for_Performance_of_Rectified_Linear_Unit_in_Deep_Neural_Networks


Редактировать:

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

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

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


9
Выпрямленная линейная функция активации также является нелинейной (несмотря на свое название). Это просто линейно для положительных значений
Планкалкюль

4
Вы технически правы, это не линейно по всей области, особенно при x = 0 (на самом деле оно линейно для x <0, поскольку f (x) = 0 - линейная функция). Он также не дифференцируемый, поэтому функция градиента также не полностью вычислима, но на практике эти технические особенности легко преодолеть.
eski

4
Он не только технически прав, но и прав на практике (или что-то в этом роде). Они полезны из-за нелинейности ReLU. Если бы они были линейными, у них была бы функция активации в форме f(x) = a*x(потому что это единственный тип линейной функции активации), которая бесполезна в качестве функции активации (если вы не объедините ее с нелинейными функциями активации. ).
HelloGoodbye

11
Выпрямленная линейная единица (ReLU) не является линейной, и это не просто «незначительная деталь», которую люди придирают, это важная причина того, почему ее полезно начинать. Нейронная сеть с единичной матрицей или обычным линейным блоком, используемым в качестве функции активации, не сможет моделировать нелинейные функции. То, что она линейна выше 0, не означает, что это практически линейная функция. Негерметичный ReLU также является «линейным» ниже 0, но он все еще не является линейной функцией и определенно не может быть просто заменен функцией идентичности. Нелинейность - определенно необходимое требование.
Эссам Аль-Мансури,

3
Это актуальная концепция, называемая кусочно-линейной функцией.
eski
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.