오류 역전파 알고리즘의 설계
2층 퍼셉트론의 파라미터는 θ = {U¹, U²}로 표현합니다. U¹은 입력층 → 은닉층 가중치 행렬, U²는 은닉층 → 출력층 가중치 행렬입니다. 목적함수 J(θ)는 정답 y와 예측값 o 사이의 L2 노름 제곱에 1/2을 곱한 형태이고, 1/2을 붙이는 이유는 나중에 미분할 때 내려오는 2와 약분되어 식이 깔끔해지기 때문입니다.

이 목적함수의 최저점을 찾기 위해 경사 하강법을 적용합니다. U¹과 U²를 각각의 편미분 방향 반대로 업데이트하는 것이 핵심이고, ρ는 한 걸음의 크기인 학습률입니다. 그렇다면 이 편미분을 실제로 어떻게 계산할까요? 그게 오류 역전파 알고리즘의 전부입니다.
학습 알고리즘의 흐름

알고리즘의 흐름은 단순합니다. U¹과 U²를 초기화한 뒤, 매 에폭마다 샘플 순서를 섞고 각 샘플에 대해 세 단계를 반복합니다. 전방 계산으로 출력 o를 구하고, 편미분 ∂J/∂U¹과 ∂J/∂U²를 계산한 뒤, 그래디언트로 가중치를 갱신합니다. 이 과정을 멈춤 조건이 만족될 때까지 반복합니다.
그래디언트 유도
출력층 가중치 u²ₖⱼ의 편미분

u²ₖⱼ는 은닉층의 j번째 노드에서 출력층의 k번째 노드로 가는 가중치입니다. 그림에서 빨간색으로 표시된 연결선입니다. 유도의 핵심 관찰은 u²ₖⱼ는 오직 oₖ에만 영향을 준다는 점입니다. 따라서 합 기호 안에서 k번째 항만 살아남고, 체인 룰을 단계적으로 적용하면 최종적으로 다음과 같이 정리됩니다.
∂J/∂u²ₖⱼ = -(yₖ - oₖ) × τ'(osumₖ) × zⱼ
세 항의 의미는 각각 출력이 얼마나 틀렸는가, 출력 노드가 얼마나 민감한가, 이 연결선으로 얼마나 큰 신호가 흘렀는가입니다. 세 값이 모두 클수록 이 가중치의 책임이 크고, 그만큼 더 많이 수정됩니다.
은닉층 가중치 u¹ⱼᵢ의 편미분

u¹ⱼᵢ는 입력의 i번째 노드에서 은닉층의 j번째 노드로 가는 가중치입니다. 출력층 가중치보다 유도가 복잡한 이유는, 그림에서 빨간색으로 보이듯 u¹ⱼᵢ가 은닉층 노드 j를 통해 모든 출력 노드에 간접적으로 영향을 주기 때문입니다. 합 기호가 사라지지 않고 남아 모든 출력의 오류를 종합해야 합니다. 체인 룰을 끝까지 전개하면 다음과 같습니다.
∂J/∂u¹ⱼᵢ = -τ'(zsumⱼ) × xᵢ × Σ[(yq - oq) × τ'(osumq) × u²qⱼ]
은닉층 노드 j가 각 출력의 오류를 연결 가중치만큼 가중합해서 받고, 자신의 민감도와 입력값을 곱하는 구조입니다.

유도한 식을 재사용 가능한 형태로 정리하면,
출력층 오류 신호 δₖ (식 3.22)는 정답과 예측의 차이에 활성 함수 기울기를 곱한 값입니다. 이를 이용하면 출력층 가중치 변화량이 Δu²ₖⱼ = -δₖ × zⱼ로 깔끔하게 정리됩니다 (식 3.23).
은닉층 오류 신호 ηⱼ (식 3.24)는 모든 출력층 노드의 오류 δq를 연결 가중치 u²qⱼ로 가중합한 뒤 자신의 활성 함수 기울기를 곱한 것입니다. 각 출력 노드가 "나는 이만큼 틀렸어"라고 외치는 소리를 연결선 가중치만큼 증폭해서 받는 구조입니다. 은닉층 가중치 변화량은 Δu¹ⱼᵢ = -ηⱼ × xᵢ가 됩니다 (식 3.25).
출력층이든 은닉층이든 오류 신호 × 입력값 형태로 통일된다는 점이 핵심입니다. 이 대칭 구조 덕분에 역전파를 레이어 수와 무관하게 일반화할 수 있습니다. 식 3.22~3.25를 이용하여 출력층의 오류를 역방향(왼쪽)으로 전파하며 그래디언트를 계산하는 것, 이것이 오류 역전파(error back-propagation) 알고리즘입니다.
전체 학습 알고리즘

