LBFGS, Barzilai Borwein 그라디언트 디센트 및 비선형 켤레 그라디언트를 포함하여 GPU에서 매우 다양한 비선형 솔버를 구현했습니다.
이를 위해 Dai & Yuan의 비선형 켤레 구배가 가장 효율적이었습니다. 일반적으로, 다른 버전의 비선형 켤레 구배가 더 효율적일 수 있지만 (CG-DESCENT와 같이) 구현하기가 더 까다로울 수도 있습니다.
LBFGS는 일반적으로 매우 확실한 선택이며, 실제로 메모리에 묶이지 않으면 시작하는 것이 가장 좋습니다.
켤레 그라디언트와 BFGS 모두 라인 검색이 필요합니다. fp32가 문제가되는 곳입니다. 줄 검색에 표준 Wolfe 조건을 사용하는 대신 여기에 제안 된 대략적인 Wolfe 조건을 사용하는 것이 좋습니다 . 이 논문은 약간 관련되어 있지만 중요한 것은 방정식 4.1입니다. 본질적으로 함수를 계산할 수있는 정밀도를 명시 적으로 소개합니다.
GPU에 대한 고려 사항 :
작은 문제가 많이 있는데, 하나의 큰 문제에 대한 사용 사례와 약간 다릅니다. 함수와 기울기 평가를 병렬화하여 블록의 모든 스레드를 사용할 수있는 경우 GPU 블록 당 1 개의 문제를 실행하는 것이 좋습니다. 이렇게하면 다른 문제에 다른 반복 횟수가 필요한 경우 문제가되지 않습니다.
이것이 옵션이 아닌 경우 LBFGS 솔버를 사용합니다. 함수가 올바르게 작동하면 단계 크기를 1 (줄 검색을 피함)을 사용하고 고정 된 반복 횟수에 대한 모든 문제를 실행하면됩니다.