← 문제 목록/Generic GD + Numerical Gradient [medium]
문제 해설

Generic GD + Numerical Gradient [medium]

최적화 · medium

preview

Generic GD + Numerical Gradient [medium]

v1 GD 는 특정 파라볼라의 analytic 미분 을 손으로 넣음. 실전에선:

  1. 임의 함수 ff 를 받아야 하고 (callable 인자).
  2. 미분식을 알 수 없을 때 중심 차분 으로 근사: f(x)f(x+h)f(xh)2hf'(x) \approx \frac{f(x + h) - f(x - h)}{2h}
  3. 수렴 판정: f(x)<tol|f'(x)| < \text{tol} 이면 조기 종료.

중심 차분의 특성

  • h 너무 작으면 반올림 오차 (cancellation) — 보통 h = 1e-5.
  • h 너무 크면 절단 오차 (higher-order Taylor).
  • 중심 차분은 앞차분보다 정확도 O(h2)O(h^2).

과제

함수 descend_generic(f, x0, lr, max_steps, tol, h=1e-5) 를 완성하세요.

  • f: callable, scalar → scalar.
  • x0: 시작점 (float).
  • 반복: xxηfnum(x)x \leftarrow x - \eta \cdot f'_{num}(x).
  • 조기 종료: f(x)tol|f'(x)| \le \text{tol} 이면 루프 중단.
  • 반환: (history, x_final, converged) where converged is bool.
  • history 는 시작점 포함, 매 스텝의 xx.

힌트:

def grad(x):
    return (f(x + h) - f(x - h)) / (2 * h)

history = [x0]; x = x0
for _ in range(max_steps):
    g = grad(x)
    if abs(g) <= tol:
        return history, x, True
    x = x - lr * g
    history.append(x)
return history, x, False

테스트 케이스

#이름검증
1반환 3-tuple
2파라볼라 (x-3)² → x=3 수렴
3조기 종료: 이미 최소 → max_steps 전에 converged=True
4tol 매우 작을 때 max_steps 도달 → converged=False
5비파라볼라 f(x)=(x2)4f(x) = (x-2)^4 도 수렴
6중심 차분 사용 (앞차분이면 2차 정확도 실패)수렴 속도 체크
코드 작성
Loading...
실행 결과

코드를 작성하고 Run 을 눌러보세요.