Gradient descent
현재 state에서 cost function의 derivate(jacobian)를 구하고, 해당 방향의 반대 방향으로 step size를 곱한 만큼 state를 변화시킨다. 값이 수렴할 때까지 반복한다.
xk+1=xk−α∇f(xi)
- local minima에 빠지기 쉽고, 딥러닝 분야에서는 momentum을 이용한 optimizer를 사용하기도 한다.
Newton-Raphson
newton raphson 방식은 본래 함수의 해를 찾는 기법이다.
따라서 함수의 Jacobian의 해를 찾게 되면(기울기=0) minimum한 지점을 찾는 것이므로 엄밀히 말하면, cost function의 Jacobian에 대해 newton raphson 기법을 적용하는 것이다.
f(x)의 Jacobian을 J(x), Hessian을 H(x)라 하면,
J(x)를 선형근사하면 아래와 같다.
J~(x)=J(xk)+H(x−xk)
J~(xk+1)=0을 대입한 뒤 정리하면,
xk+1=xk−H(xk)−1J(xk)
- Hessian이 0이 되는 지점에서 발산하는 문제가 있다.
Gauss-Newton
Gauss-Newton은 Newton-Raphson 방법에서 연립 방적식으로의 확장 + Hessian의 근사값 사용. 2가지 차이가 있다.
여기서의 cost function은 residual의 squared sum을 의미한다. 여기서 ri는 non-linear function이어도 상관 없다.
cost function : f(x)=Σri(x)2=∣∣r(x)∣∣2
이러한 squared sum에 대한 최적의 parameter를 찾는 것을 least squares problem이라 한다.
Jacobian
∂xj∂f=2Σi∂xJ∂riri이므로,
J=∇f=2(∇r)Tr=2JrTr을 얻는다.
where ∇r(x)=Jr=⎝⎜⎛∂x1∂r1∂x1∂r2...∂x2∂r1∂x2∂r2............⎠⎟⎞
Hessian
∂xj∂xk∂2f=Σi(2∂xj∂ri∂xk∂ri+2ri∂xj∂xk∂2ri) 이므로,
∇2f=2JrTJr+2Q
where Q=Σiri∇2ri
Q 텀을 무시하면 H=∇2f≈2JrTJr 즉, cost function의 Hessian에 대한 근사값을 얻었다.
Result
기존의 Newton-Raphson의 결과는 아래와 같다.
xk+1=xk−H(xk)−1J(xk)
residual을 이용해 표현하면,
xk+1=xk−(2JrTJr+2Q)−1∗2∗JrTr
Q를 생략하고 2를 약분하면 아래 식을 얻는다.
Gauss-Newton : xk+1=xk−(JrTJr)−1JrTr(xk)
Levenberg-Marquardt
state가 minimum에 가까워지면 J 또는 Jr이 0에 가까워진다.(singular)
그러면 Gauss-Newton 식에서 (JrTJr)−1은 값이 발산할 수 있는 위험이 있다.
따라서, μkI 텀을 추가해 minimum에 멀 때는 Gauss-Newton, 가까울 때는 Gradient Descent와 유사하게 동작하도록 개선한 것이 Levenberg method이다.
Levenberg : xk+1=xk−(JrTJr+μkI)−1JrTr(xk)
Levenberg method의 수렴 속도를 개선한 것이 Levenberg-Marquardt method이고 식은 아래와 같다.
Levenberg-Marquardt : xk+1=xk−(JrTJr+μkdiag(JrTJr))−1JrTr(xk)
Weighted least squares
residual마다 가중치를 이용해 중요도를 반영시킬 수 있다.
cost function : f(x)=Σwiri(x)2=rTWr
where W=diag(w1,w2,...)
이 경우 weighted LM은 아래와 같다.
Weighted LM : xk+1=xk−(JrTWJr+μkdiag(JrTWJr))−1JrTWr(xk)