페이지

2022년 10월 2일 일요일

28.2 미분 계산하기

 가장 먼저 로젠브록 함수의(x0, x1) = (0.0, 2.0)에서의 미분(dy/dx0 와 dy/dx1)을 계산해보죠. DeZero를 이용하면 다음과 같이 구현할 수 있습니다.

import numpy as np

from dezero import Variable


def rosenbrock(x0, x1):

    y = 100 * (x1 - x0 ** 2)  ** 2 + ( 1 - x0 ) ** 2

    return y 


x0 = Variable(np.array(0.0))

x1 = Variable(np.array(2.0))


y = rosenbrock(x0, x1)

y.backward()

print(x0.grad, x1.grad)


variable(-2.0) variable(400.0)


이와 같이 수치 데이터(ndarray 인스턴스)를 Variable로 감싸서 건네주기만 하면 그다음은 수식을 따라 코딩하면 됩니다. 그리고 마지막에 y.backward()ㄹ르 호출하면 자동으로 미분을 계산할 수 있습니다.

이 코드를 실행하면 x0와 x1의 미분은 각각 -2.0과 400.0이라고 나옵니다. 이때 두 미분값을 모든 값, 즉 (-2.0, 400.0) 벡터를 기울기(gradient)혹은 기울기 벡터라고 합니다. 기울기는 각 지점에서 함수의 출력을 가장 크게 하는 방향을 가리킵니다. 지금 예에서는 (x0, x1) = (0.0, 2.0) 지점에서 y값을 가장 크게 늘려주는 방향이 (-2.0, 400.0)이라는 의미입니다. 반대로 기울기에 마이너스를 곱한 (2.0 -400.0) 방향은 y값을 가장 작게 줄여주는 방향을 뜻합니다.



댓글 없음: