TECH 으로 돌아가기
TECH HACKER NEWS 오늘 7분 읽기 21 READS

역전파는 왜 '거꾸로' 흐르는가: 순전파로는 안 되는 계산상의 이유

신경망을 학습시키는 표준 알고리즘인 역전파(backpropagation)는 보통 '각 노드의 오차를 뒤쪽으로 전파한다'는 말로 설명된다. 1986년 Rumelhart 등이 정식화한 이 방식은 딥러닝의 사실상 모든 학습 절차에 깔려 있지만, 정작 왜 계산이 출력에서 입력 방향으로 거꾸로 흘러야 하는지는 잘 설명되지 않는다. 뉴욕의 퀀트 연구자 Gregory Gundersen은 자신도 처음 배울 때 같은 의문을 품었다고 말한다. 신경망은 결국 합성함수이고, 합성함수의 미분은 연쇄법칙(chain rule)으로 구할 수 있는데, 그렇다면 입력에서 출력으로 향하는 순전파(forward pass) 한 번으로 기울기를 계산하면 안 되는가 하는 의문이다. 이 글은 그 질문에 답을 내리는 과정에서 역전파의 본질이 드러난다는 점을 짚는다.

문제 설정: 노드에서 무엇을 계산할 수 있는가

역전파의 목표는 신경망 $f$ 안의 모든 가중치 $\theta_i$에 대해 편미분 $\partial f/\partial\theta_i$를 효율적으로 구하는 것이다. 임의의 가중치 $\theta_1$과 신경망 내부의 어떤 노드 $v$를 생각해 보자. 여기서 $v$는 입력들의 가중합 $u=\theta_1 t_1+\dots+\theta_n t_n$을 활성화 함수 $\sigma$에 통과시킨 출력값, 즉 $v=\sigma(u)$를 가리킨다. 흔한 도식에서는 $u$, $\sigma$, $v$가 하나의 노드로 뭉뚱그려진다.

핵심 관찰은 연쇄법칙 덕분에 대부분의 계산을 각 노드에서 국소적으로 처리할 수 있다는 것이다. $\partial f/\partial\theta_1 = (\partial f/\partial v)(\partial v/\partial u)(\partial u/\partial\theta_1)$로 분해되는데, 이 중 $\partial v/\partial u$는 활성화 함수 $\sigma$의 정의만으로 해석적으로 구할 수 있고 $\partial u/\partial\theta_1$은 단순히 입력 $t_1$이다. 결국 각 노드에서 어렵지 않게 얻을 수 있는 항들을 빼고 나면, 모든 것은 $\partial f/\partial v$ 하나를 알 수 있느냐로 귀결된다.

순전파로 시도하면 무슨 일이 벌어지는가

$\partial f/\partial v$가 까다로운 이유는 $v$의 값에 의존하는 하류(downstream) 노드들이 많기 때문이다. 여기에는 다변수 연쇄법칙이 답을 준다. $v$에 의존하는 각 하류 노드 $w_j$에 대해 $\partial f/\partial v = \sum_j (\partial f/\partial w_j)(\partial w_j/\partial v)$가 성립한다. 즉 기계적인 도구 자체는 이미 갖춰져 있어, 원리상 순전파 방향으로도 역전파를 흉내 낼 수 있다.

문제는 방향성 계산 그래프의 근본적 제약이다. 노드 $b$가 노드 $a$에 의존할 때, $b$에 도달하기 전에는 $\partial b/\partial a$를 계산할 수 없다. 함수 $f(a)=b$의 도함수 $f'(a)$를 구하려면 $f$, 따라서 $b$의 값이 필요하기 때문이다. 이 제약 탓에 노드 $v$에서는 $\partial w_j/\partial v$를 알 수 없고, 결국 $\partial v/\partial\theta_i$ 같은 항을 하류의 각 노드로 계속 '들고 가며' 전달해야 한다.

바로 이 지점에서 계산량이 폭발한다. 같은 층에 있는 서로 다른 가중치 $\theta_i$와 $\theta_k$의 기울기를 구한다고 하면, $\partial v/\partial\theta_i$와 $\partial v/\partial\theta_k$만 다를 뿐 하류로 이어지는 나머지 합산 항들은 전부 동일하다. 그런데도 순전파 방식은 이 공통 항을 가중치마다 반복해서 다시 전파한다. Gundersen은 이 반복 전달이 노드 수에 대해 제곱(quadratic) 시간복잡도를 낳는다고 지적한다.

거꾸로 흐르면 선형 시간이 된다

해법의 실마리는 방향을 뒤집는 데 있다. 만약 하류의 항, 예컨대 $\partial w_j/\partial v$를 이미 가지고 있다면, 그 항을 노드 $v$로 거꾸로 전달해 주기만 하면 $\partial f/\partial v$를 곧바로 구성할 수 있다. 각 노드가 자신의 국소적 항 하나만 상류(upstream) 이웃에게 넘기면 되므로, 전체 계산은 노드 수에 대해 선형 시간에 끝난다. 노드 $v$는 뒤에서 도착하는 메시지들을 그저 합산하기만 해도 $\partial f/\partial v = \sum_j (\partial f/\partial w_j)(\partial w_j/\partial v)$라는 원하는 미분값을 얻는다. 다변수 연쇄법칙이 이 절차의 정당성을 그대로 보증한다.

이렇게 보면 '오차를 뒤로 전파한다'는 통상적 설명이 훨씬 자연스럽게 읽힌다. 각 노드가 상류 이웃에게 '너희가 무엇을 잘못했는지'를 알려 주는 일종의 신용 할당(credit assignment) 문제로 볼 수 있기 때문이다. 실무적으로 이는 왜 자동 미분 프레임워크가 순전파로 값을 계산해 중간 결과를 저장해 두었다가 역방향으로 기울기를 흘리는지를 설명한다. 방향은 취향의 문제가 아니라, 소박한 순전파 방식이 안게 될 제곱 복잡도를 선형으로 낮추기 위한 필연적 선택인 것이다. 프레임워크가 순전파 시점의 활성값을 메모리에 붙들어 두는 이유도 여기서 드러난다. 역방향 단계에서 국소 항을 곧바로 합성하기 위해서다. 알고리즘의 이름이 주는 인상과 달리, 역전파의 핵심은 '오차'가 아니라 중복 계산을 제거하는 계산 구조 그 자체에 있다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://gregorygundersen.com/blog/2018/04/15/backprop/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기
처리 중...