식 3.22~3.25를 알고리즘으로 구체화하면 위와 같습니다. 전방 계산(7~8번 줄) → 오류 역전파(9~12번 줄) → 가중치 갱신(13~14번 줄)의 세 단계가 명확하게 분리됩니다. 전방 계산에서 저장된 zsum, z, osum 값이 역전파 단계에서 그대로 재사용되기 때문에, 학습 시에는 이 값들을 반드시 메모리에 유지해야 합니다.
임의 샘플링(Bagging) 방식

기존 방식이 X의 순서를 섞고 모든 샘플을 한 번씩 처리한다면, Bagging 방식은 X에서 매번 복원 추출로 샘플 하나를 뽑습니다. 같은 샘플이 여러 번 선택될 수도 있고, 아예 선택되지 않는 샘플도 생깁니다. 무작위성이 커져 지역 최소점 탈출에 유리하고, 앙상블 학습에도 활용됩니다.
행렬 표기: GPU 고속 연산에 최적화

for 루프 기반 구현은 GPU에서 수백~수천 배 느립니다. 위 알고리즘은 모든 루프를 행렬 연산으로 압축한 버전입니다. 역전파의 ΔU² = -δzᵀ는 외적으로, c×1 벡터와 1×(p+1) 벡터의 곱이 c×(p+1) 행렬 전체를 한 번에 만들어냅니다. 은닉층 오류 신호 계산에서 Ũ²는 바이어스 열을 제외한 U²인데, 바이어스 노드는 역전파 시 오류를 전달받을 필요가 없기 때문입니다.
전방 계산과 역전파 모두 결국 행렬 곱과 원소별 연산 두 가지만 사용합니다. 이 연산 동질성이 GPU 병렬 처리와 완벽하게 맞아떨어져, 딥러닝이 대규모 학습을 가능하게 한 핵심 이유입니다.
미니배치 스토캐스틱 경사 하강법

경사 하강법의 세 변형을 비교하면, 배치 경사 하강법(t=n)은 전체 데이터를 보고 업데이트하므로 안정적이지만 느립니다. 스토캐스틱 경사 하강법(t=1)은 샘플 하나씩 업데이트하므로 빠르지만 그래디언트 잡음이 많습니다. 미니배치 경사 하강법(t=수십~수백)은 두 방식의 장점을 결합한 것으로, GPU 병렬 처리에도 유리해 현대 기계 학습의 표준으로 자리잡았습니다.

미니배치 알고리즘의 핵심은 4번 줄에 있습니다. ΔU²와 ΔU¹을 0으로 초기화한 뒤, t개 샘플 각각의 그래디언트를 11번, 13번 줄에서 누적합니다. 루프가 끝난 뒤 14~15번 줄에서 1/t를 곱해 평균 그래디언트로 한 번에 업데이트합니다. t로 나누는 이유는 배치 크기와 무관하게 동일한 학습률을 사용할 수 있도록 스케일을 맞추기 위해서입니다. 나누지 않으면 배치 크기를 바꿀 때마다 학습률도 함께 조정해야 하는 번거로움이 생깁니다.
모델의 사용

학습이 끝난 모델로 새 데이터를 분류하는 단계입니다. 학습 단계와 결정적으로 다른 점은 전방 계산만 수행한다는 것입니다. 오류 계산, 역전파, 가중치 갱신이 모두 사라지고 2~5번 줄의 전방 계산만 남습니다. 가중치가 이미 고정되어 있기 때문입니다.
출력 벡터 o가 나오면 가장 큰 값을 가진 인덱스 k를 예측 클래스로 반환합니다 (y = argmax oₖ). 전방 계산만 사용하므로 학습 단계에 비해 훨씬 빠르고, 이 속도 차이가 현장 배포 시 NPU 같은 인퍼런스 전용 하드웨어가 주목받는 이유이기도 합니다.
'학교공부 > 딥러닝' 카테고리의 다른 글
| [딥러닝] 딥러닝 최적화(1) (0) | 2026.03.24 |
|---|---|
| [딥러닝] 퍼셉트론 (0) | 2026.03.05 |
| [딥러닝] 기계학습과 수학(2) (0) | 2026.03.04 |
| [딥러닝] 기계학습과 수학(1) (0) | 2026.03.04 |
| 딥러닝 [수정중] (0) | 2025.12.12 |