Нейронные сети — функции активации
Описывает наиболее распространенные функции активации, используемые в машинном обучении, включая глубокое обучение.
Предварительное условие: желательно иметь знания по нескольким алгоритмам машинного обучения и базовое понимание искусственных нейронных сетей.
Что такое функция активации нейронных сетей?
Функция активации помогает решить, нужно ли нам активировать нейрон или нет . Если нам нужно запустить нейрон, то какой будет сила сигнала.
Функция активации — это механизм, с помощью которого нейроны обрабатывают и передают информацию через нейронную сеть.
Зачем нужна функция активации в нейронной сети?
Единая нейронная сеть ввода и вывода
В нейронной сети z — это произведение входного узла и веса узла плюс смещение. Уравнение для z очень похоже на линейное уравнение и может иметь значение от + бесконечности до-бесконечности.
Если значение нейрона может варьироваться от -infinity до + infinity, тогда мы не сможем решить, нужно ли нам активировать нейрон или нет. Вот где активация помогает нам решить проблему.
Если z имеет линейный характер, мы не сможем решать сложные задачи. Это еще одна причина, по которой мы используем функции активации.
Существуют разные типы функций активации, и некоторые из наиболее распространенных и популярных:
Давайте рассмотрим каждую функцию активации и разберемся, где их лучше всего использовать и почему. Это поможет нам решить, какую функцию активации использовать в разных сценариях.
Функция порога или двоичного шага
Функция активации порога или двоичного шага
Это простейшая функция, которую можно рассматривать как функцию «да» или «нет».
Если значение z выше порогового значения, тогда активация устанавливается на 1 или да, и нейрон запускается.
Если значение z ниже порогового значения, активация устанавливается на 0 или нет, и нейрон не запускается.
Они полезны для двоичной классификации .
Функция активации сигмовидной кишки
Сигмоидальная функция — это гладкая нелинейная функция без перегибов, имеющая форму буквы S.
Он предсказывает вероятность выхода и, следовательно, используется в выходных слоях нейронной сети и логистической регрессии.
Поскольку вероятность находится в диапазоне от 0 до 1, значит, значение сигмовидной функции находится в диапазоне от 0 до 1.
Но что, если мы хотим классифицировать больше, чем да или нет? что, если я хочу предсказывать несколько классов, например предсказывать погоду, которая может быть солнечной, дождливой или облачной?
Активация Softmax помогает с классификацией мультиклассов
Функция активации Softmax
Функция активации сигмоида используется для классификации двух классов или двоичных классов, тогда как softmax используется для классификации нескольких классов и является обобщением сигмоидной функции.
В softmax мы получаем вероятности каждого класса, сумма которых должна быть равна 1. Когда вероятность одного класса увеличивается, вероятность других классов уменьшается, поэтому класс с наибольшей вероятностью является выходным классом.
Пример: при прогнозировании погоды мы можем получить выходные вероятности 0,68 для солнечной погоды, 0,22 для облачной погоды и 0,20 для дождливой погоды. В этом случае мы берем результат с максимальной вероятностью как наш окончательный результат. В этом случае мы прогнозируем солнечную погоду.
Softmax вычисляет вероятность каждого целевого класса над вероятностью всех возможных целевых классов.
Функция активации Softmax
Функция активации гиперболического тангенса или Tanh
Функция активации гиперболического танга
Для гиперболической функции tanh выход центрируется в 0, а диапазон выходных значений находится между -1 и +1 .
Выглядит очень похоже на сигмовидную. На самом деле гиперболический tanh — это масштабированная сигмовидная функция. Градиентный спуск сильнее для tanh по сравнению с сигмовидом и, следовательно, предпочтительнее сигмовидной.
Преимущество tanh в том, что отрицательный вход будет отображаться как строго отрицательный, нулевой вход будет отображаться почти на ноль, чего не происходит в сигмоиде, поскольку диапазон для сигмоида находится между 0 и 1.
Выпрямитель Linear Unit-ReLU
ReLU не является линейным по своей природе, что означает, что его наклон не постоянный. Relu нелинейна около нуля, но наклон равен 0 или 1 и, следовательно, имеет ограниченную нелинейность.
Диапазон от 0 до бесконечности
ReLU дает такой же выход, как и вход, когда z положительно. Когда z равно нулю или меньше нуля, он дает выходной сигнал 0. Таким образом, ReLU отключает нейрон, когда входной сигнал равен нулю или ниже нуля.
Все модели глубокого обучения используют Relu, однако его можно использовать только для скрытого слоя, поскольку он вызывает разреженность . Разреженность относится к количеству нулевых значений или значений «NA».
Когда скрытые слои подвергаются воздействию диапазона входных значений, функция выпрямителя приводит к большему количеству нулей, в результате чего активируется меньше нейронов, а это означает меньшее количество взаимодействий в нейронной сети.
ReLU включает или выключает нейроны более агрессивно, чем сигмовидная или tanh
Проблема с Relu заключается в том, что отрицательные значения становятся нулевыми, что снижает способность модели правильно обучать данные. Для решения этой проблемы у нас есть Leaky ReLU
Дырявый ReLU
Дырявый ReLU. Значение a обычно 0,01
В дырявом ReLU мы вводим небольшой отрицательный наклон, чтобы он не имел нулевого наклона. Это помогает ускорить обучение.
Диапазон для Leaky ReLU составляет от -infinity до + infinity
Это даст хорошее представление о различных функциях активации.
Итак, что такое функция активации?
Функция активации является функцией , которая добавляется к искусственной нейронной сети для того , чтобы помочь сети узнать сложные закономерности в данных . При сравнении с нейронной моделью, которая присутствует в нашем мозгу, функция активации в конце решает, что должно быть запущено в следующий нейрон.
В искусственных нейронных сетях , то функция активации узла определяет выход этого узла заданного вход или набор входов. Стандартную интегральную схему можно рассматривать как цифровую сеть функций активации, которая может быть «ВКЛ» (1) или «ВЫКЛ» (0), в зависимости от входа. — Википедия
Итак, подытоживая, функции активации — это математические уравнения, которые определяют выход нейронной сети.
В этом блоге мы узнаем о — широко используемых функциях активации, о внутренней математике, лежащей в основе их работы, и обсудим различные способы выбора наилучшего для конкретной постановки задачи глубокого обучения.
Прежде чем углубляться в различные типы функций активации, давайте кратко рассмотрим, как работает искусственный нейрон.
Математическая визуализация описанных выше процессов может быть представлена как:
К настоящему времени вы должны быть очень хорошо знакомы с процессом работы ИНС и с тем, какова роль функции активации в этом процессе!
Итак, бери свой кофе, и приступим!
1. Функция активации сигмовидной кишки —
В сигмовидной функции выглядит как S-образной кривой.
Формула: f (z) = 1 / (1+ e ^ -z)
Почему и когда мы используем функцию активации сигмовидной кишки?
- Выход сигмовидной функции находится в диапазоне от 0 до 1 . Поскольку выходные значения ограничиваются между 0 и 1, он нормализует выходной сигнал каждого нейрона.
- Специально используется для моделей, в которых мы должны прогнозировать вероятность как результат. Поскольку вероятность чего-либо существует только в диапазоне от 0 до 1, сигмовидная кишка — идеальный выбор.
- Плавный градиент , предотвращающий «скачки» выходных значений.
- Функция дифференцируема. Это означает, что мы можем найти наклон сигмовидной кривой в любых двух точках.
- Четкие прогнозы , т.е. очень близкие к 1 или 0.
- Склонен к исчезновению градиента (когда значение сигмовидной функции слишком велико или слишком мало, производная становится очень маленькой, т.е. исчезающие градиенты и плохое обучение для глубоких сетей).
- Вывод функции не центрируется на 0, что снижает эффективность обновления веса.
- Сигмоидальная функция выполняет экспоненциальные операции, что для компьютеров медленнее.
Функция активации tanh также является своего рода сигмоидальной (S-образной).
Формула функции активации tanh
Tanh — функция гиперболического тангенса . Кривые функции tanh и сигмовидной функции относительно похожи. Но у него есть некоторое преимущество перед сигмовидной функцией. Посмотрим, что это такое.
Почему tanh лучше по сравнению с функцией активации сигмовидной кишки?
- Прежде всего, когда входные данные большие или маленькие, выходные данные почти гладкие, а градиент небольшой , что не способствует обновлению веса. Разница в интервале вывода. Интервал вывода tanh равен 1, а вся функция ориентирована на 0, что лучше, чем сигмоид.
- Основное преимущество является то , что отрицательные входы будут отображены сильно отрицательными и нулевые входы будут отображены вблизи нуля в TANH графике.
3. Функция активации ReLU (выпрямленное линейное устройство) —
ReLU наполовину выпрямлен (снизу). f (z) равно нулю, когда z меньше нуля, и f (z) равно z, когда z больше или равно нулю.
Диапазон: [от 0 до бесконечности)
Функция ReLU (Rectified Linear Unit) — это функция активации, которая в настоящее время более популярна по сравнению с другими функциями активации в глубоком обучении.
По сравнению с сигмовидной функцией и функцией tanh она имеет следующие преимущества :
- Когда входной сигнал положительный, проблема насыщения градиента отсутствует.
- Скорость расчета намного выше . Функция ReLU имеет только линейную зависимость. Независимо от того, идет ли он вперед или назад, он намного быстрее, чем сигмовидный и тангенциальный. (Сигмоид и tanh должны вычислять экспоненту, которая будет медленнее.)
1) Проблема с мертвым ReLU — когда вход отрицательный, ReLU полностью неактивен , что означает, что после ввода отрицательного числа ReLU умрет . Таким образом, в процессе прямого распространения это не проблема. Некоторые области чувствительны, а некоторые нечувствительны. Но в процессе обратного распространения , если вы введете отрицательное число, градиент будет полностью нулевым, что имеет ту же проблему, что и сигмовидная функция и функция tanh.
2) Мы находим, что на выходе функции ReLU либо 0, либо положительное число, что означает, что функция ReLU не является 0-центрической функцией.
4. Функция активации Leaky ReLU —
Функция активации, специально разработанная для компенсации умирающей проблемы ReLU.
ReLU против Leaky ReLU
Почему Leaky ReLU лучше ReLU?
- Утечка ReLU регулирует проблему нулевых градиентов для отрицательного значения, давая очень маленькую линейную составляющую x отрицательным входам (0,01x) .
- Утечка способствует увеличению дальности действия функции ReLU. Обычно значение a составляет 0,01 или около того.
- Дальность действия Leaky ReLU составляет (от-бесконечности до бесконечности).
5. Функция ELU (экспоненциальные линейные единицы) —
ELU против Leaky ReLU против ReLU
ELU также предлагается для решения проблем ReLU. В отличие от ReLU, ELU имеют отрицательные значения, что приближает среднее значение активаций к нулю. Средние активации, которые ближе к нулю, позволяют быстрее обучаться, поскольку они приближают градиент к естественному градиенту.
Очевидно, что ELU обладает всеми преимуществами ReLU , а также:
- Нет проблем с мертвым ReLU , среднее значение выхода близко к 0, с нулевым центром .
- В отличие от ReLU, ELU имеют отрицательные значения, что позволяет им приближать среднее значение активаций единицы к нулю, как при пакетной нормализации, но с меньшей вычислительной сложностью . Среднее смещение в сторону нуля ускоряет обучение за счет приближения нормального градиента к единичному естественному градиенту из-за уменьшения эффекта сдвига смещения.
- ELU насыщаются до отрицательного значения с меньшими входами и, таким образом, уменьшают распространяемые вперед вариации и информацию.
6. PRelu (Параметрическое ReLU) —
PReLU также является улучшенной версией ReLU.
Смотрим на формулу PReLU. Параметр α обычно представляет собой число от 0 до 1 и обычно относительно невелик, например, несколько нулей.
- если aᵢ = 0 , f становится ReLU
- если aᵢ> 0 , f становится дырявым ReLU
- если aᵢ является обучаемым параметром , f становится PReLU
- В отрицательной области PReLU имеет небольшой наклон , что также позволяет избежать проблемы смерти ReLU .
- По сравнению с ELU, PReLU является линейной операцией в отрицательной области. Хотя наклон небольшой, он не стремится к 0 , что является определенным преимуществом.
Softmax используется в качестве функции активации для задач классификации нескольких классов, когда членство в классе требуется для более чем двух меток классов. Для произвольного действительного вектора длины K Softmax может сжать его в действительный вектор длины K со значением в диапазоне (0, 1) , а сумма элементов в векторе равна 1.
S oftmax отличается от нормальной функции max: функция max выводит только наибольшее значение, а Softmax гарантирует, что меньшие значения имеют меньшую вероятность и не будут отброшены напрямую. Это «макс», то есть «мягкий» ; ее можно рассматривать как вероятностную или « более мягкую » версию функции argmax.
Знаменатель функции Softmax объединяет все факторы исходного выходного значения, что означает, что различные вероятности, полученные функцией Softmax, связаны друг с другом.
Главный недостаток в SoftMax активации функции является то , что это —
- Недифференцируема в нуле и ReLU неограниченно.
8. Функция Swish (самозатрачиваемая).
Формула: y = x * сигмоид (x)
Дизайн Swish был вдохновлен использованием сигмовидных функций для стробирования в LSTM и автомобильных сетях. Мы используем то же значение для стробирования, чтобы упростить механизм стробирования, который называется самозатвором .
Преимущество самостоятельного стробирования является то , что она требует только простого входа скалярного, в то время как нормальный стробирования требуется несколько входов скалярных. Эта функция позволяет функциям автоматической активации, таким как Swish, легко заменять функции активации, которые принимают один скаляр в качестве входных данных (например, ReLU), без изменения скрытой емкости или количества параметров.
Примечание. Функция активации Swish может быть реализована только в том случае, если ваша нейронная сеть содержит ≥ 40 слоев.
В основные преимущества этого Swish функции активации заключаются в следующем:
1. Неограниченность помогает предотвратить постепенное приближение градиента к нулю во время медленной тренировки, вызывающее насыщение.
(В то же время ограниченность имеет преимущества, потому что ограниченные активные функции могут иметь сильную регуляризацию, и большие отрицательные входные данные будут разрешены.)
2. Производная всегда> 0.
3. Плавность также играет важную роль в оптимизации и обобщении.
9. Maxout
Maxout слой просто слой , в котором функция активации является макс входов. Как указано в документе , даже MLP с 2 единицами maxout может аппроксимировать любую функцию.
Единичный модуль Maxout можно интерпретировать как выполнение кусочно-линейного приближения (PWL) к вещественнозначной функции, где отрезок прямой между любыми двумя точками на графике функции лежит выше или на графике ( выпуклая функция ).
Maxout также может быть реализован для d-мерного вектора (V).
Рассмотрим две выпуклые функции h1 (x) и h2 (x) , аппроксимируемые двумя модулями Maxout. По предлогу выше, функция g (x) является непрерывной функцией PWL.
Следовательно, установлено, что слой Maxout, состоящий из двух модулей Maxout, может сколь угодно хорошо аппроксимировать любую непрерывную функцию.
10. Softplus-
Функция Softplus : f (x) = ln (1 + exp x)
Производное от Softplus является —
f ′ (x) = ехр (х) / (1 + ехр х)
= 1 / (1 + ехр (−x))
, которая также называется логистической / сигмовидной функцией.
Функция softplus похожа на функцию ReLU, но относительно гладкая. Это одностороннее подавление, подобное ReLU.
Имеет широкий диапазон допустимости (0, + inf) .
Вообще говоря, у этих функций активации есть свои преимущества и недостатки. Все хорошее и плохое можно получить, экспериментируя с различными постановками задач.
И на этом мы подошли к концу этого блога. Надеюсь, это даст вам хорошее представление о наиболее часто используемых функциях активации в глубоком обучении.
Для чего нужна функция активации?
Начал изучать машинное обучение. Попытался разобраться как устроен перцептрон, и столкнулся с тем, что не знаю для чего нужна функция активации и что она должна делать.
С остальными его частями(входные данные, веса, нейрон), как они работают и для чего нужны я уже разобрался. Объясните пожалуйста для чего нужна функция активации, если можно на конкретном примере.
- Вопрос задан более трёх лет назад
- 1380 просмотров
Комментировать
Решения вопроса 1
Участник OpenStreetMap
Для нелинейности, иначе всё можно свернуть к некой более простой формуле, чем 100500 коэффициентов.
Ответ написан более трёх лет назад
RandomProgrammer @RandomProgrammer Автор вопроса
Т.е. функция активации необязательна должна быть в каждом перцептроне?
RandomProgrammer, если её не сделать в каждом, то условную цепочку из 3 перцептронов можно будет свернуть к одному перцептрону с другими весами. Т.е. ты проигрываешь, и считаешь 2 лишних раза.
Ответы на вопрос 1
mayton2019 @mayton2019
Bigdata Engineer
Функцию активации невозможно объяснить в отрыве от нейрона. Главные требования к ней — непрерывность и монотонность на всей области определения. В качестве такой функции берут либо логистический сигмоид либо гиперболический тангенс. Они — насыщаются на границах. Тоесть бесконечный рост аргумента не приводит к росту функции.
Функция связанна с теоремой Колмогорова Арнольда.
Функции активации: ступенчатая, линейная, сигмоида, ReLU и Tanh
Большой гайд по функциям активации нейронок от robot_dreams
Сегодня говорим о функции активации: как ее выбрать и какими особенностями и недостатками обладают разные типы функций активации — от ступенчатой до гиперболического тангенса.
Материал большой, поэтому рекомендуем сохранить его в закладки на будущее. Также для удобства сделали содержание.
Как работают нейроны
Нейронная сеть структурно и функционально повторяет работу нервной системы живых организмов . Она состоит из множества искусственных нейронов, которые связаны в виде сеток и слоев. Взаимодействуя друг с другом, они передают данные от сетки к сетке и от слоя к слою. Благодаря этому нейронки могут выполнять сложные задачи: например, распознавать картинки или прогнозировать.
Простейшая схема нейронной сети
Базовый блок любой нейронной сети — это нейрон . Он работает по следующему принципу:
1. Искусственный нейрон получает входные значения xi , которые могут выглядеть как векторные или числовые значения, представляющие признаки или значения от предыдущих нейронов.
2. Входное значение умножается на соответствующий вес. Этот вес ( w ji ) определяет важность этого входа для вычислений нейрона. Полученные в результате умножения значения суммируются:
3. К сумме взвешенных значений добавляется смещение. Смещение (bias) в искусственном нейроне — это дополнительный параметр, некоторое константное значение, благодаря которому нейрон может активироваться, даже если взвешенные входы принимают нулевое значение.
Важно! Без смещения нейронная сеть могла бы представлять только линейные отображения, а это ограничило бы ее способность решать сложные задачи и извлекать сложные паттерны из данных.
4. Полученная сумма передается через функцию активации, которая применяет нелинейное преобразование к взвешенной сумме. Функция активации определяет выходной сигнал нейрона, добавляя нелинейности в модель.
Как работает нейрон
Обратите внимание, что и смещение, и функция активации вместе влияют на активацию нейрона. Смещение позволяет установить базовый уровень активации, в то время как функция активации определяет, как будет изменяться активация нейрона в зависимости от входов и смещения .
В скрытых слоях нейронной сети обычно (не всегда, но чаще всего) используется одна и та же функция активации нейронов. Для выходного слоя функция активации немного меняется.
Пороговая (ступенчатая) функция
Самая простая функция активации. Иногда ее называют функцией Хевисайда. Если значение ступенчатой функции превышает некоторый порог, нейрон считается активированным:
Пороговая (ступенчатая) функция активации
Недостатки
Пороговая функция непрерывна и недифференцируема, в результате чего мы получаем две проблемы, из-за которых в нейросетях с глубоким обучением эта функция почти не используется:
1. Первая проблема связана с алгоритмом обратного распространения ошибки Backpropagation — механизмом обучения нейронной сети. Благодаря ему настраиваются веса связей между нейронами сети на основе вычисленных ошибок предсказания.
Вычислить градиент, необходимый для обновления весов в процессе обучения сети, можно только с дифференцируемыми функциями активации (градиент вычисляется с помощью производной функции активации по входу нейрона).
2. Вторая проблема — скачки в функции активации Хевисайда. Они приводят к непрерывным изменениям выходных значений нейронов при небольших изменениях входных данных. В результате сеть может «застревать» в определенных участках нейронной сети, где выходные значения нейронов прыгают между двумя разными значениями.
Такое застревание затрудняет обновление весов нейронов в этих регионах, поскольку небольшие изменения весов не приводят к непрерывным изменениям выходов нейронов. В результате сеть может не сместиться в нужном направлении и не достичь оптимальных значений весов.
Линейная функция
Еще одна простейшая функция активации, в которой изменения входного сигнала пропорционально влияют на выход без каких-либо нелинейных преобразований:
Линейная функция активации
В связи с этим применение линейной функции ограничено задачами регрессии, где необходимо предсказание непрерывного значения. Например, в задаче предсказания цены на недвижимость с учетом разных признаков она может быть применена к выходному слою.
Также функция может быть применена к отдельным линейным слоям сети, которые выполняют линейные операции над входами. В этом случае функция активации просто передает значения без нелинейных преобразований.
Пример использования
Предположим, мы решаем задачу прогнозирования продаж товаров на основе их рекламных затрат.
- сведения о сумме денег, потраченных на рекламу в различных медиаканалах (раскрутка на телевидении/радио, в социальных сетях);
- соответствующие сведениям объемы продаж товаров.
Конечная цель этой задачи — построение модели, которая бы прогнозировала объем продаж на основе входных данных.
Задействуем нейронную сеть с одним линейным слоем и линейной функцией активации. Входными данными будут значения рекламных затрат в различных каналах, а выходными данными — прогнозируемый объем продаж.
Нейронная сеть с линейной функцией активации позволит установить линейную зависимость между рекламными затратами и объемом продаж. Модель будет стремиться найти оптимальные веса для каждого канала рекламы, чтобы наилучшим образом предсказывать объем продаж на основе данных о затратах.
Недостатки
Линейная функция активации пригодна только для простых моделей или в качестве заключительного слоя в нейронной сети для решения задач регрессии, где нужно выполнить прогнозирование числового значения.
Сигмоидная функция (логистическая)
Логистическая функция нелинейна и сжимает входные значения от 0 до 1 по формуле:
где x — входное значение.
Чаще всего сигмоидная функция активации применяется в задачах бинарной классификации, где нужно предсказать вероятность принадлежности к одному из двух классов. Она конвертирует входные значения в вероятности, которые могут быть интерпретированы как вероятность принадлежности к положительному классу.
Сигмоидная функция активации
Пример использования
Допустим, есть набор данных, состоящий из физических характеристик пациентов. Нам нужно построить модель, которая предскажет, есть ли у пациента болезнь сердца.
Для этого мы можем использовать нейронную сеть с одним выходным нейроном и сигмоидной функцией активации:
- входные данные могут включать возраст пациента, уровень холестерина, давление и другие характеристики;
- выходной нейрон будет предсказывать вероятность наличия болезни сердца.
Сигмоидная функция активации преобразует взвешенную сумму входных значений и весов в вероятность. Например, если выходное значение сигмоидной функции равно 0.89, это означает, что с вероятностью 89 % модель предсказывает наличие проблем с сердечно-сосудистыми заболеваниями.
Недостатки логистической функции
В области сильных положительных или отрицательных значений производная логистической функции принимает малые значения. Это приводит к появлению эффекта затухания градиента при обратном распространении ошибки и слишком малом его значении, что крайне неэффективно для обновления весов нейронов и обучения глубоких нейронных сетей с большим числом слоев.
Гиперболический тангенс (Tahn)
Полная формула гиперболического тангенса (tanh) выглядит так:
Но так как в поведении тангенс похож на сигмоиду, ее можно представить так:
С сигмоидой у тангенса есть и схожие особенности, и слабые моменты: они оба нелинейные и сжимающие, и оба ограничены в диапазоне от −1 до 1.
Гиперболический тангенс
При этом (по сравнению с сигмоидной функцией активации) tanh(x) обладает более заметным градиентом вблизи нуля. Это может быть полезным для моделирования данных с симметричным распределением возле нуля, отрицательные значения которых важно сохранить.
Недостатки гиперболического тангенса
Недостатки tanh(x) тоже связаны с проблемой затухания градиента.
В процессе использования backpropagation локальный градиент вычисляется путем перемножения производных функций активации слоев нейронной сети. Максимальная производная гиперболического тангенса всегда меньше единицы и вычисляется по формуле:
Максимальное значение производной логистической функции активации в точке 0 равна ¼ и вычисляется так:
При перемножении производных функций активации для n слоев максимум локального градиента будет уменьшаться с каждым слоем и составит 1/(2 n ) . При увеличении числа слоев в модели сети и соответствующем уменьшении локального градиента веса в более ранних слоях могут оставаться практически без изменений, так как значение градиента становится очень маленьким.
Из-за затухания градиента в более ранних слоях обновление весов будет происходить преимущественно в более глубоких слоях, и обучение будет идти с конца нейронной сети. В результате активации седьмого-восьмого слоев мы получим меньший вклад в общий процесс обучения по сравнению с более глубокими слоями, где градиенты сохраняются в более высоких значениях.
Вывод: и логистическая функция активации (сигмоидная), и гиперболический тангенс часто не рекомендуются для глубоких нейронных сетей, особенно при использовании большого числа слоев.
Пример использования гиперболического тангенса
Рассмотрим задачу из категории предсказаний временных рядов (временной ряд — это последовательность данных, упорядоченных по времени). Допустим, есть данные о температуре воздуха на протяжении определенного периода времени, и нужно построить модель, которая будет прогнозировать температуру на следующий день.
Мы применяем рекуррентную нейронную сеть (RNN), где в качестве функции активации взят tanh(x). У RNN есть память, которая позволяет ей учитывать предыдущие значения и предсказывать будущие значения на основе этой истории.
Код на Python с использованием фреймворка TensorFlow будет выглядеть примерно так:
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, LSTM # Подготовка временного ряда для анализа # . # Предобработка данных # . # Создание модели model = Sequential() model.add(LSTM(32, activation='tanh', input_shape=(time_steps, input_dim))) model.add(Dense(1)) # Компиляция model.compile(loss='mean_squared_error', optimizer='adam') # Обучение модели model.fit(X_train, y_train, epochs=10, batch_size=32) # Прогнозирование predictions = model.predict(X_test)
Важно! В этом коде предполагается, что данные уже оптимизированы и готовы к использованию.
Общий принцип построения нейронной сети такой:
- С помощью класса Sequential() создается последовательная модель нейронной сети.
- Метод model.add() добавляет слой LSTM (с 32 скрытыми нейронами и функцией активации гиперболического тангенса).
- Параметром input_shape=(time_steps, input_dim) определяем входной размер модели, где time_steps — количество временных шагов, а input_dim — количество признаков на каждом временном шаге.
- Через команду model.compile() компилируется модель. В ней указывается функция потерь mean_squared_error (среднеквадратическая ошибка) и оптимизатор adam , используемый для обновления весов модели.
- Через метод обучения model.fit() выполняем тренировку модели на обучающих данных (X_train, y_train) .
- Указываем число эпох epochs=10 (определяет, сколько раз весь набор обучающих данных будет проходить через нейронную сеть в процессе обучения) и размер пакета данных, используемых для каждого обновления весовых коэффициентов, — batch_size=32 .
- После завершения процедуры обучения применяем model.predict() к тестовым данным (X_test) для получения предсказанных значений.
Функция активации ReLU
ReLU (Rectified Linear Unit) — одна из самых популярных функций активации, используемых как в сетях с низким числом слоев, так и в моделях deep learning.
где x — входной сигнал, а f(x) — выходной.
Функция активации ReLU
Эта функция активации (равно как и существующие ее модификации) устраняет проблемы с исчезающим градиентом. Градиенты для значений больше нуля остаются ненулевыми, что обеспечивает эффективное распространение градиентов и обновление весов в процессе тренировки.
Полезно знать! У модифицированных функций Leaky ReLU, Parametric ReLU (PReLU) и Exponential Linear Unit (ELU) тоже есть свойства, которые способствуют предотвращению затухания градиента. Например, Leaky ReLU добавляет небольшой наклон для отрицательных значений, а у ELU есть экспоненциальная зависимость отрицательных значений.
Сравнение функции активации ReLU с ее модификациями
Хотя на графике заметна ее частичная линейность, функция ReLU нелинейна и комбинации с ней также нелинейны.
Функция универсальна и пригодна для любых задач, не требуя больших вычислительных мощностей. Все отрицательные значения функция заменяет на ноль и передает положительные значения без изменений. Градиенты для положительных значений остаются ненулевыми, что позволяет эффективно распространять градиенты и обновлять веса во время обучения.
Функция ReLU активирует только отдельные нейроны, оставляя остальные неактивными . Благодаря этому сеть может обучаться на более разреженных представлениях данных — и снижается риск переобучения.
Недостатки функции ReLU
Очевидный минус функции активации ReLU — ее ненормализуемость. Так же как и у сигмоидной функции активации, выходное значение ReLU всегда находится в интервале от 0 до ∞, что может быть ограничивающим в некоторых случаях.
Как решить проблему: нормализовать данные перед применением функции активации ReLU.
Из-за больших значений весов или несбалансированности данных в ReLU (немодифицированных версиях) может проявляться проблема «мертвых нейронов», снижающая производительность в моделях deep learning. Это значит, что если веса для определенных входных данных отрицательны или близки к нулю, то функция ReLU будет активировать нейрон только для положительных значений входа, а остальные останутся пассивными.
Вывод
Функция активации определяет выходной сигнал нейрона на основе его входа. Мы просто подставляем в нее суммированное значение произведения входных нейронных сигналов и коэффициентов весов — и получаем выходной сигнал нейронной сети.
Ниже указаны преимущества и недостатки разных функций активации:
- Пороговая функция бинарна и используется редко по причине своей непрерывности и отсутствия градиента.
- Линейная функция активации передает входной сигнал без изменений, поэтому применяется в простых моделях и не годится для представления сложных нелинейных зависимостей.
- Гиперболический тангенс (tanh) сжимает входные значения в диапазоне от −1 до 1. Он часто используется в скрытых слоях нейронных сетей, сохраняя отрицательные значения и обеспечивая нелинейность.
- Сигмоида преобразует входные значения в диапазоне от нуля до единицы. Она часто используется в задачах классификации, но страдает от проблемы затухающего градиента при обучении глубоких нейронных сетей.
- Функция активации ReLU (Rectified Linear Unit) активирует нейрон, если вход положительный, иначе — выходит 0. Она широко применяется в глубоких нейронных сетях благодаря простоте и отсутствию затухающего градиента, но может вызывать «мертвые нейроны» с отрицательным входом.
Напоследок — таблица со сравнением основных функций активации и некоторых модификаций ReLU. Сохраняйте себе, чтобы была под рукой: