2012-12-22 3 views
0

나는 현재 기계 학습 알고리즘에 일을하고 내가 수동으로 매개 변수를 업데이트 할 때에 비해 내가 matlab에의 fminunc를 사용하면 알고리즘은 세계 최소 매우 빠르게 (몇 가지 반복)에 수렴하는 것으로 나타났습니다 :fminunc는 그래디언트 디센트에서 학습 속도 (단계 비율) 값을 어떻게 최적화합니까?

thetas[j] = thetas[j] - (alpha*gradient)/sampleNum;

을 나는 순전히 alpha (단계 비율)이 상수라고 추정하기 때문이라고 생각합니다.

그래서 C에서 fminunc과 같은 것을 어떻게 구현합니까?

큰 금액으로 시작하여 현재 비용이 이전 비용보다 커지면 조정 해 보았습니다. 이 문제는 최소화 된 함수의 모양이 선형이 아닌 경우에 발생합니다. alpha은 처음에는 매우 작은 값을 가져올 수 있고 함수 모양이 '평면'이되는 경향이있을 때 더 큰 값으로 되돌릴 수 없으므로 (더 큰 단계를 수행 할 수 있습니다.).

+1

Matlab의 'fminunc'는 그래디언트 디센트를 사용하지 않습니다. 스텝 크기를 어떻게 제어하든 관계없이 훨씬 더 빠를 수있는 준 뉴턴 방식을 사용합니다. – 3lectrologos

+0

@ 3lectrologos 통찰력에 감사드립니다. 그것은 왜'fminunc'를 사용할 때 2 차 함수에 대해 아주 좋은 결과를 얻는지를 설명 할 것입니다. 그래서, 아마도 저는 다른 방법을 사용하여 제 '알파'추측을 개선하려고 노력해야합니다. 귀하의 경험을 토대로 quasi-Newton 방법을 사용하면 그래디언트 디센트와 비교할 때 단점이 있습니다 (예외적으로 구현하기가 더 어려울 것임) –

+0

아마도이 질문에 답할 사람이 아니지만 Newton- (예 : 수치 적 문제)를 처음부터 구현하려고하면 다소 까다로울 수 있습니다. 성능 측면에서 볼 때, 문제가 실제로 큰 경우를 제외하고는 그라디언트 디센트를 선호하는 이유를 알 수 없습니다 (확률 적 그라디언트 디센트 참조). – 3lectrologos

답변

3

Matlab의 fminunc은 실제로 그래디언트 디센트를 사용하지 않고, 문제 크기에 따라 뉴턴 형 메서드 (BFGS-based quasi-Newton or trust-region)를 사용합니다. 이는 단계 크기를 선택하는 방법에 관계없이 일반적으로 그래디언트 디센트보다 훨씬 빠릅니다.

더 빠른 수렴을 원한다면이 방법을 고려해야 할 것입니다.