Backpropagation과 Chain Rule
역전파가 어떻게 gradient를 계산하는지, local gradient와 chain rule을 중심으로 정리해봤고, 역전파 계산에 자주 나오는 연산 게이트들이 gradient를 어떻게 흘려보내는지까지 정리해봤다.
local gradient와 chain rule#
어떤 연산 노드 가 입력 를 받아 출력 를 낸다고 하자. 이 노드는 자기 입력에 대한 출력의 미분, 즉 local gradient , 를 안다.
손실 쪽에서 이 노드의 출력 로 흘러들어온 gradient를 upstream gradient 라고 한다. 그러면 입력 쪽으로 내보낼 downstream gradient는 chain rule로
가 된다. 한 줄로 요약하면
이다. 각 노드는 자기 local gradient만 알면 되고 upstream은 뒤에서 흘러오므로, 이 곱셈만 반복하면 전체 네트워크의 gradient가 구해진다.
local gradient는 그 지점의 기울기#
local gradient를 구할 때 한 가지를 놓치기 쉽다. 미분값은 그 지점의 기울기를 의미하므로, local gradient를 구하려면 도함수에 그 지점의 값, 즉 forward pass에서 그 노드에 들어갔던 input을 그대로 넣어야 한다.
ReLU를 예로 들면, ReLU의 도함수는 input이 양수면 1, 음수면 0이다. 그래서 forward pass에서 ReLU에 들어갔던 input을 도함수에 그대로 넣으면 그 위치의 local gradient가 나온다. 양수였던 자리는 upstream을 그대로 통과시키고, 음수였던 자리는 0으로 막는 셈이다.
연산 게이트별 gradient 흐름 패턴#
downstream = upstream × local을 자주 나오는 게이트들에 적용해 보면 규칙이 보인다.
add 게이트: distributor#
덧셈 노드의 local gradient는 양쪽 입력 모두 1이다. 이면 이다. 따라서 upstream gradient가 양쪽 입력에 그대로 복사되어 흐른다. 덧셈은 gradient를 그대로 나눠주는 단순 분배기다.
mul 게이트: swap multiplier#
곱셈 노드 의 local gradient는 , 다. 즉 한쪽 입력의 downstream은 upstream에 반대쪽 입력값을 곱한 값이 된다. 입력값이 서로 자리를 바꿔(swap) 곱해지는 셈이다. 예를 들어 forward에서 x=5, y=3이고 upstream이 2라면, x로 가는 gradient는 2×3, y로 가는 gradient는 2×5다.
copy 게이트: adder#
하나의 값이 두 갈래로 복사되어 쓰인 경우, 역전파에서는 두 갈래에서 흘러온 upstream을 더해서 내려보낸다. 분배기인 add 게이트와 정확히 반대 방향이다. 두 갈래의 gradient가 4와 2로 흘러오면 합쳐서 6이 된다.
max 게이트: router#
는 forward에서 더 큰 쪽만 출력에 반영됐으므로, gradient도 그 큰 쪽으로만 흐르고 나머지는 0이 된다. upstream을 한쪽으로만 보내는 라우터다. 앞서 본 ReLU도 결국 이니 같은 라우터 패턴이다.
정리#
- 각 노드는 local gradient를 알고, downstream = upstream × local로 gradient를 전달한다.
- local gradient는 forward에서 들어간 input을 도함수에 넣어 구한다. ReLU라면 input의 부호로 1과 0이 갈린다.
- 게이트별 패턴: add = 분배기(양쪽에 그대로 복사), mul = 스왑 곱셈기(반대쪽 입력값을 곱함), copy = 덧셈기(갈래 gradient 합산), max = 라우터(더 컸던 쪽으로만 전달).
댓글