Я не совсем эксперт по оптимизации, но: это зависит от того, что вы подразумеваете под «недифференцируемым».
Для многих используемых математических функций «недифференцируемое» будет означать просто «не везде дифференцируемо» «- но это все еще« дифференцируемо почти везде, кроме как на счетном количестве точек »(например, abs
, relu
). Эти функции совсем не проблема - вы можете просто выбрать любой субградиент и применить любой метод нормального градиента. Это то, что в основном делают все системы AD для машинного обучения. В любом случае случай с неособыми субградиентами произойдет с низкой вероятностью. Альтернативой для некоторых форм выпуклых целей являются методы проксимального градиента , которые эффективно "сглаживают" цель, сохраняя оптимум (ср. ProximalOperators.jl ).
Тогда есть те функции, которые, кажется, не могут быть дифференцированы вообще, поскольку они кажутся «комбинаторными c» или дискретными, но фактически являются кусочно-дифференцируемыми (если смотреть с правильной точки зрения). Это включает в себя сортировку и рейтинг . Но вы должны их найти, и описать и реализовать производную довольно сложно. Поддерживаются ли такие функции системой AD, зависит от того, насколько сложна ее «стандартная библиотека». Некоторые варианты этого, такие как «перестановка», могут просто выпадать из AD через управляющие структуры, в то время как для перемещения сложных требуются ручные определения примитивных примыканий.
Однако для определенных типов проблем мы просто работаем в внутренне дискретные пространственно-подобные целочисленные параметры некоторых вероятностных распределений. В этом случае дифференцирование не имеет смысла, и, следовательно, библиотеки AD определяют свои примитивы, чтобы они не работали с этими параметрами. Возможные альтернативы - использовать (смешанное) целочисленное программирование, приближения, поиск и выбор модели. Этот случай также имеет место для задач, где само оптимизированное пространство зависит от рассматриваемого параметра, например, второй аргумент fill
. У нас также есть такие вещи, как ℓ0 «норма» или ранг матрицы, для которой существуют хорошо известные непрерывные релаксации, но это выходит за рамки AD).
( В конкретном c случае MCM C для дискретных или размерных параметров есть другие способы справиться с этим, например, объединение HM C с другими методами M C в сэмплере Гиббса или использование непараметрии c модель вместо этого. Другие возможности возможны для VI .)
При этом вы редко встретите сложные нигде не дифференцируемые непрерывные функции при оптимизации. Их уже сложно описать, просто вряд ли они возникнут в той математике, которую мы используем для моделирования.