Computational Graph
함수를 단순화하여 그래프로 표현하는 프레임워크이다. 숫자와 연산자를 모두 분리하며 노드와 Input으로 이루어져있다. computational graph 내부 모든 변수들을 거쳐 backpropagation를 사용 가능하게 한다. 함수 f의 출력에 대한 어떤 변수의 gradient를 찾고싶을 때 함수 f를 computational graph로 나타내는 것이 첫 번째 step이다.
Computational Graph 예시: input이 x, W인 선형 classifier
예시) AlexNet, Neural Turing Machine
모듈화
Computational Graph에서 실제로 모듈화된 구현이다. forward/backward과정을 잘 수행하기 위해서는 모듈화가 필요하다.
forward pass에서는 노드의 출력을 계산하는 함수를 구현하는데 이때 완전한 그래프를 가지고 있다면 그래프의 모든 노드를 반복하여 forward pass로 통과시킨다.
backward pass에서는 chain rule을 이용해 gradient를 계산한다.
class ComputationalGraph(object):
def forward(inputs):
#1. [pass inputs to input gates...]
#2. forward the computational graph:
for gate in self.graph.modes_topologically_sorted():
gate.forward()
retrun loss # the final gate in the graph outputs the loss
def backward():
for gate in reversed(self.graph.nodes_topologically_sorted()):
gate.backward() #little piece of backprop (chain rule applied)
return inputs_gradients
Python
복사