Я тренировал алгоритм для предсказания скидки, которая будет от 1 до 100%. Я обнаружил, что некоторые из прогнозируемых значений были вне этого диапазона, либо отрицательными, либо выше 1. Я хотел обновить свою функцию стоимости, чтобы наказать прогнозы за пределами диапазона [0,1].

Итак, я добавил априорное распределение вероятностей, которое равномерно в диапазоне [0,1] и ноль везде:

Чтобы сделать функцию дифференцируемой, мы меняем шаги с помощью сигмоидальных функций.

P(y)=σ(ϕy)σ(ϕ(1−y))

Это приводит к дополнительному члену в функции стоимости:

C = - logσ (ϕy) - logσ (ϕ (1− y))

Как мы видим, производная дополнительного члена равна нулю в пределах допустимого интервала, но за его пределами у нас есть наклоны, которые приведут функцию стоимости к допустимой области. Я протестировал этот подход в проблеме, над которой работаю (обнаружение ошибок ценообразования), и он сработал довольно хорошо. И, поскольку я использую TensorFlow, мне не нужно беспокоиться об ошибках при вычислении частных производных, потому что TensorFlow выполняет вычисления за меня!