-
역전파(backpropagation) 는 신경망 학습의 핵심이지만, 내부 작동 원리를 이해하지 않으면 예상치 못한 오류가 발생하는 ‘누수되는 추상화(leaky abstraction)’ 구조
-
시그모이드(sigmoid) 나 tanh 활성화 함수는 가중치 초기화가 잘못되면 기울기 소실(vanishing gradient) 로 학습이 멈추는 문제 발생
-
ReLU는 입력이 0 이하일 때 뉴런이 영구적으로 비활성화되는 죽은 ReLU(dead ReLU) 현상 유발 가능
-
RNN에서는 반복된 행렬 곱셈으로 인해 기울기 폭발(exploding gradient) 이 일어나며, 이를 방지하기 위해 gradient clipping이나 LSTM 사용 필요
- 역전파의 작동 원리를 이해하지 않으면 프레임워크가 자동으로 처리하더라도 디버깅과 모델 개선 능력이 크게 떨어짐
역전파 이해의 필요성
- Stanford의 CS231n 강의에서는 학생들에게 순전파와 역전파를 직접 구현하도록 과제를 설계
- 일부 학생들은 TensorFlow 같은 프레임워크가 자동으로 역전파를 계산하므로 불필요하다고 불만 제기
- 그러나 역전파는 완전한 추상화가 아닌 누수되는 추상화로, 내부 작동을 모르면 학습 실패 원인을 파악하기 어려움
- 단순히 “프레임워크가 알아서 해준다”는 태도는 모델 설계와 디버깅 능력 저하로 이어짐
시그모이드에서의 기울기 소실
-
시그모이드나 tanh 비선형 함수는 입력 값이 크면 출력이 0 또는 1에 가까워져 포화(saturation) 상태 발생
- 이때 지역 기울기 z(1-z)* 가 0이 되어 역전파 시 기울기 전파가 차단됨
- 시그모이드의 최대 기울기는 0.25로, 매번 통과할 때마다 신호가 1/4 이하로 감소
- 결과적으로 하위 계층의 학습 속도가 상위 계층보다 현저히 느려짐
- 따라서 시그모이드 계층을 사용할 경우 가중치 초기화와 데이터 전처리에 각별한 주의 필요
죽은 ReLU 문제
-
ReLU는 입력이 0 이하일 때 출력을 0으로 만드는 함수
- 순전파에서 뉴런 출력이 0이면 역전파 시 기울기 또한 0이 되어 해당 뉴런이 영구적으로 비활성화됨
- 학습 중 큰 가중치 업데이트나 높은 학습률로 인해 뉴런이 ‘죽은 상태’ 로 고정될 수 있음
- 학습 후 전체 뉴런 중 상당수가 0을 출력하는 경우도 존재
- 따라서 ReLU를 사용할 때는 학습률 조정과 초기화 전략이 중요
RNN의 기울기 폭발
- 단순 RNN에서는 시간 단계마다 동일한 은닉 상태 행렬(Whh) 이 반복적으로 곱해짐
- 역전파 시 이 행렬의 고유값(eigenvalue) 크기에 따라 기울기가 0으로 수렴하거나 무한히 커짐
-
|b| < 1이면 기울기 소실, |b| > 1이면 기울기 폭발 발생
- 이를 방지하기 위해 gradient clipping을 적용하거나 LSTM 구조를 사용하는 것이 일반적
DQN 코드에서의 잘못된 클리핑 사례
- TensorFlow 기반 DQN 구현에서 tf.clip_by_value로 delta(Q 오차) 를 직접 클리핑한 코드 발견
- 이 방식은 delta가 범위를 벗어나면 기울기가 0이 되어 학습이 멈춤
- 의도한 것은 기울기 클리핑이므로, 대신 Huber loss를 사용해야 함
- 예시 코드에서는 조건부로 tf.square와 tf.abs를 조합해 Huber 손실 구현
- 이 문제는 GitHub 이슈로 보고되어 즉시 수정됨
결론
-
역전파는 단순한 자동화 도구가 아닌, 신용 할당(credit assignment) 체계로서 복잡한 결과를 초래
- 내부 작동을 이해하지 않으면 모델 불안정성, 학습 실패, 디버깅 한계에 직면
- 역전파는 수학적으로 어렵지 않으며, CS231n 강의와 과제를 통해 직관적으로 학습 가능
- 역전파를 이해하면 신경망 설계와 문제 해결 능력이 크게 향상됨
- 프레임워크의 자동 미분 기능에 의존하기보다 역전파의 실제 흐름을 숙지하는 것이 중요