정리 노트

Computational Graph(연산 그래프) 본문

개념 정리/머신러닝 & 딥러닝 & A.I

Computational Graph(연산 그래프)

꿈만 꾸는 학부생 2022. 11. 25. 17:46
728x90

이 포스트는 국민대학교 소프트웨어학부 '컴퓨터 비전' 강의와 '인공지능' 강의를 듣고 요약하는 포스트입니다. 원하시는 정보가 없을 수도 있습니다. 이 점 유의 바랍니다. 오류 지적은 매우 환영합니다!


 

딥 러닝 모델에서 진행되는 역전파 단계에서는 chain rule에 의해 얽혀 있는 수많은 파라미터들에 대한 편미분이 진행됩니다. 이 편미분들을 하나하나 손으로 계산하는 건 불가능합니다. 여기에서 나오는 아이디어가 computational graph입니다.

연산 그래프란 무엇인가?

연산 그래프는 forward 연산이 진행되는 과정을 그래프로 표현한 것입니다. 예를 들어 아래와 같이 computational graph를 그려볼 수 있습니다.

간단하게 그려본 computational graph

이런 식으로 그래프를 그리면 각 동그라미(노드)들을 하나의 모듈처럼 다룰 수 있게 됩니다. 구성의 일부가 바뀐다면 처음부터 다시 편미분을 하나하나 계산하지 않아도 된다는 큰 장점이 생깁니다. 만약 그림에서 적용된 mse loss가 아닌 cross entropy loss로 바꾼다면 loss 노드를 cross entropy loss로 바꾸기만 하면 됩니다.

Computational graph와 같이 back propagation 보기

간단한 computational graph 하나를 사용해서 역전파 과정을 살펴봅시다.

f(x, y, z) = (x + y) * z를 표현한 computational graph

이 그래프는 f(x, y, z) = (x + y) * z를 나타낸 그래프입니다. 이 함수를 세 변수에 대해 편미분 한 값을 얻는 것이 목적입니다. 계산을 진행하기 전에 알아야 할 용어가 3가지 있습니다.

  • Upstream gradient: 이전 노드에서 진행된 편미분 값으로 현재 노드의 input으로 들어옵니다.
  • Local gradient: 현재 노드에서 종속 변수들에 대한 편미분 값들입니다.
  • Downstream gradient: Upstream gradient 값과 local gradient 값을 곱한 결과로 이 결과를 다음 노드로 반환합니다.

용어 설명 그림

역전파를 시작할 때의 upstream gradient는 ∂f / ∂f, 자기 자신에 대한 편미분 값인 1로 시작합니다. 역전파는 그림의 빨간색 화살표 방향으로 진행됩니다. 그럼 이 개념을 가지고 저희의 그래프를 따라가며 역전파 과정을 살펴봅시다. Forward 연산을 할 때 x = -2, y = 5, z = -4 값을 넣었다고 합시다.(f(-2, 5, -4) = -12)

 

역전파를 진행할 때 처음에 도착하는 노드는 입력을 q와 z를 받는 노드입니다.

f = qz(q = (x + y)) 이므로 f를 q에 대해 미분하면 z만 남고, z에 대해 편미분 하면 q만 남습니다. 그래서 이 노드에서의 local gradients는 각각 ∂f / ∂q = z = -4, ∂f / ∂z = q = 3입니다. 따라서 흘러가는 downstream gradient들은 각각 ∂f / ∂q * 1 = -4, ∂f / ∂z * 1 = 3입니다.

 

다음에 도착하는 노드는 입력을 x와 y를 받는 노드입니다.

q = x + y 이므로 q를 x에 대해 미분하던, y에 대해 미분하던 모두 편미분 값은 1입니다. 그래서 이 노드의 local gradients는 모두 1입니다. 따라서 흘러가는 downstream gradient들은 각각 ∂q / ∂x * -4 = -4, ∂q / ∂y * -4 = -4입니다. 이 값들은 가중치를 갱신하는 과정에서 사용될 것입니다.

 

이 과정들을 통해 우리는 ∂f / ∂x = -4, ∂f / ∂z = -4, ∂f / ∂z = 3이라는 것을 얻었습니다. 이를 하나의 그림으로 표현하면 아래와 같습니다.

 

728x90