В курсе Эндрю Нг « Нейронные сети и глубокое обучение» на Coursera он говорит, что использование почти всегда предпочтительнее использования .
Причине он дает то , что выходные сигналы с помощью центром , вокруг 0 , а не «с 0.5, и это„делает обучение для следующего слоя немного легче“.
Почему центрирование выходной скорости активации обучения? Я предполагаю, что он ссылается на предыдущий уровень, поскольку обучение происходит во время backprop?
Есть ли другие особенности, которые делают предпочтительным? Будет ли более крутой градиент задерживать исчезающие градиенты?
Есть ли ситуации, когда был бы предпочтительнее?
Математические, интуитивно понятные ответы предпочтительнее.
Ответы:
Ян LeCun и другие утверждают , в эффективном BackProp , что
Вот почему вы должны нормализовать свои входные данные, чтобы среднее значение было равно нулю.
Та же логика применима к средним слоям:
Postscript @craq подчеркивает, что эта цитата не имеет смысла для ReLU (x) = max (0, x), который стал широко популярной функцией активации. Хотя ReLU действительно избегает первой проблемы зигзага, упомянутой LeCun, он не решает эту вторую проблему со стороны LeCun, который говорит, что важно довести среднее значение до нуля. Я хотел бы знать, что LeCun должен сказать по этому поводу. В любом случае, есть документ под названием Batch Normalization , который основывается на работе LeCun и предлагает способ решения этой проблемы:
Кстати, это видео от Сираджа многое объясняет о функциях активации за 10 веселых минут.
@elkout говорит: «Реальная причина того, что tanh является предпочтительным по сравнению с сигмоидом (...), заключается в том, что производные tanh больше, чем производные сигмоида».
Я думаю, что это не проблема. Я никогда не видел, чтобы это было проблемой в литературе. Если вас беспокоит, что одна производная меньше другой, вы можете просто масштабировать ее.
Логистическая функция имеет формуσ( х ) = 11 + е- к х . Обычно мы используемк = 1 , но ничто не запрещает вам использовать другое значение дляК чтобы сделать ваши производные более широкими, если это было вашей проблемой.
Nitpick: tanh - это тоже сигмовидная функция. Любая функция с S-образной формой является сигмоидальной. То, что вы, ребята, называете сигмоидом, является логистической функцией. Причиной, почему логистическая функция более популярна, являются исторические причины. Он использовался статистиками в течение более длительного времени. Кроме того, некоторые считают, что это более правдоподобно.
источник
Но почему у гиперболического тангенса есть большие производные? Просто чтобы дать вам очень простую интуицию, вы можете наблюдать следующий график:
Тот факт, что диапазон составляет от -1 до 1 по сравнению с 0 и 1, делает функцию более удобной для нейронных сетей. Кроме того, если я использую некоторую математику, я могу доказать, что:
источник
sigmoid(x) - 0.5
tanh
Отвечая на часть вопроса до сих пор без ответа:
Эндрю Нг говорит, что использование логистической функции (обычно называемой сигмоидальной) действительно имеет смысл только на последнем уровне бинарной сети классификации.
источник
Все это существенно зависит от производных функции активации, основная проблема с сигмоидальной функцией заключается в том, что максимальное значение ее производной составляет 0,25, это означает, что обновление значений W и b будет небольшим.
Функция tanh, с другой стороны, имеет производную до 1,0, что значительно увеличивает обновления W и b.
Это делает функцию tanh почти всегда лучше как функцию активации (для скрытых слоев), а не как сигмовидную функцию.
Чтобы доказать это самому (по крайней мере, в простом случае), я кодировал простую нейронную сеть и использовал сигмоид, тан и рэлу в качестве функций активации, затем я нарисовал, как развивалось значение ошибки, и это то, что я получил.
Полный блокнот, который я написал, находится здесь https://www.kaggle.com/moriano/a-showcase-of-how-relus-can-speed-up-the-learning
Если это помогает, вот графики производных функции tanh и сигмовидной (обратите внимание на вертикальную ось!)
источник