순환 신경망(RNN)을 언어 모델에 사용한 이유는 고정된 데이터가 아니라 순차 데이터를 처리하도록 설계된 인공 신경망이기 때문이었습니다. 이는 자연어 처리외에도 시계열 예측, 음성 인식과 같은 작업에 유용한 네트워크 구조인데요. 이번 글에서는 RNN의 학습 프로세스에 대해 설명해 보도록 하겠습니다.
BPTT란
RNN의 학습은 쉽게 생각해 순환 구조를 펼친 후 한다고 생각하면 됩니다. 그 다음엔 일반적인 오차역전파법을 적용하면 되는거죠. 우선 순전파를 수행하고, 이어서 역전파를 수행하여 원하는 기울기를 구합니다. 단지 순환구조라는 것만 다릅니다.
이런 구조 때문에 RNN에서 오차역전파법은 '시간 방향으로 펼친 신경망의 오차역전파법' 이라고 말합니다. 영어로 BPTT (Backpropagation Through Time)라고 부릅니다.
그런데 두가지 문제점이 있습니다. 첫째는 순환 횟수에 따른 리소스 증가 문제입니다. 순환을 얼마나 시킬까에 대한 이슈가 발생합니다. 시계열 데이터의 시간 크기에 비례하여 BPTT가 소비하는 컴퓨팅 자원도 증가합니다. 즉, 메모리 사용량이 증가한다는 이야기죠.
두번째는 기울기 소멸 이슈입니다. 시간 크기가 커지면 역전파 시의 기울기가 불안정해지게 됩니다. 조금씩 작아져서 이전 시각 t까지 역전파되기 전에 0이 되어 소멸됩니다. 이러한 부분을 조금이라도 보완하기 위해 활성화 함수는 하이퍼볼릭탄젠트 사용합니다.
Truncated BPTT
위에 문제점을 보완하기 위한 방법이 Truncated BPTT입니다. 시간축 방향으로 너무 길어진 신경망을 적당한 지점에서 잘라내는(truncated) 방법입니다. 작은 신경망 여러 개로 만들어 잘라낸 다음 작은 신경망에서 오차역전파법을 수행하는 기법입니다.
순전파의 연결은 그대로 유지합니다. 이유는 데이터를 순서대로 입력해야 하기 때문이죠. 역전파의 연결은 적당한 길이로 잘라내 잘라낸 신경망 단위로 학습을 수행합니다. 이것에 대한 이점은 역전파의 연결을 잘라버리면 그보다 미래의 데이터에 대해서는 생각할 필요가 없어집니다. 이 때문에 각각의 블록 단위로 미래의 블록과는 독립적으로 오차역전파법을 수행하고 완결시킬 수 있습니다.
여기서 블록은 역전파가 연결되는 일련의 RNN 계층을 말합니다. 순전파를 수행하고 나서 그 다음 역전파를 진행하여 원하는 기울기를 구하는 것이 학습의 원리입니다. 블록 단위로 나눴는데, 순전파의 연결을 그대로 유지하는 것은 어떻게 할까요? 다음 순전파를 수행할 때 앞 블록의 마지막 은닉 상태인 $ h_{t} $가 필요합니다. $ h_{t} $로 순전파가 계속 연결될 수 있게하는 것이죠.
Truncated BPTT의 미니배치 학습
각 블록을 잘라냈으면 이 단위로 미니배치 학습을 할 수 있어야 더 효과적일 겁니다. 미니배치 학습을 수행할 때는 각 미니배치의 시작 위치를 오프셋으로 옮겨준 후 순서대로 진행합니다. 데이터를 순서대로 입력하다가 끝에 도달하면 다시 처음부터 입력하도록 진행합니다.
미니배치 설명에서 오프셋이라는 개념이 나오는데요. 위키백과에 의하면 오프셋이란 일반적으로 동일 오브젝트 안에서 오브젝트 처음부터 주어진 요소나 지점까지의 변위차를 나타내는 정수형을 말합니다. 여기에서는 블록의 변위차 만큼을 말한다고 볼 수 있겠네요.
예를 들면, 1000개의 dataset의 미니배치를 두 개로 구성해 학습할 때를 가정해 본다면, 500씩 나눠서 진행할 수 있습니다. 첫 번째 미니배치 때는 처음부터 순서대로 1~499번째까지 데이터를 제공합니다. 두 번째 미니배치 때는 500번째 데이터를 시작 위치로 정하고 그 위치부터 다시 순서대로 데이터를 제공합니다. 이렇게 해서 두 미니배치 병렬 수행이 가능합니다.
활성화 함수에 대한 생각
앞에서 설명에서 활성함수를 하이퍼볼릭탄젠트를 사용한다고 했습니다. 그렇다면 기울기 소실을 막기 위해 ReLU를 사용한다면 어떨까요? CNN과 달리 이전 상태의 값을 가져와서 사용하므로 ReLU를 쓰게되면 이전 값이 커짐에 따라 전체적인 출력이 발산하는 문제 발생합니다.
그렇다면 tanh를 사용하는 이유는 무엇일까요? 과거의 값들을 재귀적으로 사용하는 RNN 모델에서는 데이터를 normalizing 하는 것이 필요했습니다. 이를 위해 sigmoid보다 기울기의 역전파가 더 잘되는 tanh를 사용함으로써 좋은 결과 얻을 수 있습니다. ReLU와 tanh의 차이점을 알고 싶다면 활성화 함수의 종류 및 특성에 대해 확인해 보세요.
Truncated BPTT는 기울기 소실의 대안일까?
이 질문의 답변을 위해서는 SimpleRNN의 문제점인지를 알아보아야 합니다. 실제로 SimpleRNN은 거의 사용하지 않습니다. 지금까지 설명한 RNN은 가장 기본적인 RNN이기 때문에 SimpleRNN이라고 하고 vanilla RNN이라고도 부릅니다. 이 모델은 일반적으로 실전에 사용하기에는 너무 단순합니다.
이론적으로 t에서 이전 모든 타임스템프의 정보를 유지할 수 있으나, 실제로 긴 시간에 걸친 의존성을 학습할 수는 없습니다. 우리가 보완했던 Truncated BPTT로도 한계가 있다는 이야기 입니다. 학습 데이터가 장기간에 걸쳐 패턴이 발생한다고 하면, 이러한 장기간(Long-Term)의 패턴을 학습할 수 없는 문제 발생합니다.
성능과 기울기 문제를 Truncated BPTT만으로는 역부족이라는 결론입니다. 이런 장기 의존성(Long-Term Dependency) 문제 해결을 위해 나온 모델이 LSTM입니다. 이것이 제대로된 RNN이라고 할 수 입니다.
'딥러닝' 카테고리의 다른 글
LSTM의 배경 및 구조, 핵심 아이디어 (0) | 2024.04.15 |
---|---|
순환신경망(RNN) 구현, Time RNN (0) | 2024.04.09 |
순환신경망(RNN)이 언어 모델로 사용된 이유 (0) | 2024.03.27 |
Word2Vec: CBOW 모델 추론 및 학습 (0) | 2024.03.26 |
Word2Vec의 아이디어와 역할 (0) | 2024.03.25 |