Стабильная функция Softmax возвращает неправильный вывод - PullRequest
0 голосов
/ 25 апреля 2020

Я реализовал функцию Softmax и позже обнаружил, что она должна быть стабилизирована, чтобы быть численно устойчивой (дух). И теперь, это снова не стабильно, потому что даже после вычитания max (x) из моего вектора, заданные векторные значения все еще слишком велики, чтобы иметь возможность быть степенями e . Вот изображение кода, который я использовал для определения ошибки, вектор здесь - пример выходного вектора от прямого распространения:


enter image description here

Мы можем ясно видеть, что значения слишком велики, и вместо вероятности я получаю эти действительно маленькие числа, которые приводят к небольшой ошибке, которая приводит к исчезновению градиентов и, наконец, к невозможности обучения сети.

1 Ответ

1 голос
/ 25 апреля 2020

Вы совершенно правы, просто перевод математического определения softmax может сделать его нестабильным, поэтому вы должны вычесть максимум x перед выполнением любого вычисления.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...