Различные весовые функции для нейронов

Я поигрался с TensorFlow и сделал общую полностью подключенную модель.

На каждом слое я применяю

sigmoid(WX + B)

который, как всем известно, хорошо работает.

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

sigmoid(U(X^2) + WX + B)

работают так же хорошо, когда они оптимизированы.

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

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


person Michael Hackman    schedule 16.05.2017    source источник
comment
Интересно: en.wikipedia.org/wiki/Activation_function. Существует множество различных функций активации. stats.stackexchange.com/questions/115258/   -  person Thomas Wagenaar    schedule 16.05.2017


Ответы (2)


Теоретически оба метода имеют одинаковый потенциал и могут достичь любой непрерывной целевой функции при наличии достаточного количества слоев и времени/данных обучения. Использование sigmoid(U(X^2) + WX + B) делает каждый слой более интеллектуальным, но также и более сложным для изучения (особенно без переобучения), поэтому, если вы используете его, вам следует добавлять в свою сеть меньше слоев, чтобы избежать переобучения.

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

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

Что касается общего времени работы, я понятия не имею, что будет лучше (учитывая, что вы используете меньше слоев во втором варианте).

person gdelab    schedule 16.05.2017

Таким образом, в основном есть три важных фактора при рассмотрении вашей проблемы:

  1. Вычислительная сложность и стабильность: вычисление вашей функции (теоретически) должно занять больше времени, так как потребуются как минимум еще две операции. Я думаю, что в этом случае это не проблема, но, например. сравнение sigmoid, где вам нужно вычислить и exp, и деление, намного дороже, чем вычисление relu - что было одной из причин, почему relu стал таким популярным. Более того, поскольку квадратная функция расходится очень быстро, а насыщение sigmoid является хорошо известной проблемой, вы также можете серьезно пострадать от исчезающего градиента и вычислительного переполнения/неполного заполнения.
  2. Количество параметров: есть дополнительный заданный параметр, связанный с каждым блоком во втором подходе. В случае, когда ваша модель маленькая - это не большая проблема - но пока нейронные сети используются для действительно памяти и трудоемкой задачи - это может быть огромным недостатком второй активации. Это также отчасти является причиной того, что действительно простые функции удобнее использовать в глубоком обучении.
  3. Выразительная сила — именно здесь может помочь ваша вторая функция. Не только потому, что square усложняет вашу функцию. Это также связано с тем, что на самом деле ваша функция асимптотически колоколообразна, что может улучшить отлов локальных зависимостей. Это может быть огромным недостатком как sigmoid, так и relu, так как обе эти функции заставляют каждую единицу оказывать глобальное влияние на ваш прогноз, тогда как колокольчатые функции имеют тенденцию отдавать предпочтение локальным зависимостям, не затрагивая данные. точки, лежащие за пределами этих областей интереса. На практике обычно эта проблема решается путем применения действительно глубокой и широкой топологии, которая в случае огромного набора данных обычно уравновешивает влияние отдельных единиц.
person Marcin Możejko    schedule 16.05.2017