이 그래프에 연쇄 법칙을 적용하여 원하는 값을 구할 수 있습니다.
• grad(loss_val, w) = 1 * 1 * 2 = 2
• grad(loss_val, b) = 1 * 1 = 1
Note ≣
역방향 그래프에서 관심 대상인 두 노드 a 와 b를 연결하는 경로가 여러 개라면 모든 경로의 도함수를 더해서 grad(a, b)를 얻을 수 있습니다.
방금 수행한 것이 역전파입니다! 역전파는 연쇄 법칙을 계산 그래프에 적용한 것뿐입니다. 그 이상 아무것도 아닙니다. 역전파는 최종 손실 값에서 시작하여 아래층에서 맨 위층까지 거꾸로 거슬러 올라가 각 파라미터가 손실 값에 기여한 정도를 계산합니다. 그래서 이름이 ‘역전파’입니다. 즉, 계산 그래프에서 각 노드의 손실 기여도를 역전파합니다.
요즘에는 텐서플로와 같이 자동 미분(automatic differentiation)이 가능한 최신 프레임워크를 사용해서 신경망을 구현합니다. 자동 미분은 방금 본 계산 그래프와 같은 형태로 구현됩니다. 자동 미분은 정방향 패스를 작성하는 것 외에 다른 작업 없이 미분 가능한 텐서 연산의 어떤 조합에 대해서도 그레이디언트를 계산할 수 있습니다. 필자가 2000년대 C 언어로 처음 신경망을 만들 때는 그레이디언트를 직접 계산해야 했습니다. 지금은 최신 자동 미분 도구 덕분에 수동으로 역전파를 구현할 필요가 전혀 없습니다. 얼마나 다행인가요!