
614
2
부
신경망과 딥러닝
15.4
긴 시퀀스 다루기
긴 시퀀스로
RNN
을 훈련하려면 많은 타임 스텝에 걸쳐 실행해야 하므로 펼친
RNN
이 매우 깊
은 네트워크가 됩니다. 보통 심층 신경망처럼
11
장에서 언급한 그레이디언트 소실과 폭주 문
제를 가질 수 있습니다. 훈련하는 데 아주 오랜 시간이 걸리거나 훈련이 불안정할 수 있습니다.
또한
RNN
이 긴 시퀀스를 처리할 때 입력의 첫 부분을 조금씩 잊어버릴 것입니다. 불안정한 그
레이디언트 문제부터 시작해서 이 두 문제를 자세히 알아봅시다.
15.4.1
불안정한 그레이디언트 문제와 싸우기
불안정한 그레이디언트 문제를 완화하기 위해 심층 신경망에 사용했던 많은 기법을
RNN
에서
도 사용할 수 있습니다. 좋은 가중치 초기화, 빠른 옵티마이저, 드롭아웃 등입니다. 그러나 수
렴하지 않는 활성화 함수(예를 들어
ReLU
)는 큰 도움이 되지 않습니다. 사실 이런 함수는 훈
련하는 동안
RNN
을 더 불안정하게 만들 수 있습니다. 왜일까요? 경사 하강법이 첫 번째 타임
스텝에서 출력을 조금 증가시키는 방향으로 가중치를 업데이트한다고 가정해봅시다. 동일한
가중치가 모든 타임 스텝에서 사용되기 때문에 두 번째 타임 스텝의 출력도 조금 증가할 수 있
고 세 번째 출력도 마찬가지입니다. 이런 식으로 출력이 폭주합니다. 수렴하지 않는