차별화 가능한 비선형 최적화를위한 라이브러리
종이 • 비디오 • 트위터 • 웹 페이지 • 자습서
Tessus는 Pytorch에 맞춤형 비선형 최적화 계층을 구축하기위한 효율적인 응용 프로그램 라이브러리입니다.
차별화 가능한 비선형 최적화는 객관적인 기능이 신경 모델에 의해 부분적으로 매개 변수화 될 수 있고 부분적으로 전문가 도메인 별 차별화 가능한 모델로 유도 사전을 인코딩하는 일반적인 체계를 제공합니다. 신경 모델이 최종 작업 손실을 훈련시키는 동시에 최적화에 의해 캡처 된 사전을 활용하여 최적화를 통해 구배 엔드 투 엔드를 계산하는 능력이 유지됩니다.
다양한 응용 분야의 예제를 위해 테세우스를 사용하여 게시 된 논문 목록을 참조하십시오.
우리의 구현은 사용하기 쉬운 인터페이스를 제공하여 사용자 정의 최적화 계층을 구축하고 신경 아키텍처에 연결합니다. 다음과 같은 차별화 된 기능을 사용할 수 있습니다.
계산 시간과 메모리 소비를 개선하는 몇 가지 기능을 지원합니다.
torch 설치가 필요합니다. 특정 CPU/CUDA 구성을 설치하려면 Pytorch 웹 사이트의 지침을 따르십시오.nvcc --version 으로 Pytorch를 컴파일하는 데 사용되는 버전과 일치하십시오. 그렇지 않은 경우 설치하고 위치가 시스템의 $PATH 변수에 있는지 확인하십시오.suitesparse 필요하며 다음을 통해 설치할 수 있습니다.sudo apt-get install libsuitesparse-dev (ubuntu).conda install -c conda-forge suitesparse (Mac).pypi
pip install theseus-ai우리는 현재 Cuda 11.6 및 Python 3.10을 사용하여 컴파일 된 Cuda 확장 기능을 바퀴에 제공합니다. 다른 CUDA 버전의 경우 소스에서 설치하거나 빌드 스크립트 사용을 고려하십시오.
pypi 설치에는 실험 메세 서 랩이 포함되어 있지 않습니다. 이를 위해 소스에서 설치하십시오.
소스에서 테세우스를 설치하는 가장 간단한 방법은 다음을 실행하는 것입니다 (Baspacho를 포함하려면 아래를 참조하십시오).
git clone https://github.com/facebookresearch/theseus.git && cd theseus
pip install -e .테세우스에 기여하는 데 관심이 있으시면 대신 설치하십시오.
pip install -e " .[dev] "
pre-commit install기여에 대한보다 자세한 지침을 따르십시오.
소스에서 Baspacho 확장 프로그램 설치
기본적으로 소스에서 설치에는 Baspacho Sparse Solver Extension이 포함되지 않습니다. 이를 위해 다음 단계를 따르십시오.
여기에 지침에 따라 소스에서 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 . Baspacho Root Dir는 서브 디렉토리 build 에 바이너리가 있어야합니다.
dev 설치 필요) python -m pytest tests 기본적으로 단위 테스트에는 CUDA 확장 테스트가 포함됩니다. CUDA 지원없이 설치할 때 옵션 -m "not cudaext" 옵션을 추가 할 수 있습니다. 또한 Sparse Solver Baspacho에 대한 테스트는 Extlib가 컴파일되지 않을 때 자동으로 건너 뜁니다.
간단한 예. 이 예제는 곡선에 맞습니다 CostFunction 가진 Objective 로 모델링됩니다. Objective 와 GaussNewton Optimizer는 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 라이센스가 부여되었습니다. 자세한 내용은 라이센스를 참조하십시오.
테세우스는 다음 기고자들에 의해 가능합니다.
Contrib.rocks로 만들어졌습니다.