안녕하세요! 오늘은 기울기 소실과 폭주 문제에 대해 알아보겠습니다.
1. 기울기 소실과 폭주의 문제점과 발생 이유
2. 기울기 소실과 폭주를 완화하는 방법
2-1. 수렴하지 않는 활성화 함수 사용
2-2. 그래디언트 클리핑 (Gradient Clipping)
2-3. 가중치 초기화
2-4. 배치 정규화
1. 기울기 소실과 폭주의 문제점과 발생 이유
깊은 인공 신경망을 학습하다 보면 역전파 과정에서 초기 부분의 입력층으로 갈수록 기울기가 점차적으로 작아지는 현상이 발생할 수 있습니다.
이를 기울기 소실이라고 합니다.
반대의 경우로, 기울기가 점차 커지면서 가중치들이 비정상적으로 크게 업데이트 되기도 합니다.
이를 기울기 폭주라고 합니다.
이렇게 말로만 보면 잘 이해가 되지 않으니 그림을 보며 자세하게 알아보겠습니다.
위의 그림은 인공 신경망의 모습입니다.
기울기 소실이 어떻게 생기게 되는 것인지 알기 위해 역전파 과정을 살펴보겠습니다.
역전파가 이루어지는 과정은 다음과 같습니다.
연쇄 법칙을 통해 기울기를 구하고 그 기울기에 학습률을 곱한 값을 기존 가중치에서 빼서 가중치를 업데이트합니다.
이때, 연쇄 법칙을 통해 기울기를 구할 때 곱해지는 값들(a ~ f)이 1보다 작으면 곱할수록 점점 작아지게 됩니다.
그렇게 되면 기울기는 매우 작은 값이 되고 학습률을 곱해 가중치를 업데이트하게 되면
위의 그림처럼 0.3에서 0.29가 되는 것처럼 가중치가 거의 변하지 않습니다.
이 상태를 멈춤 상태라고 하고 가중치는 최적의 값에 도달하지 못하게 됩니다.
이를 기울기 소실 문제라고 합니다.
기울기 폭주 문제도 마찬가지입니다.
연쇄 법칙에서 1보다 큰 값이 곱해지게 되면 가중치가 발산하게 되고 최적의 값에 도달하지 못하게 됩니다.
2. 기울기 소실과 폭주를 완화하는 방법
2-1. 수렴하지 않는 활성화 함수 사용
은닉층의 활성화 함수로 시그모이드 함수를 활용하면
입력의 절대값이 클 경우에 시그모이드 함수의 출력값이 0 또는 1에 수렴하면서 기울기가 0에 가까워지고 역전파 과정에서 기울기가 점차 사라지는 기울기 소실 문제가 발생할 수 있습니다.
ReLU 함수는 특정 양숫값에 수렴하지 않고 시그모이드 함수의 문제를 해결할 수도 있고 빠르다는 장점이 있어 심층 신경망에서 훨씬 더 잘 작동합니다.
하지만, ReLU 함수도 완벽하지 않습니다.
죽은 ReLU로 알려진 문제가 존재합니다.
훈련하는 동안 0 이외의 값을 출력하지 않는다는 의미에서 죽었다고 말합니다.
ReLU는 입력이 음수값일 경우 0을 출력하기 때문입니다.
이를 해결하기 위해 LeakyReLU 같은 변형된 ReLU 함수를 사용합니다.
LeakyReLU는 입력이 음수더라도 0이 아닌 값을 출력하기 때문에 0 이외의 값이 출력되지 않는 죽은 ReLU 문제를 해결할 수 있습니다.
2-2. 그래디언트 클리핑 (Gradient Clipping)
기울기 폭주 문제를 완화하는 인기 있는 방법으로 그래디언트 클리핑 방법이 있습니다.
그래디언트 클리핑은 역전파될 때 일정 임계값을 넘어서지 못하게 기울기 값을 자르는 방법입니다.
임계치만큼 크기를 감소시켜 학습의 안정화를 도모하는 것입니다.
그래디언트 클리핑은 주로 그래디언트의 L2 norm으로 나눠주는 방식을 이용합니다.
그래디언트 클리핑을 하지 않으면 전역 최솟값에 도달하지 못하고 발산하는 것을 볼 수 있지만,
그래디언트 클리핑을 하고 나면 방향은 유지하되 적은 값만큼 이동하여 전역 최솟값으로 향하게 됩니다.
2-3. 가중치 초기화
① 세이비어 초기화
2010년에 세이비어 글로럿과 요슈아 벤지오는 가중치 초기화가 모델에 미치는 영향을 분석하여 새로운 초기화 방법을 제안했습니다.
이 방법은 균등 분포 또는 정규 분포로 초기화할 때 두 가지로 나뉘고, 이전 층의 뉴런 개수와 다음 층의 뉴런 개수로 식을 세웁니다.
이전 층의 뉴런 개수를 n_in, 다음 층의 뉴런 개수를 n_out이라고 하겠습니다.
균등 분포를 사용하여 가중치를 초기화할 경우 다음과 같은 균등 분포 범위를 사용합니다.
정규 분포를 사용하여 초기화할 경우에는 평균이 0이고 표준 편차가 다음을 만족하도록 합니다.
세이비어 초기화는 여러 층의 기울기 분산 사이에 균형을 맞춰서 특정 층이 너무 주목을 받거나 다른 층이 뒤쳐지는 것을 막습니다.
하지만, 세이비어 초기화는 ReLU와 함께 사용할 경우에는 성능이 좋지 않다는 단점이 존재합니다.
ReLU 나 LeakyReLU 함수를 활성화 함수로 사용할 때는 He 초기화 방법을 사용하면 좋습니다.
② He 초기화
HE 초기화는 세이비어 초기화와 유사하게 정규 분포와 균등 분포 두 가지 경우로 나뉩니다.
다만, 세이비어 초기화와 다르게 다음 층의 뉴런의 수를 반영하지 않습니다.
균등 분포로 초기화할 경우에는 다음과 같은 균등 분포 범위를 가지도록 합니다.
정규 분포로 초기화할 경우에는 표준 편차가 다음을 만족하도록 합니다.
시그모이드 함수나 하이퍼볼릭탄젠트 함수를 사용할 경우에는 세이비어 초기화 방법이 효율적이고
ReLU 계열의 함수를 활성화 함수로 사용할 경우에는 HE 초기화 방법이 더 효율적입니다.
2-4. 배치 정규화
수렴하지 않는 활성화 함수를 이용하거나 가중치 초기화를 통해 기울기 소실이나 폭주를 완화시킬 수 있지만,
이 두 방법을 이용하더라도 훈련 중에 언제든 다시 기울기 소실이나 폭주가 발생할 수 있습니다.
배치 정규화는 말 그대로 한 번에 들어오는 배치 단위로 정규화하는 것을 말합니다.
배치 정규화는 각 층에서 활성화 함수를 통과하기 전이나 후에 모델을 하나 추가합니다.
단순하게 입력을 원점에 맞추고 정규화한 다음, 정규화된 데이터에 대해서 두 개의 새로운 파라미터를 사용하여 스케일과 시프트를 수행합니다.
많은 경우 신경망의 첫 번째 층으로 배치 정규화를 추가하면 훈련 세트를 표준화할 필요가 없습니다.
배치 정규화 층이 이런 역할을 대신하기 때문입니다.
배치 정규화 알고리즘은 다음과 같습니다.
수식의 각 기호의 의미는 다음과 같습니다.
(기호가 많아 적기 어려워 책에서 그대로 가져왔습니다..ㅎ)
테스트 시에 입력되는 데이터의 평균과 분산을 이용하면 배치 정규화가 온전하게 이루어지지 않습니다.
배치 정규화를 통해 수행하고자 하는 것이, 학습되는 동안 모델이 추정한 입력 데이터 분포의 평균과 분산으로 정규화를 하고자 하는 것인데
테스트 시에 입력되는 값을 통해서 정규화를 하게 되면 모델이 학습을 통해서 입력 데이터의 분포를 추정하는 의미가 없어지게 됩니다.
따라서, 테스트할 때는 훈련이 끝난 후 전체 훈련 세트를 신경망에 통과시켜 배치 정규화 층의 각 입력에 대한 평균과 표준편차를 구하고
이 최종 입력 평균과 표준편차를 예측에 사용합니다.
그러나 대부분 배치 정규화 구현은 학습 시 배치 단위의 평균과 분산들을 차례대로 받아 이동 평균과 이동 분산을 저장해놓고
테스트할 때 해당 배치의 평균과 분산을 구하지 않고 저장해놓은 평균과 분산으로 정규화를 합니다.
배치 정규화를 사용하면 시그모이드 함수나 하이퍼볼릭탄젠트 함수를 사용하더라도 기울기 소실 문제가 크게 개선됩니다.
훨씬 큰 학습률을 사용할 수 있어 학습 속도를 개선시킬 수 있고, 배치 정규화는 규제와 같은 역할을 하여 드롭아웃 같은 다른 규제 기법의 필요성을 줄여줍니다.
그러나, 배치 정규화는 모델을 복잡하게 하고 실행 시간을 느려지게 합니다.
또한, 배치 정규화는 너무 작은 배치 크기에는 잘 작동하지 않을 수 있다는 단점이 존재합니다.
이렇게 기울기 소실과 폭주 문제에 대해 알아보고 이를 완화할 수 있는 방법들에 대해 알아보았습니다 : )
Reference
https://www.youtube.com/watch?v=qO_NLVjD6zE
핸즈온 머신러닝(2판)
https://sanghyu.tistory.com/87
https://eehoeskrap.tistory.com/430
'딥러닝' 카테고리의 다른 글
텍스트 전처리와 RNN을 활용한 스팸 메일 분류 (1) | 2021.08.24 |
---|---|
LSTM(Long Short-Term Memory)과 GRU(Gate Recurrent Unit) (0) | 2021.08.21 |
딥 러닝의 가장 기본적인 시퀀스 모델 RNN (Recurrent Neural Network) (0) | 2021.08.19 |
영상과 이미지 인식 분야에 탁월한 CNN (Convolutional Neural Network) (0) | 2021.08.16 |