Могу ли я использовать автоматическое дифференцирование c для недифференцируемых функций? - PullRequest
0 голосов
/ 13 марта 2020

Я тестирую производительность различных решателей при минимизации целевой функции, полученной из смоделированного метода моментов. Учитывая, что моя целевая функция не дифференцируема, мне интересно, сработает ли автоматическое дифференцирование c в этом случае? Я старался изо всех сил прочитать некоторое введение в этот метод, но я не мог понять это.

Я на самом деле пытаюсь использовать Ipopt + JuMP в Julia для этого теста. Ранее я тестировал его с помощью BlackBoxoptim в Юлии. Я также буду признателен, если вы предоставите некоторые идеи по оптимизации недифференцируемых функций в Джулии.


Похоже, я не совсем понимаю, что такое "недифференцируемый". Позвольте привести пример. Рассмотрим следующую целевую функцию . X - набор данных, B - ненаблюдаемые случайные ошибки, которые будут интегрированы, \ theta - параметры. Тем не менее, A является дискретным и, следовательно, не дифференцируемым.

1 Ответ

1 голос
/ 13 марта 2020

Я не совсем эксперт по оптимизации, но: это зависит от того, что вы подразумеваете под «недифференцируемым».

Для многих используемых математических функций «недифференцируемое» будет означать просто «не везде дифференцируемо» «- но это все еще« дифференцируемо почти везде, кроме как на счетном количестве точек »(например, abs, relu). Эти функции совсем не проблема - вы можете просто выбрать любой субградиент и применить любой метод нормального градиента. Это то, что в основном делают все системы AD для машинного обучения. В любом случае случай с неособыми субградиентами произойдет с низкой вероятностью. Альтернативой для некоторых форм выпуклых целей являются методы проксимального градиента , которые эффективно "сглаживают" цель, сохраняя оптимум (ср. ProximalOperators.jl ).

Тогда есть те функции, которые, кажется, не могут быть дифференцированы вообще, поскольку они кажутся «комбинаторными c» или дискретными, но фактически являются кусочно-дифференцируемыми (если смотреть с правильной точки зрения). Это включает в себя сортировку и рейтинг . Но вы должны их найти, и описать и реализовать производную довольно сложно. Поддерживаются ли такие функции системой AD, зависит от того, насколько сложна ее «стандартная библиотека». Некоторые варианты этого, такие как «перестановка», могут просто выпадать из AD через управляющие структуры, в то время как для перемещения сложных требуются ручные определения примитивных примыканий.

Однако для определенных типов проблем мы просто работаем в внутренне дискретные пространственно-подобные целочисленные параметры некоторых вероятностных распределений. В этом случае дифференцирование не имеет смысла, и, следовательно, библиотеки AD определяют свои примитивы, чтобы они не работали с этими параметрами. Возможные альтернативы - использовать (смешанное) целочисленное программирование, приближения, поиск и выбор модели. Этот случай также имеет место для задач, где само оптимизированное пространство зависит от рассматриваемого параметра, например, второй аргумент fill. У нас также есть такие вещи, как ℓ0 «норма» или ранг матрицы, для которой существуют хорошо известные непрерывные релаксации, но это выходит за рамки AD).

( В конкретном c случае MCM C для дискретных или размерных параметров есть другие способы справиться с этим, например, объединение HM C с другими методами M C в сэмплере Гиббса или использование непараметрии c модель вместо этого. Другие возможности возможны для VI .)

При этом вы редко встретите сложные нигде не дифференцируемые непрерывные функции при оптимизации. Их уже сложно описать, просто вряд ли они возникнут в той математике, которую мы используем для моделирования.

...