지금까지는 y = x ** 2 이라는 단순한 함수를 다뤘습니다. 이어서 합성 함수를 미분해 봅시다. y = (e ** x) ** 2 이라는 계산에 대한 미분 dy/dx를 계산할 것입니다. 코드는 다음과 같습니다.
def f(x):
A = Square()
B = Exp()
C = Square()
return C(B(A(x)))
x = Variable(np.array(0.5))
dy = numerical_diff(f, x)
print(dy)
3.2974426293330694
이 코드는 일련의 계산을 f라는 함수로 정리했습니다. 파이썬에서는 함수도 객체이기 때문에 다른 함수에 인수로 전달할 수 있습니다. 실제로 앞의 코드에서는 numerical_diff 합수에 함수 f를 전달했습니다.
실행 결과를 보면 미분한 값이 3.297...입니다. x를 0.5에서 작은 값만큼 변화시키면 y는 작은 값의 3.297...배만큼 변한다는 의미죠.
이상에서 우리는 미분을 '자동으로'계산하는 데 성공했습니다. 원하는 계산을 파이썬 코드로 표현한 다음(앞의 예에서 함수 f로 정의) 미분해달라고 프로그램에 요구했습니다. 이 방식대로 하면 아무리 보=ㄱ잡하게 조립된 함수라도 미분을 자동으로 계산할 수 있습니다! 이제부터는 함수의 종류를 늘려가면서 어떠한 계산도 (미분 가능한 함수라면) 미분할 수 있습니다. 그러나 안타깝게도 수치 미분에는 문제가 있습니다.
댓글 없음:
댓글 쓰기