EunGyeongKim

[DL] Gradient Vanishing / Exploding 본문

ML & DL/딥러닝

[DL] Gradient Vanishing / Exploding

EunGyeongKim 2024. 2. 14. 13:35

  • Gradient(미분값, 즉 변화량) 기반 방법들을 사용할 경우 작은 파라미터의 값의 변화가 신경망 출력에 얼마나 영향을 미칠것인가를 기반으로 파라미터 값을 학습시킴.⇒ 파라미터의 값이 변화가 신경망 결과에 작은 영향만 미칠경우 : 효과적 파라미터 학습 불가능
    • Error rate가 낮아지지 않고 수렴해버리는 문제가 발생함.
  • ⇒ 그러므로 Gradient Vanishing / Exploding 은 변화량이 매우 작아지거나(vanishing), 매우 커질때(Exploding)의 상황에서 신경망 학습을 제대로 시키지 못하는것

 

Gradient Vanishing / Exploding 해결방법

  • change activation function
    • Simoid, tanh의 문제점을 해결하기 위해 ReLU(Rectifited Linear Unit) 사용
      • 문제점
        • 매우 비선형적인 방식으로 입력값을 매우 작은 출력값의 범위로 축소해버림
          • sigmoid = [0,1] 매핑
        • 그러므로 레이어의 입력값에서 매우 큰 변화가 있더라고 결과값의 변화량이 극소가 되어버려 학습이 효과적이지 못함.
  • careful initialization
    • 가중치 초기화 잘하기
  • small learning rate
    • Gradient Exploding 문제 해결을 위해 learning rate 값을 작게함.
  • Batch normalization 사용
    • 학습하는 과정 자체를 전체적으로 안정화 시킴.

 

정규화를 하는 이유

  • 학습을 더 빨리 하기 위해
  • local optimum 문제에 빠지는 가능성을 줄이기 위해서
    • 상기 그림에서 최저점을 찾을때 gloabal optimum을 찾지 못하고 local optimum에 빠질 수 있기 때문

 

네트워크의 각 레이어 / activation 에서 입력값의 분산이 달라지는 현상때문에 학습이 불안정해짐.

  • Covariate shift
    • 이전 레이어의 파라미터 변화로 인하여 현재 레이어의 입력의 분포가 바뀌는 현상
  • Internal Covariate Shift
    • 레이어를 통과할 때 마다 Covariate Shift 가 일어나면서 입력의 분포가 약간씩 변하는 현상
  • Whitening
    • 입력값의 특징들을 uncorrelated 하게 만들어주고, 각각의 분산을 1로 만들어주는 작업
    • covariance matrix의 계산과 inverse의 계산이 필요하기 때문에 계산량이 많을 뿐더러, Whitening은 일부 파라미터들의 영향이 무시
    • 단점
      • 단순하게 Whitening만을 시킨다면 이 과정과 파라미터를 계산하기 위한 최적화(Backpropagation)과 무관하게 진행되기 때문에 특정 파라미터가 계속 커지는 상태로 Whitening 이 진행 될 수 있다
  • 배치 정규화 (Batch Normalization)
    • 배치 정규화는 평균과 분산을 조정하는 과정이 별도의 과정으로 떼어진 것이 아니라, 신경망 안에 포함되어 학습 시 평균과 분산을 조정하는 과정
    • 즉, 각 레이어마다 정규화 하는 레이어를 두어, 변형된 분포가 나오지 않도록 조절하게 하는 것이 배치 정규화
    • 미니배치의 평균과 분산을 이용해서 정규화 한 뒤에, scale 및 shift 를 감마(γ) 값, 베타(β) 값을 통해 실행한다. 이 때 감마와 베타 값은 학습 가능한 변수이다. 즉, Backpropagation을 통해서 학습
    • 감마, 베타에 대한 Backpropatation 수식
    • 정규화 된 값을 활성화 함수의 입력으로 사용하고, 최종 출력 값을 다음 레이어의 입력으로 사용
      • output = g(Z), Z = WX + b 식은 output = g(BN(Z)), Z = WX + b 로 변경
    • 입실론(θ)은 계산할 때 0으로 나눠지는 문제가 발생하는 것을 막기 위한 수치적 안정성을 보장하기 위한 아주 작은 숫자
    • 감마(γ) 값은 Scale 에 대한 값
    • 베타(β) 값은 Shift Transform 에 대한 값
      • 입실론, 감마, 베타는 데이터를 계속 정규화 하게 되면 활성화 함수의 비선형 같은 성질을 잃게 되는데 이러한 문제를 완화하기 위함.
    •  

추론(inference) 및 테스트 할 때 배치 정규화 (Batch Normalization)

  • 학습 시에는 배치 정규화의 미니 배치의 평균과 분산을 이용 할 수 있지만, 추론(inference) 및 테스트 할 때에는 이를 이용할 수 없음
  • inference 시 입력되는 데이터의 평균과 분산을 이용하면 배치 정규화가 온전하게 이루어지지 않ㅇ므
  • 즉, inference 에서는 결과를 Deterministic 하게 하기 위하여 고정된 평균과, 분산을 이용하여 정규화를 수행하게 됨
    • Train 모드와 Test 모드를 따로 두는 이유
    • 미리 저장해둔 미니 배치의 이동 평균(Moving Average)을 사용하여 해결
  • inference 전에 학습 시에 미리 미니 배치를 뽑을 때 Sample Mean 및 Sample Variance 를 이용하여 각각의 이동 평균을 구해놔야한다. 위 수식에서 Inference 시에 평균은 각 미니 배치에서 구한 평균들의 평균을 사용하고, 분산은 분산의 평균에 m/(m-1) 을 곱해주게 된다. 이를 곱하는 이유는 통계학적으로 unbiased variance 에는 "Bessel's correction"을 통해 보정을 해주는 것이다. 이는 학습 전체 데이터에 대한 분산이 아니라 미니 배치들의 분산을 통해 전체 분산을 추정할 때 통계학 적으로 보정을 위해 Bessel의 보정 값을 곱해주는 방식으로 추정하기 때문

 

 

  • 배치 정규화는 단순하게 평균과 분산을 구하는 것이 아니라 감마(Scale), 베타(Shift) 를 통한 변환을 통해 비선형 성질을 유지 하면서 학습 될 수 있게 해줌
  • 배치 정규화가 신경망 레이어의 중간 중간에 위치하게 되어 학습을 통해 감마, 베타를 구할 수 있음
  • Internal Covariate Shift 문제로 인해 신경망이 깊어질 경우 학습이 어려웠던 문제점을 해결
  • gradient 의 스케일이나 초기 값에 대한 dependency 가 줄어들어 Large Learning Rate 를 설정할 수 있기 떄문에 결과적으로 빠른 학습 가능함, 즉, 기존 방법에서 learning rate 를 높게 잡을 경우 gradient 가 vanish/explode 하거나 local minima 에 빠지는 경향이 있었는데 이는 scale 때문이었으며, 배치 정규화를 사용할 경우 propagation 시 파라미터의 scale 에 영향을 받지 않게 되기 때문에 learning rate 를 높게 설정할 수 있는 것
  • regularization 효과가 있기 때문에 dropout 등의 기법을 사용하지 않아도 됨 (효과가 같기 때문)
  • 학습 시 Deterministic 하지 않은 결과 생성
  • Learning Rate Decay 를 더 느리게 설정 가능
  • 입력의 범위가 고정되기 때문에 saturating 한 함수를 활성화 함수로 써도 saturation 문제가 일어나지 않음, 여기서 saturation 문제란 가중치의 업데이트가 없어지는 현상임

 

Comments