실습 · 연습문제 2개
BFGS 역Hessian 갱신 구현하기 bfgs-update
BFGS는 역Hessian의 근사 를 step마다 갱신한다. 파라미터 변화 와 gradient 변화 로
이다. 함수 bfgs_update(Hinv, s, y)를 완성해 새 근사 (n, n)을 반환한다. 입력 Hinv를 제자리에서 바꾸지 않는다.
테스트는 다음을 확인한다.
- secant 조건 를 만족한다.
- 이면 대칭·양의 정부호가 유지된다.
- 이차함수 에서 exact line search와 함께 번 갱신하면 최솟점에 도달하고 이 된다.
힌트: np.outer(s, y)는 이다.
Levenberg–Marquardt step 구현하기 lm-step
비선형 최소제곱 에서 Levenberg–Marquardt(LM) 방법의 한 step 는
의 해다. 는 잔차 의 Jacobian(shape (N, p)), 은 감쇠 계수다. 함수 lm_step(J, r, lam)을 완성해 shape (p,)의 step을 반환한다.
테스트는 다음을 확인한다.
- 이면 Gauss–Newton step이다. 잔차가 파라미터에 선형이면() 한 step에 최소제곱해에 도달한다.
- 가 아주 크면 step은 , 즉 짧은 gradient descent step에 가깝다.
- 를 키울수록 step이 짧아지고, 어떤 에서도 선형 근사 의 크기는 보다 작다.
힌트: 의 역행렬을 직접 만들지 말고 np.linalg.solve로 연립방정식을 푼다.