본문 바로가기
Computer Science(CS)/ML,DL

기울기 폭발(Gradient Exploding)

by Yeoreumssi 2023. 3. 24.
728x90
반응형

기울기 소실과 폭발(Gradient Vanishing and Exploding)은 layer가 깊은 신경망을 훈련하는 동안 발생할 수 있는 문제입니다. 기울기 소실과 관련된 포스팅은 다음 링크에 있습니다.

기울기 소실(Gradient Vanishing)

여기서는 기울기 폭발과 관련된 내용들을 정리하였습니다.

 

기울기 폭발(Gradient Exploding)

  • 역전파 과정에서 출력층에서 입력층으로 갈수록 기울기가 커지는 현상
  • 가중치들이 너무 커지면서 발산되는 현상

해결 방법

  1. 그래디언트 클리핑(Gradient Clipping)
  2. 가중치 초기화(Weight initialization)

 

1. 그래디언트 클리핑(Gradient Clipping)

  • 기울기의 폭발의 막기 위해 기울기의 값을 자르는 것
  • 특정 threshold를 넘지 않도록 값을 잘라 크기를 감소시키는 것(여기서 threshold는 gradient가 가질 수 있는 최대 L2-norm)
  • clipping을 하지 않을 경우, gradient가 너무 커져 global minimum에 도달하지 못함
  • clipping을 할 경우, global minumum에 안정적으로 도달함

  • 사용 방법 → torch.nn.utils의 clip_grad_norm 함수 사용
import torch.nn.utils as torch_utils
torch_utils.clip_grad_value_(model.parameters(), max_grad_norm=5.0, clip_value=1.0)

 

2. 가중치 초기화(Weight initialization)

  • 초기값을 0으로 초기화하면 역전파 계산 시, 모든 가중치의 값이 똑같이 갱신 → 적절한 가중치로 초기화하는 것이 중요함

1) 세이비어 초기화(Xavier Initialization) = 글로럿 초기화(Glorot initialization)

  • 이전 layer의 노드 수와 다음 layer의 노드 수에 따라 가중치를 결정하는 방법
방법1) uniform 분포를 따르는 방법
방법2) normal 분포를 따르는 방법
  • sigmoid나 tanh같은 S자 형태의 활성화 함수와 사용하는 것이 좋음(원점 대칭인 tanh함수와 더 잘 어울림) → ReLU함수와 사용하면 성능이 좋지 않음


2) He 초기화(He initialization)

  • ReLU함수와 함께 자주 사용
  • 다음 층의 뉴런 수를 반영하지 않음
방법1) uniform 분포를 따르는 방법
방법2) normal 분포를 따르는 방법
반응형

댓글