반응형 AI/딥러닝 프레임워크 개발16 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. 27단계) 테일러 급수 미분 이번에는 DeZero를 사용하여 sin 함수의 미분 문제를 풀어볼 것이다. sin 의 미분은 해석적으로 풀리지만 정공법으로 sin 함수를 DeZero로 구현하고 그 미분을 테일러 급수를 이용해서 계산할 것이다. 1. sin 함수 구현 y = sin(x) 일때 그 미분은 y'=cos(x) 이다. import numpy as np from dezero import Function class Sin(Function): def forward(self, x): y = np.sin(x) return y def backward(self, gy): x = self.inputs[0].data gx = gy * np.cos(x) return gx def sin(x): return Sin()(x) 넘파이가 제공하는 np.s.. 2021. 6. 29. 25~26단계) 계산 그래프 시각화 , DOT 이전 포스팅에서 Goldstein-Price라는 함수를 코딩했다. 이와 같은 복잡한 식을 계산할 때, 그 뒤편에서 어떤 계산 그래프가 그려지는 지를 직접 눈으로 확인하기 위해 Graphviz라는 외부 자원을 이용하여 계산 그래프를 시각화할 것이다. 계산 그래프 시각화 (1) 1. DOT 언어로 그래프 작성하기 digraph g{ x y } 반드시 digraph g { ... } 구조여야 하고, 그래프의 정보가 ... 안에 넣는다. 예시로 x와 y를 넣었는데, 2개의 노드를 그린다는 의미이다. 각 노드는 줄바꿈으로 구분한다. 입력 후, smaple.dot 파일로 저장하고 아래 명령을 실행하면 된다. dot sample.dot -T png -o sample.png 2. 노드에 속성 지정하기 digraph g.. 2021. 6. 29. 이전 1 2 3 4 다음 728x90 반응형