Существует довольно много ресурсов, которые, вероятно, решают эту проблему лучше меня, см., Например, здесь или здесь .
В частности, проблема в том, что вы имеете дело с исчезающими (или взрывающимися) градиентами, особенно при использовании функций потерь, которые сглаживаются в любом направлении для очень маленьких / больших входов, что имеет место как для сигмовидной, так и для солнечной энергии (единственное отличие здесь - это диапазон, в котором их выходные данные лежат, что составляет [0, 1]
и [-1, 1]
соответственно.
Кроме того, если у вас десятичная дробь низкой точности, как в случае с APEX, то поведение исчезновения градиента будет гораздо более вероятным уже для относительно умеренных выходных данных, поскольку точность ограничивает числа, которые она может отличить от нуля. Один из способов справиться с этим состоит в том, чтобы иметь функции, которые имеют строго ненулевые и легко вычисляемые производные, такие как Leaky ReLU, или просто избегать функция активации в целом (что я предполагаю, что Хьюджи ngface делает здесь).
Обратите внимание, что проблема взрыва градиентов обычно не так трагична c, поскольку мы можем применить ограничение градиента (ограничив его фиксированным максимальным размером), но, тем не менее, принцип заключается в одни и те же. Для нулевых градиентов, с другой стороны, такого простого исправления не существует, поскольку оно заставляет ваши нейроны «d ie» (при нулевом обратном потоке не происходит активного обучения), поэтому я предполагаю, что вы видите расходящееся поведение.