반응형 AI64 34~35단계) sin 함수 미분 , tanh 함수 미분 Add, Mul, Neg, Sub, Div, Pow 클래스를 구현하여 dezero/core.py에 추가하였다. 이번 단계에서는 DeZero함수를 추가로 구현할 것이다. 1. sin함수 sin함수와 그 미분 함수의 수식은 아래와 같다. import numpy as np from dezero.core import Function class Sin(Function): def forward(self, x): y = np.sin(x) return y def backward(self, gy): x = self.inputs gx = gy * cos(x) return gx def sin(x): return Sin()(x) backward메서드 사용 시 모든 계산은 반드시 DeZero함수를 사용해야 한다. gx = gy.. 2021. 7. 12. 33단계) 뉴턴 방법 최적화 자동화 , 2차 미분 자동 계산 이전 단계에서 고차 미분을 가능하게 DeZero를 확장시켰으므로 이번 단계에서는 실제로 2차 미분을 계산한 후, 뉴턴방법을 이용한 최적화를 해볼 것이다. 1. 2차 미분 계산하기 import numpy as np from dezero import Variable def f(x): y = x**4 - 2 * x**2 return y x = Variable(np.array(2.0)) y = f(x) #첫 번째 역전파 진행 y.backward(create_graph=True) print(x.grad) #variabe(24.0) #두 번째 역전파 진행 gx = x.grad gx.backward() print(x.grad) #variable(68.0) gx.backward()를 하여 gx.grad = None이니.. 2021. 7. 9. 30~32단계) 고차 미분 DeZero는 1차 미분에 한해서 미분을 자동으로 계산할 수 있다. 이번 단계에서는 DeZero가 2차, 3차, 4차 등 고차 미분까지 자동으로 계산할 수 있도록 확장할 것이다. 1. 현재 고차 미분을 할 수 없는 이유 foward계산과 달리 backward계산은 계산 그래프가 그려지지 않는다. 먼저 forward계산은 계산 그래프가 그려지는 것을 이해하기 위해 아래 Function클래스를 보자. class Function: def __call__(self, *inputs): inputs = [as_variable(x) for x in inputs] xs = [x.data for x in inputs] ys = self.forward(*xs) if not isinstance(ys, tuple): ys =.. 2021. 7. 9. 28~29단계) 경사하강법 , 뉴턴 방법 , 함수 최적화 미분의 가장 중요한 용도는 함수를 최적화하는 것이다. 이번에는 특정 함수를 대상으로 최적화를 해볼 것이다. 함수 최적화 1. 로젠브록 함수 로젠브록 함수(Rosenbrock function)의 수식과 형태는 아래와 같다. 로젠브록 함수의 정의는 a, b가 정수일 때, 아래의 식과 같고, 위의 이미지는 a=1, b=100일 때에 해당된다. 목표는 로젠브록 함수의 출력이 최소가 되는 x0과 x1을 찾는 것이다. 실제로 로젠브록 함수의 최솟값은 (x0, x1) = (1, 1)이며 이를 DeZero를 사용하여 구해볼 것이다. 2. 미분 계산하기 import numpy as np from dezero import Variable def rosenbrock(x0, x1): y = 100 * (x1 - x0 ** 2.. 2021. 7. 3. 이전 1 ··· 5 6 7 8 9 10 11 ··· 16 다음 728x90 반응형