Автоматическое дифференцирование позволяет нам численно оценить производную программы на конкретном входе. Существует теорема, что это вычисление может быть выполнено со стоимостью, в пять раз меньшей стоимости запуска оригинальной программы. Этот коэффициент пять является верхней границей.
В каких ситуациях эта стоимость может быть дополнительно уменьшена? Многие производные коды в поле работают со скоростью, близкой к скорости исходной программы. Что сделано, чтобы получить это ускорение?
Какие черты исходной программы можно использовать для ускорения вычислений?
Какие приемы разработки программного обеспечения можно использовать для ускорения вычислений?
automatic-differentiation
efficiency
MRocklin
источник
источник
Ответы:
Мое ограниченное понимание AD совпадает с тем, что сказал Мэтт. Чтобы ускорить вычисление производных, структура графа выражений должна использовать разреженность и дефицитность в множестве якобиевых матриц. (См. Эту статью Griewank для получения дополнительной информации.) Уловки программной инженерии, скорее всего, заключаются в самом коде AD, чтобы реструктурировать граф выражений, чтобы использовать эти свойства в наборе якобиевых матриц. Знание того, как код AD генерирует граф выражений из кода, который вы пишете, в свою очередь, поможет вам лучше понять, как писать код, который требует меньше вычислений. Любой хороший код AD должен уже использовать преимущества встроенных общих выражений, но хорошие коды AD сложно написать.
Стандартным справочником в этой области является « Оценка производных: принципы и методы алгоритмического дифференцирования», второе издание, написанное Андреасом Гривенком и Андреа Вальтером, и они должны предоставить более подробную информацию о том, как сократить количество вычислений, необходимых для оценки производной программы.
источник
Любой AD по-прежнему нуждается в предоставлении этих встроенных функций, поэтому я не могу понять, как это связано с общей сложностью выражения. Я предполагаю, что вы можете классифицировать сложность по количеству путей в графе выражений, так как вы формулируете AD таким образом. Эндрю Лайонс хорошо поработал над последовательными графами.
источник