0.4 자가 진단과 역량 지도

실습 · 연습문제 1개

중심 차분으로 gradient 검증하기 numerical-gradient

직접 유도하거나 구현한 gradient가 맞는지 확인하는 가장 기본적인 방법은 수치미분과 비교하는 것이다. 역량 지도에서 이론·구현 축의 "검증" 수준을 스스로 확인하는 진단 과제다.

함수 numerical_grad(f, w, h=1e-5)를 완성한다. f는 1차원 배열 w를 받아 스칼라를 돌려주는 함수다. 각 좌표 ii에 대해 중심 차분

∂f∂wi≈f(w+h ei)−f(w−h ei)2h\frac{\partial f}{\partial w_i} \approx \frac{f(\mathbf{w} + h\,\mathbf{e}_i) - f(\mathbf{w} - h\,\mathbf{e}_i)}{2h}

를 계산해, w와 같은 shape의 배열로 반환한다. 여기서 ei\mathbf{e}_i는 ii번째 성분만 1이고 나머지가 0인 벡터다.

인자 설명
f (D,) 배열 → 스칼라
w (D,) 배열. 함수 안에서 바꾸지 않는다
h 차분 간격

테스트는 다음을 확인한다.

  • 해석적 gradient를 아는 함수(이차식, ∑isin⁡wi\sum_i \sin w_i, 평균 제곱 오차)에서 결과가 맞는지
  • 반환값의 shape이 w와 같은지
  • 호출한 뒤에도 w가 바뀌지 않았는지
  • 한쪽 차분 (f(w+hei)−f(w))/h(f(\mathbf{w} + h\mathbf{e}_i) - f(\mathbf{w}))/h보다 정확한지(중심 차분의 오차는 h2h^2에, 한쪽 차분의 오차는 hh에 비례한다)

힌트: w를 복사한 배열에서 한 성분만 바꿔 f를 두 번 부른다. w 자체를 고친 뒤 되돌리는 방식은 f가 예외를 던지면 w가 망가진 채로 남는다.