2017-04-06 6 views
0

스탠포드 NLP 라이브러리에서 QNMinimizer를 사용하려고하는데 qn.minimize를 제대로 실행하는 데 필요한 매개 변수에 문제가 있습니다.QNMinimizer에서 사용하기 위해 Java에서 diffFunction을 어떻게 만듭니 까?

QNMinimzer qn = new QNMinimizer(10, true) 
qn.minimize(null, 1e-5, new double[] {0,0,0}, 400) 

"null"이 있지만 생성/구현 방법이 확실하지 않은 diffFunction 유형의 객체를 넣어야합니다. 그라디언트 디센트를 사용하는 메서드가 있고이를 diffFunction 개체에 통합하려고합니다.

답변

0

DiffFunction 인터페이스를 구현하기 만하면됩니다. 실제로 더 효율적이고 좋은 유틸리티 기능 (예 : 그라디언트 검사기)이 포함되어 있기 때문에 실제로 상황을 이해하면 AbstractCachingDiffFunction을 권장합니다. 하이 레벨

는 (길이 K의 두 벡터로 표현되는) 모든 입력 벡터 x \in R^k를 들어, 두 값을 제공해야하는 두 벡터로서 함수 y = f_{\theta}(x) \in R 값 및 구배 \frac{d}{d\theta}f_\theta(x) \in R^k, 출력 길이 k.

치수 kFunction#domainDimension (supeinterface : DiffFunction)으로 정의됩니다.

yFunction#valueAt으로 정의됩니다.

그래디언트는 DiffFunction#derivativeAt으로 정의됩니다.

이미 구현 된 그래디언트 강하가있는 경우 값 y이 손실 값이됩니다. 그라디언트는 그라디언트 디센트 그라디언트가됩니다. 만약 당신이 확률적인 그라디언트 강하가 아니라 배치 그라데이션 하강. 값 y은 데이터 집합에 대한 손실의 합계이며 그라디언트와 동일합니다.