Библиотека для дифференцируемой нелинейной оптимизации
Бумага • Видео • Твиттер • Веб -страница • Учебные пособия
Thiteus-это эффективная библиотека, оживленная приложением, для создания пользовательских нелинейных слоев оптимизации в Pytorch для поддержки создания различных проблем в робототехнике и видении в качестве сквозных дифференцируемых архитектур.
Дифференцируемая нелинейная оптимизация обеспечивает общую схему для кодирования индуктивных априоров, так как целевая функция может быть частично параметризована нейронными моделями и частично с экспертными специфическими моделями, специфичными для экспертов. Способность вычислять градиенты, которые удерживается, сохраняется путем дифференциации через оптимизатор, который позволяет нейронным моделям тренироваться с окончательной потерей задачи, а также использует преимущества априоров, захваченных оптимизатором.
См. Список документов, опубликованных с использованием THEUS для примеров в различных областях приложения.
Наша реализация обеспечивает прост в использовании интерфейс для создания пользовательских слоев оптимизации и подключения их к любой нейронной архитектуре. В настоящее время доступны следующие дифференцируемые функции:
Мы поддерживаем несколько функций, которые улучшают время вычисления и потребление памяти:
torch . Чтобы установить для вашей конкретной конфигурации процессора/CUDA, следуйте инструкциям на веб -сайте Pytorch.nvcc --version . Если нет, установите его и убедитесь, что его местоположение находится на переменной $PATH вашей системы.suitesparse , который вы можете установить через:sudo apt-get install libsuitesparse-dev (ubuntu).conda install -c conda-forge suitesparse (Mac).пипи
pip install theseus-aiВ настоящее время мы предоставляем колеса с нашими расширениями CUDA, составленными с использованием CUDA 11.6 и Python 3.10. Для других версий CUDA рассмотрите возможность установки из источника или использования нашего сценария сборки.
Обратите внимание, что установка pypi не включает в себя наши экспериментальные лаборатории Thenus. Для этого, пожалуйста, установите из Source.
Самый простой способ установить Thenus из Source - запустить следующее (см. Далее ниже, чтобы также включить Baspacho)
git clone https://github.com/facebookresearch/theseus.git && cd theseus
pip install -e .Если вы заинтересованы в участии в Тесее, вместо этого установите
pip install -e " .[dev] "
pre-commit installи следуйте более подробным инструкциям в содействии.
Установка расширений Baspacho из Source
По умолчанию установка из Source не включает наше расширение Sparse Solver Baspacho. Для этого следуйте этим шагам:
Скомпилируйте Baspacho из источника следующих инструкций здесь. Мы рекомендуем использовать флаги -DBLA_STATIC=ON -DBUILD_SHARED_LIBS=OFF .
Бегать
git clone https://github.com/facebookresearch/theseus.git && cd theseus
BASPACHO_ROOT_DIR= < path/to/root/baspacho/dir > pip install -e . где корень Баспачо должен иметь двоичные файлы в подкатальной build .
dev ) python -m pytest tests По умолчанию модульные тесты включают тесты для наших расширений CUDA. Вы можете добавить опцию -m "not cudaext" , чтобы пропустить их при установке без поддержки CUDA. Кроме того, тесты для разреженного решателя Baspacho автоматически пропускаются, когда его extlib не составлен.
Простой пример. Этот пример подходит к кривой Objective с единственной CostFunction , которая вычисляет остаточную Objective и оптимизатор GaussNewton инкапсулируются в TheseusLayer . С потерей Adam и MSE, TheseusLayer .
import torch
import theseus as th
x_true , y_true , v_true = read_data () # shapes (1, N), (1, N), (1, 1)
x = th . Variable ( torch . randn_like ( x_true ), name = "x" )
y = th . Variable ( y_true , name = "y" )
v = th . Vector ( 1 , name = "v" ) # a manifold subclass of Variable for optim_vars
def error_fn ( optim_vars , aux_vars ): # returns y - v * exp(x)
x , y = aux_vars
return y . tensor - optim_vars [ 0 ]. tensor * torch . exp ( x . tensor )
objective = th . Objective ()
cost_function = th . AutoDiffCostFunction (
[ v ], error_fn , y_true . shape [ 1 ], aux_vars = [ x , y ],
cost_weight = th . ScaleCostWeight ( 1.0 ))
objective . add ( cost_function )
layer = th . TheseusLayer ( th . GaussNewton ( objective , max_iterations = 10 ))
phi = torch . nn . Parameter ( x_true + 0.1 * torch . ones_like ( x_true ))
outer_optimizer = torch . optim . Adam ([ phi ], lr = 0.001 )
for epoch in range ( 10 ):
solution , info = layer . forward (
input_tensors = { "x" : phi . clone (), "v" : torch . ones ( 1 , 1 )},
optimizer_kwargs = { "backward_mode" : "implicit" })
outer_loss = torch . nn . functional . mse_loss ( solution [ "v" ], v_true )
outer_loss . backward ()
outer_optimizer . step ()См. Учебные пособия, а также примеры робототехники и видения, чтобы узнать об API и использовании.
Если вы используете Тесус в своей работе, пожалуйста, процитируйте бумагу с Bibtex ниже.
@article { pineda2022theseus ,
title = { {Theseus: A Library for Differentiable Nonlinear Optimization} } ,
author = { Luis Pineda and Taosha Fan and Maurizio Monge and Shobha Venkataraman and Paloma Sodhi and Ricky TQ Chen and Joseph Ortiz and Daniel DeTone and Austin Wang and Stuart Anderson and Jing Dong and Brandon Amos and Mustafa Mukadam } ,
journal = { Advances in Neural Information Processing Systems } ,
year = { 2022 }
}Тесея лицензирована MIT. Смотрите лицензию для деталей.
Тесу может стать возможным благодаря следующим участникам:
Сделано из ouctrib.rocks.