Градиентный спуск с Tanh, 0 градиент при неправильной классификации? - PullRequest
0 голосов
/ 23 апреля 2020

Производная функции активации tanh (x) равна 1-tanh ^ 2 (x). При выполнении градиентного спуска для этой функции эта производная становится частью градиентов для весов.

Например, со среднеквадратичной ошибкой: dL / dw = (tanh (x) - y) * (1 - tanh ^ 2 (x)) * dx / dw

Когда tanh ( x) равен 1 или -1, термин tanh ^ 2 (x) становится равным 1.

Это означает, что если предсказан правильный класс, то 1-tanh ^ 2 (x) равен 0, и таким образом, градиент потерь становится равным 0, и поэтому веса не обновляются.

Однако по той же причине это может означать, что, если прогнозируется совершенно неправильный класс, тогда градиент по-прежнему равен 0 , таким образом, не вызывая обновления. Предположительно, это противоположно тому, что вы хотите, чтобы произошло.

Это проблема? Если да, то как избежать / исправить эту проблему?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Хорошая новость заключается в том, что tanh(x) становится только +/- 1, когда x равно +/- бесконечности, поэтому вам не нужно слишком беспокоиться об этом.

Однако градиенты становятся ослаблен на x с более высоким абсолютным значением, поэтому вам следует:

  1. z-нормализовать ваши входы и правильно инициализировать веса в сети [1]
  2. Использовать * ReLU для более глубокого сетей.

Для дальнейшего чтения по запросу «исчезающие градиенты».

[1] http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf

0 голосов
/ 23 апреля 2020

Эту проблему можно избежать, выбрав прогнозные значения 0 и 1 для каждого из классов (в случае классификации двух классов). Т.е. вы обычно не можете горячо кодировать в отрицательные значения.

...