Подтвердить что ты не робот

Зачем нужна нелинейная активационная функция в нейронной сети обратного распространения?

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

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

4b9b3361

Ответ 1

Целью функции активации является введение нелинейности в сеть

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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 слоев. Это означает, что добавление слоев вообще не увеличивает мощность аппроксимации линейной нейронной сети. Нам нужны нелинейные функции активации для приближения нелинейных функций, и большинство реальных задач очень сложны и нелинейны. Фактически, когда функция активации является нелинейной, то двухслойная нейронная сеть с достаточно большим количеством скрытых единиц может быть доказана как универсальный аппроксиматор функции.

Ответ 7

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

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

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

Ответ 8

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

Ответ 9

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

Ответ 10

Позвольте мне объяснить вам как можно проще:

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

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

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

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

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

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

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

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

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

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

Ответ 11

Несколько хороших ответов здесь. Будет хорошо отметить книгу Кристофера М. Бишопа "Распознавание образов и машинное обучение". Это книга, на которую стоит обратить внимание, чтобы получить более глубокое понимание некоторых концепций, связанных с ОД. Выдержка из стр. 229 (раздел 5.1):

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

Ответ 12

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

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


Edit:

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

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

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