CHAPTER 5 오차역전파법

앞 장에서는 신경망 학습에 대해서 설명했습니다. 그때 신경망의 가중치 매개변수의 기울기(정확히는 가중치 매개변수에 대한 손실 함수의 기울기)는 수치 미분을 사용해 구했습니다. 수치 미분은 단순하고 구현하기도 쉽지만 계산 시간이 오래 걸린다는 게 단점입니다. 이번 장에서는 가중치 매개변수의 기울기를 효율적으로 계산하는 ‘오차역전파법 backpropagation’을 배워보겠습니다.*

오차역전파법 성 진입 지니가 도로시와 토토를 데리고 미분의 연쇄법칙이 고속으로 흘러가는 신비한 ‘오차역전파법 성’으로 안내하고 있어요.

지니의 역전파성 가이드

  • 지니: “도로시, 토토! 4장에서 배운 수치 미분은 참 쉽고 직관적이었지만 매개변수가 수억 개일 땐 연산량이 너무 많아 성문이 열리기도 전에 날이 저물어 버려. 이번에 들어갈 오차역전파법(Backpropagation) 성에서는 단 한 번의 앞뒤 왕복으로 모든 매개변수의 기울기를 번개처럼 연산하는 법을 배울 거야!”
  • 도로시: “우와! 매개변수가 아무리 많아도 단 한 번의 왕복(순방향 and 역방향)만으로 전부 알아낼 수 있다니, 정말 효율적이고 강력한 마법이네! 어서 성안으로 들어가 보자!”
  • 토토: “왈왈! (지니의 뒤를 따르며) 번개 연산 마법을 배우러 가자 멍!”

오차역전파법을 제대로 이해하는 방법은 두 가지가 있을 것입니다. 하나는 수식을 통한 것이고, 다른 하나는 계산 그래프로 이해한다는 것입니다. 전자 쪽이 일반적인 방법으로, 특히 기계학습을 다루는 책 대부분은 수식을 중심으로 이야기를 전개합니다. 확실히 수식을 사용한 설명은 정확하고 간결하므로 올바른 방법이라 할 수 있겠죠. 하지만 졸업 후 너무 오랜만에 수식을 중심으로 생각하다 보면 본질을 놓치거나, 수많은 수식에 당황하는 일이 벌어지기도 합니다. 그래서 이번 장에서는 계산 그래프를 사용해서 ‘시각적’으로 이해시켜드리겠습니다. 그리고 실제로 코드를 작성해보면 ‘과연!’이란 탄성과 함께 더 깊이 이해하게 될 것입니다.

오차역전파법을 계산 그래프로 설명한다는 생각은 안드레 카패시 Andrej Karpathy의 블로그[4], 또 그와 페이페이 리 Fei-Fei Li 교수가 진행한 스탠퍼드 대학교의 딥러닝 수업 CS231n[5]을 참고했음을 밝힙니다.


* 옮긴이_ 오차역전파법을 풀어쓰면 ‘오차를 역(반대 방향)으로 전파하는 방법(backward propagation of errors)’입니다. 너무 길고 쓸데없이 어려운 느낌이라 줄여서 ‘역전파법’으로 쓰기도 합니다.


5장 세부 목차

학습자의 학습 흐름과 흥미를 이끌기 위해 총 8개의 서브 챕터로 나누어 모험을 진행합니다. 아래 링크를 클릭해 순서대로 모험에 합류해 보세요!

오차역전파법 로드맵 지니가 칠판 앞에서 계산 그래프, 연쇄법칙, 역전파, 그리고 다양한 신경망 레이어 계층의 구조를 짚어가며 5장 모험 지도를 브리핑하고 있어요.

지니의 5장 코스 설명

  • 지니: “5장의 모험 코스는 국소적 계산을 시각화하는 계산 그래프, 미분의 분배 법칙인 연쇄법칙, 그리고 사칙연산/활성화 함수/어파인/소프트맥스 계층을 레고 조립하듯 직접 클래스로 완성하는 거야!”
  • 도로시: “각각의 레이어를 클래스 하나씩 모듈로 분리해서 조립하니까 복잡했던 신경망 수식이 아주 질서정연하게 코딩되는구나! 코드로 만들면서 ‘과연!’하고 깨달을 준비가 됐어!”
  • 토토: “왈왈! (칠판을 가리키며) 레고 블록 조립 마법이다 멍!”

05.1 계산 그래프

계산 과정을 노드(Node)와 에지(Edge)의 자료구조로 시각화하여 순전파와 역전파의 계산 메커니즘을 알아보고 국소적 계산의 특징을 파악합니다.

05.2 연쇄법칙

합성함수 미분의 곱으로 미분 결과를 계산하는 연쇄법칙(Chain rule)을 계산 그래프의 역전파 관점과 수식으로 비교하며 본질을 마스터합니다.

