24.3 Neural ODE와 미분가능 시뮬레이션

실습 · 연습문제 1개

solver를 통과하는 순방향 민감도 forward-sensitivity

로지스틱 성장 모델

y′=f(y;r)=r y(1−yK)y' = f(y; r) = r\,y\left(1 - \frac{y}{K}\right)

을 explicit Euler yn+1=yn+h f(yn;r)y_{n+1} = y_n + h\,f(y_n; r)로 적분한다. 성장률 rr에 대한 민감도 sn=∂yn/∂rs_n = \partial y_n / \partial r는 Euler 식 자체를 rr로 미분하면 얻는다.

sn+1=sn+h(∂f∂y(yn;r) sn+∂f∂r(yn;r)),s0=0.s_{n+1} = s_n + h\left(\frac{\partial f}{\partial y}(y_n; r)\,s_n + \frac{\partial f}{\partial r}(y_n; r)\right), \qquad s_0 = 0.

이것은 "이산화한 다음 미분하기"(discretize-then-optimize)의 순방향 모드다. 계산한 sns_n은 Euler로 만든 yny_n의 정확한 도함수다.

함수 euler_with_sensitivity(r, K, y0, h, steps)를 완성해 (y, s)를 반환한다. 둘 다 shape (steps + 1,)이고 첫 원소는 초기값(y0y_0, 0)이다.

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

  • sns_n이 같은 Euler 시뮬레이션의 중심차분 (yn(r+δ)−yn(r−δ))/2δ\big(y_n(r + \delta) - y_n(r - \delta)\big) / 2\delta와 맞는다.
  • r=0r = 0이면 yy는 변하지 않고 sn=n h y0(1−y0/K)s_n = n\,h\,y_0(1 - y_0/K)다.
  • 평형점 y0=Ky_0 = K에서 출발하면 ss는 계속 0이다.

힌트: ∂f/∂y=r(1−2y/K)\partial f/\partial y = r(1 - 2y/K), ∂f/∂r=y(1−y/K)\partial f/\partial r = y(1 - y/K). sn+1s_{n+1}을 계산할 때는 갱신하기 전의 yny_n을 쓴다.