Я читал кое-что о нейронных сетях и понимаю общий принцип однослойной нейронной сети. Я понимаю необходимость дополнительных слоев, но почему используются нелинейные функции активации?
За этим вопросом следует следующий: Какая производная от функции активации используется для обратного распространения ошибки?
Ответы:
Функция активации предназначена для внесения нелинейности в сеть.
в свою очередь, это позволяет моделировать переменную ответа (также известную как целевая переменная, метка класса или оценка), которая изменяется нелинейно с ее независимыми переменными.
нелинейный означает, что вывод не может быть воспроизведен из линейной комбинации входов (что не то же самое, что вывод, который отображается в прямую линию - слово для этого является аффинным ).
другой способ думать об этом: без нелинейной функции активации в сети, NN, независимо от того, сколько слоев у него было, будет вести себя так же, как однослойный персептрон, потому что суммирование этих слоев даст вам просто еще одну линейную функцию (см. определение чуть выше).
Обычная функция активации, используемая в обратном распространении ( гиперболический тангенс ), оцениваемая от -2 до 2:
источник
Функцию линейной активации можно использовать, однако, в очень ограниченных случаях. Фактически, чтобы лучше понять функции активации, важно взглянуть на обычный метод наименьших квадратов или просто на линейную регрессию. Линейная регрессия направлена на поиск оптимальных весов, которые приводят к минимальному вертикальному эффекту между объясняющими и целевыми переменными в сочетании с входными данными. Короче говоря, если ожидаемый результат отражает линейную регрессию, как показано ниже, то можно использовать функции линейной активации: (верхний рисунок). Но, как показано на втором рисунке ниже, линейная функция не даст желаемых результатов: (Средний рисунок). Однако нелинейная функция, показанная ниже, даст желаемые результаты:
Функции активации не могут быть линейными, потому что нейронные сети с линейной функцией активации эффективны только на одном уровне, независимо от того, насколько сложна их архитектура. Вход в сети обычно является линейным преобразованием (вход * вес), но реальный мир и проблемы нелинейны. Чтобы сделать входящие данные нелинейными, мы используем нелинейное отображение, называемое функцией активации. Функция активации - это функция принятия решений, которая определяет наличие определенной нейронной функции. Он отображается между 0 и 1, где ноль означает отсутствие функции, а единица - ее наличие. К сожалению, небольшие изменения, происходящие в весах, не могут быть отражены в значениях активации, потому что они могут принимать только 0 или 1. Следовательно, нелинейные функции должны быть непрерывными и различаться в этом диапазоне. Нейронная сеть должна иметь возможность принимать любой входной сигнал от -infinity до + infinite, но она должна иметь возможность отображать его на выход, который находится в диапазоне от {0,1} или в некоторых случаях от {-1,1} - таким образом, необходимость активации функции. Нелинейность необходима в функциях активации, потому что ее цель в нейронной сети - создать нелинейную границу решения с помощью нелинейных комбинаций веса и входных данных.
источник
Если мы разрешаем только линейные функции активации в нейронной сети, выходом будет просто линейное преобразование входных данных, чего недостаточно для формирования универсального аппроксиматора функции . Такую сеть можно просто представить как умножение матриц, и вы не сможете получить очень интересное поведение от такой сети.
То же самое происходит в случае, когда все нейроны имеют аффинные функции активации (т.е. функцию активации в форме
f(x) = a*x + c
, гдеa
иc
являются константами, которые являются обобщением линейных функций активации), что приведет к аффинному преобразованию от входа к выходу. , что тоже не очень интересно.Нейронная сеть вполне может содержать нейроны с линейной функцией активации, например, в выходном слое, но для этого требуется компания нейронов с нелинейной функцией активации в других частях сети.
Примечание: интересным исключением являются синтетические градиенты DeepMind , для которых они используют небольшую нейронную сеть для прогнозирования градиента в проходе обратного распространения с учетом значений активации, и они обнаруживают, что могут избежать наказания за использование нейронной сети без скрытых слоев и с только линейные активации.
источник
Нейронная сеть с прямой связью с линейной активацией и любым количеством скрытых слоев эквивалентна просто линейной нейронной сети без скрытого слоя. Например, рассмотрим нейронную сеть на рисунке с двумя скрытыми слоями и без активации.
Мы можем сделать последний шаг, потому что комбинация нескольких линейных преобразований может быть заменена одним преобразованием, а комбинация нескольких членов смещения - это всего лишь одно смещение. Результат будет таким же, даже если мы добавим линейную активацию.
Таким образом, мы могли бы заменить эту нейронную сеть однослойной нейронной сетью, которая может быть расширена на
n
слои. Это указывает на то, что добавление слоев вообще не увеличивает аппроксимирующую способность линейной нейронной сети. Нам нужны нелинейные функции активации для аппроксимации нелинейных функций, а большинство реальных проблем очень сложны и нелинейны. Фактически, когда функция активации является нелинейной, то двухуровневая нейронная сеть с достаточно большим количеством скрытых блоков может оказаться универсальным аппроксиматором функции.источник
"В настоящей статье используется теорема Стоуна-Вейерштрасса и косинусный скашер Галланта и Уайта, чтобы установить, что стандартные многоуровневые сетевые архитектуры с прямой связью, использующие аббревиатуры функций сжатия, могут аппроксимировать практически любую интересующую функцию с любой желаемой степенью точности, при условии, что достаточно много скрытых единицы доступны ". ( Хорник и др., 1989, Нейронные сети )
Функция сжатия - это, например, нелинейная функция активации, которая отображается на [0,1], как функция активации сигмоида.
источник
Бывают случаи, когда чисто линейная сеть может дать полезные результаты. Скажем, у нас есть сеть из трех слоев с фигурами (3,2,3). Ограничивая средний слой только двумя измерениями, мы получаем результат, который является «плоскостью наилучшего соответствия» в исходном трехмерном пространстве.
Но есть более простые способы найти линейные преобразования этой формы, такие как NMF, PCA и т. Д. Однако это тот случай, когда многослойная сеть НЕ ведет себя так же, как однослойный персептрон.
источник
Чтобы понять логику нелинейных функций активации, сначала вы должны понять, почему используются функции активации. В общем, проблемы реального мира требуют нелинейных решений, которые нетривиальны. Итак, нам нужны некоторые функции для создания нелинейности. По сути, функция активации генерирует эту нелинейность при отображении входных значений в желаемый диапазон.
Однако функции линейной активации можно использовать в очень ограниченном наборе случаев, когда вам не нужны скрытые слои, такие как линейная регрессия. Обычно бессмысленно создавать нейронную сеть для такого рода проблем, потому что независимо от количества скрытых слоев эта сеть будет генерировать линейную комбинацию входных данных, что может быть выполнено всего за один шаг. Другими словами, он ведет себя как один слой.
Есть также еще несколько желательных свойств для функций активации, таких как непрерывная дифференцируемость . Поскольку мы используем обратное распространение, генерируемая функция должна быть дифференцируемой в любой точке. Я настоятельно рекомендую вам проверить страницу википедии на предмет функций активации отсюда, чтобы лучше понять тему.
источник
Здесь есть несколько хороших ответов. Следует отметить книгу Кристофера М. Бишопа «Распознавание образов и машинное обучение». На эту книгу стоит сослаться, чтобы получить более глубокое представление о нескольких концепциях, связанных с машинным обучением. Выдержка из страницы 229 (раздел 5.1):
источник
Насколько я помню, сигмовидные функции используются, потому что их производная, которая вписывается в алгоритм BP, легко вычисляется, что-то простое, например, f (x) (1-f (x)). Я точно не помню математику. Фактически можно использовать любую функцию с производными.
источник
Слоистая сеть из нескольких нейронов может использоваться для изучения линейно неразделимых задач. Например, функция XOR может быть получена с двумя уровнями с функцией ступенчатой активации.
источник
Важно использовать функцию нелинейной активации в нейронных сетях, особенно в глубоких NN и обратном распространении. По заданному в теме вопросу сначала скажу причину необходимости использования нелинейной функции активации для обратного распространения ошибки.
Проще говоря: если используется линейная функция активации, производная функции стоимости является константой по отношению к (wrt) входу, поэтому значение входа (для нейронов) не влияет на обновление весов . Это означает, что мы не можем определить, какие веса наиболее эффективны для создания хорошего результата, и поэтому мы вынуждены изменять все веса одинаково.
Deeper: как правило, веса обновляются следующим образом:
Это означает, что новый вес равен старому весу за вычетом производной функции стоимости. Если функция активации является линейной функцией, то ее производная по входу является константой, и входные значения не имеют прямого влияния на обновление веса.
Например, мы намерены обновить веса нейронов последнего слоя, используя обратное распространение. Нам нужно вычислить градиент весовой функции по весу. С цепным правилом мы имеем:
h и y - (оценочные) выход нейрона и фактическое выходное значение соответственно. А x - это вход нейронов. grad (f) выводится из входной функции активации. Вычисленное выше значение (с коэффициентом) вычитается из текущего веса, и получается новый вес. Теперь мы можем более четко сравнить эти два типа функций активации.
1- Если активирующая функция является линейной функцией, например: F (x) = 2 * x
тогда:
новый вес будет:
Как видите, все веса обновляются одинаково, и не имеет значения, какое входное значение !!
2- Но если мы используем нелинейную функцию активации, такую как Tanh (x), то:
а также:
и теперь мы можем видеть прямой эффект ввода при обновлении весов! различное входное значение приводит к разным изменениям веса .
Я думаю, что вышеизложенного достаточно, чтобы ответить на вопрос темы, но полезно упомянуть и другие преимущества использования функции нелинейной активации.
Как упоминалось в других ответах, нелинейность позволяет NN иметь больше скрытых слоев и более глубокие NN. Последовательность слоев с функцией линейного активатора может быть объединена в слой (с комбинацией предыдущих функций) и фактически представляет собой нейронную сеть со скрытым слоем, которая не использует преимущества глубокого NN.
Функция нелинейной активации также может давать нормализованный выходной сигнал.
источник
Нейронные сети используются для распознавания образов. А поиск закономерностей - очень нелинейный метод.
Предположим, в качестве аргумента мы используем линейную функцию активации 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 это означает, что наша проблема классификации / прогнозирования, скорее всего, была простой задачей, основанной на линейном / логистическом регрессоре, и никогда не требовала нейронной сети!
Независимо от того, насколько надежна или хорошо настроена ваша сеть, если вы используете функцию линейной активации, вы никогда не сможете решить нелинейные проблемы распознавания образов.
источник
Это вовсе не требование. Фактически, выпрямленная функция линейной активации очень полезна в больших нейронных сетях. Вычисление градиента происходит намного быстрее, и это вызывает разреженность, устанавливая минимальную границу на 0.
Для получения дополнительных сведений см. Следующее: https://www.academia.edu/7826776/Mat Mathematical_Intuition_for_Performance_of_Rectified_Linear_Unit_in_Deep_Neural_Networks
Редактировать:
Было некоторое обсуждение того, можно ли назвать выпрямленную линейную функцию активации линейной функцией.
Да, технически это нелинейная функция, потому что она не линейна в точке x = 0, однако все же правильно сказать, что она линейна во всех других точках, поэтому я не думаю, что здесь полезно придираться,
Я мог бы выбрать функцию идентификации, и это все равно было бы правдой, но я выбрал ReLU в качестве примера из-за его популярности в последнее время.
источник
f(x) = a*x
(потому что это единственный тип линейной функции активации), которая бесполезна в качестве функции активации (если вы не объедините ее с нелинейными функциями активации. ).