오늘은 딥러닝 모델의 학습 원리를 수학적으로 구현하는 핵심 메커니즘, 즉 계산 그래프(Computational Graph)와 역전파(Backpropagation)의 구조와 작동 원리를 집중적으로 학습했다. 머신러닝을 수학적으로 해석할 때 가장 중요한 기둥 중 하나가 바로 미분과 그 전파 방식인데, 이를 체계적으로 구현하는 것이 계산 그래프이며, 그 위에서의 기울기 전파가 역전파로 이어진다.
계산 그래프란 무엇인가?
계산 그래프는 하나의 계산 과정을 노드(Node)와 엣지(Edge)로 구성된 그래프로 나타내는 구조다. 이 그래프는 데이터가 어떻게 흐르고, 어떤 연산이 어떤 순서로 이루어지는지를 명확히 시각화할 수 있는 장점이 있다. 예를 들어, 다음과 같은 간단한 사과 구매 예시를 살펴보자.
사과 가격: 100원, 수량: 2개, 소비세: 10%
최종 가격 계산: 100 × 2 × 1.1 = 220
이 계산 과정을 계산 그래프로 표현하면 다음과 같다:
[100] --×--> [200] --×--> [220]
^ ^
2개 세금(1.1)
이러한 흐름을 시각적으로 표현함으로써, 우리는 중간 계산값의 저장과 재사용, 그리고 연쇄 법칙(Chain Rule) 기반의 미분 전파가 가능해진다.
계산 그래프의 방향성과 구조
계산 그래프는 크게 두 가지 방향으로 동작한다:
- 순전파(Forward Propagation)
왼쪽에서 오른쪽으로 연산이 흐르며, 입력값이 중간 노드를 거쳐 최종 출력값을 만든다. - 역전파(Backpropagation)
출력값에서 시작해 각 노드에 대한 기울기(Gradient)가 오른쪽에서 왼쪽으로 전달된다. 이 때 각 노드는 국소적(local) 계산만으로 자신이 받은 기울기를 다시 이전 노드로 전파할 수 있다.
이처럼 각 노드는 자신이 어떤 연산을 수행했는지에 따라 순전파 연산의 도함수를 역전파에 이용하게 된다.
덧셈과 곱셈 노드의 미분 규칙
계산 그래프의 핵심은 각 연산을 수행하는 노드가 자신만의 미분 규칙을 가지고 있다는 점이다.
🔹 덧셈 노드: z = x + y
- 순전파: z = x + y
- 역전파:
- ∂L/∂x = ∂L/∂z × 1
- ∂L/∂y = ∂L/∂z × 1
→ 입력 변수 모두에게 동일한 기울기가 전달됨
🔹 곱셈 노드: z = x × y
- 순전파: z = x * y
- 역전파:
- ∂L/∂x = ∂L/∂z × y
- ∂L/∂y = ∂L/∂z × x
→ 입력 변수에 따라 기울기가 비례적으로 분배
쇼핑 예시를 통한 계산 그래프 이해
보다 현실적인 예시로 사과와 귤을 함께 구매하는 상황을 들 수 있다.
- 사과: 100원 × 2개 = 200원
- 귤: 150원 × 3개 = 450원
- 총합: 650원
- 소비세 포함: 650 × 1.1 = 715원
이 계산은 다음의 노드들로 구성된다:
- MulLayer: 사과 계산, 귤 계산
- AddLayer: 합산
- MulLayer: 세금 적용
이를 기반으로 역전파를 수행하면 다음과 같은 기울기가 각 요소에 전달된다:
- 소비세 곱셈 노드에서 상류로부터 1의 기울기를 받으면, 이전 노드(합계 650)에는 1.1이 전달됨
- AddLayer를 거쳐 사과/귤 계산 노드로 각각 1.1 분배
- 곱셈 노드를 통해 가격 방향으로 다음과 같은 기울기 계산:
- 사과 가격: 2 × 1.1 = 2.2
- 사과 개수: 100 × 1.1 = 110
- 귤 가격: 3 × 1.1 = 3.3
- 귤 개수: 150 × 1.1 = 165
코드로 구현하는 계산 계층
MulLayer 클래스
class MulLayer:
def forward(self, x, y):
self.x = x
self.y = y
return x * y
def backward(self, dout):
dx = dout * self.y
dy = dout * self.x
return dx, dy
곱셈 계층은 순전파에서는 단순히 곱셈을 수행하지만, 역전파에서는 입력값을 기억해두었다가 기울기를 곱해 전달한다.
AddLayer 클래스
class AddLayer:
def forward(self, x, y):
return x + y
def backward(self, dout):
return dout, dout
덧셈 계층은 간단히 입력값을 더한 결과를 내고, 역전파에서는 기울기를 동일하게 복사하여 전달하는 구조다.
계산 그래프의 학습 흐름 요약
계산 그래프를 통한 학습은 다음과 같은 단계로 구성된다:
- 미니배치(Mini-Batch) 샘플링
전체 데이터에서 일부 샘플을 뽑아 학습에 사용 - 순전파를 통해 예측값 계산
- 손실 함수(loss function) 계산
- 역전파를 통해 손실의 기울기 계산
각 계층에서의 연산 구조에 따라 국소적으로 미분을 계산하며, 전체 기울기를 효율적으로 추정 - 파라미터 갱신
계산된 기울기를 사용하여 파라미터(W, b 등)를 갱신 (예: 경사하강법) - 이 과정을 반복
학습이 충분히 진행될 때까지 위 과정 반복
오늘의 회고
이번 학습은 단순한 수학적 미분에서 출발해, 신경망 학습의 기초 메커니즘을 실제 코드로 구현할 수 있는 수준으로 이해를 확장한 시간이었다. 계산 그래프는 단순히 연산 순서를 나타내는 도구가 아니라, 딥러닝 모델이 학습을 수행하는 기반 구조임을 알 수 있었다.
또한, 연쇄 법칙을 이용한 역전파 알고리즘은 각 계층을 미분 가능한 블록으로 추상화함으로써, 복잡한 모델을 효율적으로 학습할 수 있는 기반이 된다. 실전에서는 이 구조 위에 다양한 활성화 함수, 손실 함수, 정규화 기법들이 얹어지며, 더 복잡한 신경망 구조가 형성된다.
'[kakao x goorm] 생성 AI 응용 서비스 개발자 양성 과정 > 회고록' 카테고리의 다른 글
[kakao x goorm] PyTorch 핵심 문법 정리 (0) | 2025.05.11 |
---|---|
[kakao x goorm] 실습 환경 설정과 파이토치 기초 (0) | 2025.05.07 |
[kakao x goorm] 경사하강법과 옵티마이저, 딥러닝 학습의 시작점 (0) | 2025.05.02 |
[kakao x goorm] 2층 은닉 신경망 구현부터 소프트맥스 안정화까지 (0) | 2025.04.29 |
[kakao x goorm] 퍼셉트론에서 신경망으로 넘어가기 (0) | 2025.04.29 |