역전파는 누수되는 추상화다 (2016)

10 hours ago 2

  • 역전파(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 강의와 과제를 통해 직관적으로 학습 가능
  • 역전파를 이해하면 신경망 설계와 문제 해결 능력이 크게 향상됨
  • 프레임워크의 자동 미분 기능에 의존하기보다 역전파의 실제 흐름을 숙지하는 것이 중요

Read Entire Article