05.3 역전파

가장 기본이 되는 사칙연산 노드인 덧셈 노드와 곱셈 노드의 역전파 전파 원리를 구체적인 숫자 예시(사과 및 귤 쇼핑 예)를 통해 쉽게 이해합니다.

05.4 단순한 계층 구현하기

곱셈 계층(MulLayer)과 덧셈 계층(AddLayer)을 forwardbackward 인터페이스를 갖춘 파이썬 클래스로 구현하고 가상 사과 쇼핑 시나리오에 결합합니다.

05.5 활성화 함수 계층 구현하기

전기 스위치 작용을 하는 ReLU 계층과, 복잡한 노드 그룹을 거쳐 출력 y만으로 역전파가 깔끔하게 정의되는 Sigmoid 계층의 수학적 미분을 분석하고 파이썬 클래스로 코딩합니다.

05.6 Affine/Softmax 계층 구현하기

행렬 내적과 편향의 가중합 연산을 처리하는 Affine 계층(배치 포함)과, 손실 함수와 결합하여 말끔한 차분 오차 $(y - t)$만을 역전파로 피드백하는 Softmax-with-Loss 계층의 원리를 배웁니다.

05.7 오차역전파법 구현하기

순서가 유지되는 딕셔너리(OrderedDict)를 활용해 각 계층 블록을 레고 조립하듯 연결하고, 역전파 성능을 검증하는 기울기 확인(gradient check) 및 훈련 스크립트를 구현합니다.

05.8 정리

5장에서 다룬 오차역전파법의 원리, 계층 모듈화 설계, 그리고 기울기 확인 검증 기법의 핵심 요소들을 요약합니다.


🌟 5장을 마치며: 오차역전파법

5장에서는 수치 미분의 끔찍한 계산 연산량을 타파하고, 미분의 분배/조합 원리인 연쇄법칙(Chain rule)을 기반으로 전체 매개변수의 기울기를 빛의 속도로 얻는 오차역전파법(Backpropagation)을 마스터했습니다.

  • 시각적인 흐름의 힘: 복잡한 합성함수 미분도 각각의 국소적인 연산 노드로 쪼개어 화살표를 타고 오른쪽(순전파)과 왼쪽(역전파)으로 신호를 흐르게 하는 계산 그래프 모델을 이해했습니다.
  • 계층별 모듈화: ReLU, Sigmoid 활성화 함수부터 선형 가중 연산을 수행하는 Affine, 그리고 Softmax-with-Loss에 이르기까지 모든 레이어를 forwardbackward 한 쌍의 메서드를 갖는 클래스로 개별 격리·설계했습니다.
  • 레고 블록 조립: 복잡한 아키텍처도 단순히 계층의 순서 정보를 갖는 딕셔너리(OrderedDict)에 순서대로 끼워 넣는 것만으로 대규모 전파 연산이 완벽하게 흘러가도록 구현을 단순화했습니다.
  • 신뢰성 확인: 구현이 복잡한 역전파에 버그가 없는지 비교적 구현이 단순해 버그가 없는 수치 미분값과 에러율을 비교하여 검증하는 기울기 확인(gradient check) 노하우를 습득했습니다.

오차역전파법을 완성하여 이제 대규모 학습 연산도 눈 깜짝할 사이에 처리할 기반을 닦았습니다! 다음 6장 학습 관련 기술들에서는 더욱 향상된 가중치 최적화 기법(SGD 외에 Momentum, AdaGrad, Adam), 가중치의 초깃값 설정 노하우, 오버피팅을 방지하는 규제 기법(Dropout, 배치 정규화)들을 적용하여 딥러닝 모델의 학습 안정성과 정확도를 극한으로 끌어올려 보겠습니다!

6장으로 가는 등대 삼총사가 밤하늘의 ‘6장 학습 관련 기술들’ 표지판을 기쁘게 가리키며 다음 학습 모험으로 발걸음을 옮기고 있어요.

도로시의 모험 일지

  • 도로시: “와! 5장 역전파 마법을 마스터하고 나니, 복잡한 신경망 가중치 갱신 연산이 순식간에 끝나는 짜릿함을 느꼈어! 이제 진짜 인공지능을 대량으로 훈련시킬 준비가 된 것 같아.”
  • 지니: “맞아, 도로시! 이제 고속 학습 엔진은 준비되었으니, 다음 6장 학습 관련 기술들에서는 최적화 엔진을 가속하는 방법(Momentum, AdaGrad, Adam)과 오버피팅 방지 부스터(Dropout, 배치 정규화)들을 장착해 볼 거야!”
  • 토토: “왈왈! (꼬리를 힘차게 흔들며) 6장 부스터 장착하러 출발이다 멍!”
서브목차