Быстрая реализация градиентного спуска в библиотеке C++?

Я ищу, чтобы запустить оптимизацию градиентного спуска, чтобы минимизировать стоимость создания экземпляра переменных. Моя программа очень вычислительно дорогая, поэтому я ищу популярную библиотеку с быстрой реализацией GD. Что такое рекомендуемая библиотека / справочник?

4 ответов


GSL - отличная (и бесплатная) библиотека, которая уже реализует общие функции математического и научного интереса.

вы можете просмотреть через весь справочное руководство онлайн. Ковыряться, этой начинает выглядеть интересно, но я думаю, нам нужно больше узнать о проблеме.


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

в любом случае, я подозреваю, что эта библиотека чрезмерна для того, что вам нужно. Но вот части, относящиеся к минимизации:местные Минимизация и Глобальной Минимизации.


похоже, вы довольно новичок в методах минимизации. Всякий раз, когда мне нужно изучить новый набор числовых методов, я обычно смотрю в Численные Рецепты. Это книга, которая дает хороший обзор наиболее распространенных методов в этой области, их компромиссов и (что важно), где искать в литературе дополнительную информацию. Обычно это не то место, где я останавливаюсь, но часто это полезная отправная точка.

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

Если у вас нет аналитических градиентов, то вам почти всегда лучше использовать такой подход, как горные симплекс это только оценивает функцию (а не ее градиенты). Числовые градиенты дорого.

также обратите внимание, что все эти подходы будут сходиться к локальным минимумам, поэтому они довольно чувствительны к точке, в которой вы изначально запускаете оптимизатор. Глобальная оптимизация - совсем другое дело.

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

с точки зрения фактического кода, Вы можете найти много хороших процедур в библиотека netlib, в дополнение к другим библиотекам, которые были упомянуты. Большинство процедур находятся в FORTRAN 77, но не все; чтобы преобразовать их в C,завод f2c вполне полезный.


попробовать CPLEX который доступен бесплатно для студентов.