이번 단계에서 다루는 함수는 최적화 문제에서 자주 사용되는 테스트 함수입니다.
위키백과의 'Test functions for optimization' 페이지에 있는 3개의 함수를 선택하여 실제 미분합니다.
24.1 Sphere 함수

Sphere 함수를 수식으로 표현하면 z = x**2+y**2입니다.
단순히 두 개의 입력 변수를 제곱하여 더하는 함수입니다.
이 함수를 가지고 미분을 계산합니다.
if '__file__' in globals():
import os, sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import numpy as np
from dezero import Variable
def sphere(x, y):
z = x ** 2 + y ** 2
return z
x = Variable(np.array(1.0))
y = Variable(np.array(1.0))
z = sphere(x, y)
z.backward()
print(x.grad, y.grad)
x, y의 각각의 미분값은 ∂z/∂x = 2x, ∂z/∂y = 2y가 되므로 (x, y) = (1.0, 1.0)의 미분 결과는 (2.0, 2.0)입니다.
24.2 matyas 함수

matyas 함수의 수식은 z = 0.26(x**2 + y**2) - 0.48xy이며, DeZero로는 아래 처럼 구현할 수 있습니다.
if '__file__' in globals():
import os, sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import numpy as np
from dezero import Variable
def matyas(x, y):
z = 0.26 * (x ** 2 + y ** 2) - 0.48 * x * y
return z
x = Variable(np.array(1.0))
y = Variable(np.array(1.0))
z = matyas(x, y)
z.backward()
print(x.grad, y.grad)
24.3 Goldstein-Price 함수

Goldstein-Price 함수를 수식으로 표현하면 위의 그림처럼 되고 꽤 복잡해 보이지만
코드 구현은 생각보다 쉽게 구현할 수 있었습니다.
if '__file__' in globals():
import os, sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import numpy as np
from dezero import Variable
def goldstein(x, y):
z = (1 + (x + y + 1)**2 * (19 - 14*x + 3*x**2 - 14*y + 6*x*y + 3*y**2)) * \
(30 + (2*x - 3*y)**2 * (18 - 32*x + 12*x**2 + 48*y - 36*x*y + 27*y**2))
return z
x = Variable(np.array(1.0))
y = Variable(np.array(1.0))
z = goldstein(x, y)
z.backward()
print(x.grad, y.grad)
goldstein 함수를 미분해보면 아래의 값이 나옵니다.

'Study 공부할레나' 카테고리의 다른 글
| [스터디/밑시딥3] 제 3고지 고차미분계산_26. 계산 그래프 시각화(2) (0) | 2023.09.03 |
|---|---|
| [스터디/밑시딥3] 제 3고지 고차미분계산_25. 계산 그래프 시각화(1) (1) | 2023.09.03 |
| [스터디/밑시딥3] 제 2고지 자연스러운 코드로_23. 패키지로 정리 (0) | 2023.08.30 |
| [스터디/밑시딥3] 제 2고지 자연스러운 코드로_22. 연산자 오버로드(3) (0) | 2023.08.28 |
| [스터디/밑시딥3] 제 2고지 자연스러운 코드로_21. 연산자 오버로드(2) (0) | 2023.08.27 |