Что касается автоматического дифференцирования, является ли преобразование исходного кода (STC) более эффективным, чем перегрузка оператора (OO)?


12

Мы работаем над байесовской моделью для пространственно-временного процесса и используем сэмплер No-U-Turn (NUTS), который требует модель для логарифмической вероятности и ее градиента по отношению к параметрам модели. Более кратко, у нас есть довольно сложная функция логарифмической вероятности , включающая статистические распределения, произведения Кронекера, экспоненты, отношения, операторы if-else и т. Д., И мы должны предоставить ее, и это градиент к NUTS. Несколько пакетов ( MCMC Стэна и Джулии ) используют перегрузку операторов (насколько мне известно) для автоматического получения градиента.f:RnR

Если бы мы смогли создать нашу собственную функцию градиента, возможно, с помощью инструмента автоматической разницы преобразования исходного кода, мы бы получили более высокую производительность или OO такой же хороший или лучший?

Ответы:


9

Преобразование источник-источник считается золотым стандартом с точки зрения производительности. ОО-подходы кажутся почти такими же хорошими в том, что существует больше ОО-пакетов, а производительность не упоминается как существенный недостаток. Если вы найдете OO-библиотеку, которая вам нравится для языка, на котором вы работаете, я сначала воспользуюсь им, а затем выясню, действительно ли вам нужно преобразование из источника в источник и существует ли такой инструмент, отвечающий вашим потребностям. Типичная стоимость производного с автоматической дифференциацией примерно в три-пять раз выше, чем при оценке функции.

Существует больше OO-пакетов, потому что проще реализовать инструменты автоматического дифференцирования с использованием перегрузки операторов, чем использовать перевод из источника в источник. Реализация транслятора от источника к источнику равносильна написанию компилятора: исходный код должен быть проанализирован и разбит на токены, затем к результирующему дереву выражений должны быть применены правила преобразования. Книга Андреаса Гриеванка «Оценка дериватов: принципы и методы алгоритмического дифференцирования», второе издание, более подробно описывает компромиссы.


Спасибо Джефф, это очень помогает, особенно ваша оценка типичных затрат.
Мэтью Эммет

1

Для вычисления градиента вы используете обратный режим AD. В обоих случаях это требует построения стека операндов, а версия OO также должна создавать стек операций, который должен интерпретироваться при обратном обходе кода. Исходный преобразованный код записывает операции в обратном порядке как дополнительный исходный код, который компилируется. Затраты на использование интерпретатора операций в коде могут быть значительными. Есть сравнения сгенерированного кода Tapenade и Adol-C, которые выступают за Tapenade.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.