페이지

2022년 8월 6일 토요일

4.3 합성 함수의 미분

 지금까지는 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로 정의) 미분해달라고 프로그램에 요구했습니다. 이 방식대로 하면 아무리 보=ㄱ잡하게 조립된 함수라도 미분을 자동으로 계산할 수 있습니다! 이제부터는 함수의 종류를 늘려가면서 어떠한 계산도 (미분 가능한 함수라면) 미분할 수 있습니다. 그러나 안타깝게도 수치 미분에는 문제가 있습니다.

댓글 없음: