나는 현재 기계 학습 알고리즘에 일을하고 내가 수동으로 매개 변수를 업데이트 할 때에 비해 내가 matlab에의 fminunc
를 사용하면 알고리즘은 세계 최소 매우 빠르게 (몇 가지 반복)에 수렴하는 것으로 나타났습니다 :fminunc는 그래디언트 디센트에서 학습 속도 (단계 비율) 값을 어떻게 최적화합니까?
thetas[j] = thetas[j] - (alpha*gradient)/sampleNum;
을 나는 순전히 alpha
(단계 비율)이 상수라고 추정하기 때문이라고 생각합니다.
그래서 C에서 fminunc
과 같은 것을 어떻게 구현합니까?
큰 금액으로 시작하여 현재 비용이 이전 비용보다 커지면 조정 해 보았습니다. 이 문제는 최소화 된 함수의 모양이 선형이 아닌 경우에 발생합니다. alpha
은 처음에는 매우 작은 값을 가져올 수 있고 함수 모양이 '평면'이되는 경향이있을 때 더 큰 값으로 되돌릴 수 없으므로 (더 큰 단계를 수행 할 수 있습니다.).
Matlab의 'fminunc'는 그래디언트 디센트를 사용하지 않습니다. 스텝 크기를 어떻게 제어하든 관계없이 훨씬 더 빠를 수있는 준 뉴턴 방식을 사용합니다. – 3lectrologos
@ 3lectrologos 통찰력에 감사드립니다. 그것은 왜'fminunc'를 사용할 때 2 차 함수에 대해 아주 좋은 결과를 얻는지를 설명 할 것입니다. 그래서, 아마도 저는 다른 방법을 사용하여 제 '알파'추측을 개선하려고 노력해야합니다. 귀하의 경험을 토대로 quasi-Newton 방법을 사용하면 그래디언트 디센트와 비교할 때 단점이 있습니다 (예외적으로 구현하기가 더 어려울 것임) –
아마도이 질문에 답할 사람이 아니지만 Newton- (예 : 수치 적 문제)를 처음부터 구현하려고하면 다소 까다로울 수 있습니다. 성능 측면에서 볼 때, 문제가 실제로 큰 경우를 제외하고는 그라디언트 디센트를 선호하는 이유를 알 수 없습니다 (확률 적 그라디언트 디센트 참조). – 3lectrologos