Ян LeCun и другие утверждают , в эффективном BackProp , что
Сходимость обычно быстрее, если среднее значение каждой входной переменной по обучающему набору близко к нулю. Чтобы увидеть это, рассмотрим крайний случай, когда все входы положительны. Весовые коэффициенты для конкретного узла в первом весовом слое обновляются на величину, пропорциональную δx где δ - (скалярная) ошибка в этом узле, а x - входной вектор (см. Уравнения (5) и (10)). Когда все компоненты входного вектора являются положительными, все обновления весов, которые поступают в узел, будут иметь один и тот же знак (т.е. знак ( δ )). В результате эти веса могут только все уменьшаться или увеличиваться вместедля данного шаблона ввода. Таким образом, если вектор веса должен изменить направление, он может сделать это только зигзагообразно, что неэффективно и, следовательно, очень медленно.
Вот почему вы должны нормализовать свои входные данные, чтобы среднее значение было равно нулю.
Та же логика применима к средним слоям:
Эту эвристику следует применять на всех уровнях, что означает, что мы хотим, чтобы среднее значение выходных данных узла было близко к нулю, поскольку эти выходные данные являются входными данными для следующего уровня.
Postscript @craq подчеркивает, что эта цитата не имеет смысла для ReLU (x) = max (0, x), который стал широко популярной функцией активации. Хотя ReLU действительно избегает первой проблемы зигзага, упомянутой LeCun, он не решает эту вторую проблему со стороны LeCun, который говорит, что важно довести среднее значение до нуля. Я хотел бы знать, что LeCun должен сказать по этому поводу. В любом случае, есть документ под названием Batch Normalization , который основывается на работе LeCun и предлагает способ решения этой проблемы:
Давно известно (LeCun et al., 1998b; Wiesler & Ney, 2011), что обучение сети сходится быстрее, если его входы отбелены - то есть линейно преобразованы, чтобы иметь нулевые средние и единичные отклонения, и декоррелированы. Поскольку каждый слой наблюдает входные данные, создаваемые нижележащими слоями, было бы выгодно добиться одинакового отбеливания входных данных каждого слоя.
Кстати, это видео от Сираджа многое объясняет о функциях активации за 10 веселых минут.
@elkout говорит: «Реальная причина того, что tanh является предпочтительным по сравнению с сигмоидом (...), заключается в том, что производные tanh больше, чем производные сигмоида».
Я думаю, что это не проблема. Я никогда не видел, чтобы это было проблемой в литературе. Если вас беспокоит, что одна производная меньше другой, вы можете просто масштабировать ее.
Логистическая функция имеет форму σ( х ) = 11 + е- к х . Обычно мы используемк = 1, но ничто не запрещает вам использовать другое значение дляКчтобы сделать ваши производные более широкими, если это было вашей проблемой.
Nitpick: tanh - это тоже сигмовидная функция. Любая функция с S-образной формой является сигмоидальной. То, что вы, ребята, называете сигмоидом, является логистической функцией. Причиной, почему логистическая функция более популярна, являются исторические причины. Он использовался статистиками в течение более длительного времени. Кроме того, некоторые считают, что это более правдоподобно.