Зачем использовать tanh для активации функции MLP?

Я лично изучаю теории нейронных сетей и получил несколько вопросов.

Во многих книгах и справочниках для активации функции скрытого слоя использовались гиперкасательные функции.

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

Но возник вопрос.

  1. Это реальная причина, по которой используется функция tanh?
  2. Если тогда, это единственная причина, почему функция tanh используется?
  3. если тогда, функция tanh - единственная функция, которая может сделать это?
  4. если нет, то какова реальная причина?..

Здесь я продолжаю думать... пожалуйста, помогите мне выбраться из этой умственной (?...) ловушки!

6 ответов

Решение

На самом деле могут быть использованы как тан, так и логистические функции. Идея состоит в том, что вы можете отобразить любое действительное число ( [-Inf, Inf]) на число между [-1 1] или [0 1] для tanh и logistic соответственно. Таким образом, можно показать, что комбинация таких функций может аппроксимировать любую нелинейную функцию. Что касается предпочтения tanh перед логистической функцией, так это то, что первое симметрично относительно 0, а второе нет. Это делает второй более склонным к насыщению более поздних слоев, делая обучение более трудным.

Большую часть времени tanh быстро сходится, чем сигмоидальная и логистическая функция, и выполняет более высокую точность [1]. Однако недавно Хинтон [2] предложил недавно выпрямленную линейную единицу (ReLU), которая показывает, что поезд ReLU в шесть раз быстрее, чем tanh [3], чтобы достичь той же ошибки обучения. И вы можете обратиться к [4], чтобы увидеть, какие преимущества дает ReLU.


В соответствии с около 2-х лет опыта машинного обучения. Я хочу поделиться некоторыми стратегиями, которые используются чаще всего, и моим опытом в области компьютерного зрения.

Нормализация ввода очень важна

Хорошая нормализация может улучшить производительность и быстро сходиться. Большую часть времени мы будем вычитать среднее значение, чтобы входное значение было равно нулю, чтобы весы не меняли одни и те же направления и медленно сходились [5]. Недавно Google также указывает на это явление как на внутренний смещенный ковариат при обучении глубокому обучению, и они предложили нормализацию партии [6], чтобы нормализовать каждый вектор, имеющий нулевое среднее значение и единичную дисперсию.

Больше данных, больше точности

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

Выбор хорошей функции активации позволяет тренироваться лучше и эффективнее.

Нелинейная активация ReLU работала лучше и давала современные результаты в области глубокого обучения и MLP. Более того, у него есть некоторые преимущества, например, простота реализации и более дешевые вычисления при обратном распространении для эффективного обучения более глубокой нейронной сети. Тем не менее, ReLU получит нулевой градиент и не будет тренироваться, когда блок активен в ноль. Следовательно, предлагается несколько модифицированных ReLU, например, Leaky ReLU и Noise ReLU, и наиболее популярным методом является PReLU [7], предложенный Microsoft, который обобщил традиционную рецитированную единицу.

другие

  • выберите большую начальную скорость обучения, если она не будет колебаться или расходиться, чтобы найти лучший глобальный минимум.
  • перетасовывание данных

Чтобы добавить к уже существующему ответу, предпочтение симметрии около 0 - это не только вопрос эстетики. Отличный текст LeCun и др. " Efficient BackProp" в мельчайших подробностях показывает, почему неплохо, чтобы входной, выходной и скрытый слои имели средние значения 0 и стандартное отклонение 1.

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

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

http://playground.tensorflow.org/ <- этот сайт представляет собой фантастическую визуализацию функций активации и других параметров нейронной сети. Не прямой ответ на ваш вопрос, а инструмент "обеспечивает интуицию", как сказал бы Эндрю Нг.

Многие ответы здесь описывают, почему tanh (то есть (1 - e^2x) / (1 + e^2x)) предпочтительнее сигмоидной / логистической функции (1 / (1 + e^-x)), но это должно отметил, что есть веская причина, почему это две наиболее распространенные альтернативы, которые следует понимать, а именно то, что во время обучения MLP с использованием алгоритма обратного распространения алгоритм требует значения производной функции активации в точке активация каждого узла в сети. Хотя обычно это можно рассчитать для большинства вероятных функций активации (кроме тех, у которых есть разрывы, что является для них проблемой), для этого часто требуются дорогостоящие вычисления и / или сохранение дополнительных данных (например, значения ввода в функцию активации, что не требуется в противном случае после расчета выходных данных каждого узла). Однако Тан и логистическая функция имеют очень простые и эффективные вычисления для своих производных, которые можно рассчитать по выходным данным функций; т. е. если взвешенная сумма входных значений узла равна v, а его выходная величина равна u, нам нужно знать du/dv, который можно рассчитать по u, а не по более традиционному v: для tanh это 1 - u^2 и для логистической функции это ты * (1 - ты). Этот факт делает эти две функции более эффективными для использования в сети обратного распространения, чем большинство альтернатив, поэтому обычно требуется убедительная причина отклоняться от них.

В глубоком обучении ReLU стала предпочтительной функцией активации, потому что математика намного проще по сравнению с сигмовидными функциями активации, такими как tanh или logit, особенно если у вас много слоев. Чтобы присвоить веса с помощью обратного распространения, вы обычно вычисляете градиент функции потерь и применяете цепное правило для скрытых слоев, то есть вам нужна производная от функций активации. ReLU - это функция линейного изменения, в которой у вас есть плоская часть, где производная равна 0, и скошенная часть, где производная равна 1. Это очень упрощает математику. Если вы используете гиперболический тангенс, вы можете столкнуться с проблемой градиента затухания, что означает, что если x меньше -2 или больше 2, производная становится очень маленькой, и ваша сеть может не сходиться, или у вас может быть мертвый нейрон, который больше не срабатывает.

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

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

Другие вопросы по тегам