이번 글에서는 대표적인 딥러닝 기반의 시계열 모델인 RNN(Recurrent Neural Network)에 대해 살펴보고자 합니다. RNN은 시계열 데이터를 비롯하여 문장 형식의 텍스트 데이터에도 활발히 사용되고 있습니다. 해당 글은 '밑바닥부터 시작하는 딥러닝 2권'을 주로 참고하여 작성하였음을 미리 알려드립니다.
1. RNN 구조
Word2Vec을 비롯하여 기본적인 구조를 가지는 신경망들은 텍스트에서도 나타나는 시계열 데이터의 패턴을 충분히 학습하지 못한다는 단점이 존재합니다. 시계열 특성을 고려하기 위해 등장한 신경망 기법이 RNN으로, 데이터가 끊임없이 순환하는 구조로 되어있어 과거의 정보를 기억하는 것과 동시에 최신 데이터로 갱신된다는 특징을 가집니다.
아래의 그림은 RNN의 간단한 구조입니다. 단어의 순서에 따라 순차적으로 단어의 분산 표현인 \( x_t \)를 입력을 받게 되고 결과인 \( h_t \)를 출력하는 구조이며, \( h_t \)가 결과로 출력되지만 다음 레이어의 입력으로 활용됩니다.
결과인 \( h_t \)는 행벡터인 \( h_{t-1} \)과 \( x_t \), 두 개의 입력을 받기 때문에, 가중치 매개변수도 \( W_h \), \( W_x \), 두 개가 존재합니다. \( h_{t-1} \)은 \( W_h \), \( x_t \)는 \( W_x \)와 행렬 곱을 계산한 이후 편향과 함께 모두 더해지고, tanh 함수를 바탕으로 결과인 \( h_t \)가 출력됩니다. RNN은 \( h \)라는 '상태(메모리)를 가지고 있는 계층'이라고도 불리며, \( h_t \)는 신경망의 결과로 출력되는 것이므로 은닉 상태 혹은 은닉 상태 벡터로 불립니다.
2. RNN 학습
순환 구조의 RNN을 펼치게 되면, 기존 신경망의 순전파 구조와 유사하기 때문에 역전파도 그대로 적용하는 것이 가능합니다. 기존과 동일하게 먼저 순전파를 진행한 이후 역전파 수행을 통해 기울기를 계산하게 되는데, RNN에서의 오차역전파는 BPTT (Backpropagation Through Time), 즉 '시간 방향으로 펼쳐진 신경망의 오차역전파'라고 칭합니다. 하지만 시계열 데이터가 길어질 경우, 기울기 소실 문제와 더불어 각 계층에서의 중간 데이터를 유지하기 위한 메모리 자원의 사용량도 증가한다는 문제가 존재합니다.
이러한 문제를 해결하고자 Truncated BPTT라는 개념이 적용됩니다. Truncated BPTT란 시계열 데이터가 길어질 경우 발생하는 역전파의 문제점을 해결하기 위해, 순전파의 연결은 그대로 유지하되 역전파의 연결은 적당한 길이로 잘라내어 학습하는 방법입니다. 잘라낸 블록 단위로 순전파를 수행한 이후 역전파를 진행하게 되고, 순전파의 마지막 결과를 다음 블록으로 입력하는 과정은 똑같습니다.
기존 신경망의 미니배치 학습에서는 전체 데이터에서 무작위로 일부 데이터를 선택했습니다. 하지만 RNN에서 Truncated BPTT를 수행하기 위해서는 데이터를 순서대로 입력해야 합니다. 데이터의 길이는 1000, 배치 수는 500, 블록 단위는 10으로 했을 때의 예시는 아래와 같습니다.
첫 번째 미니배치의 시작은 \( x_0 \), \( x_1 \), ..., \( x_9 \)이고, 두 번째 미니배치의 시작은 미니배치 수만큼 더해준 \( x_500 \), \( x_501 \), ..., \( x_509 \)입니다. 이후 과정은 앞서 설명한 것처럼 블록 단위로 순전파, 역전파 과정이 반복됩니다. 결국 Truncated BPTT에서의 미니배치 학습은 1) 데이터를 순서대로 입력하기, 2) 미니배치별 시작위치 옮기기를 주의해야 합니다.
3. RNN 구현
RNN 수식에 미니배치를 적용한다고 했을 때, 수식에서의 각 행렬에 대한 형상은 다음과 같습니다. 식에서 \( N \)은 미니배치 크기, \( D \) 입력 벡터의 차원 수, \( H \)는 은닉 상태 벡터의 차원 수를 나타냅니다.
순전파에서의 연산은 1) 행렬 곱인 matmul, 2) 덧셈, 3) tanh 함수 적용, 세 단계로 구성됩니다. 역전파 과정에서는 다음 층의 은닉 상태의 미분 값이 해당층으로 전달되며, 오차역전파 과정을 거쳐 가중치 갱신이 이루어짐과 동시에, 1) 이전 층으로 전달될 은닉 상태 미분 값과 2) 입력 벡터의 미분 값, 두 가지 결과가 출력됩니다.
4. RNNLM
RNNLM(RNN Language Model)은 RNN을 사용한 언어 모델로, 전체적인 구조는 아래와 같습니다. 단어가 입력되면 Embedding 계층을 거쳐 단어 벡터(단어의 분산 표현)로 변환된 후 RNN 계층으로 입력됩니다. RNN 계층은 은닉 상태를 출력하고, 은닉 상태는 Affine과 Softmax 계층을 거쳐 입력된 단어 이후에 어떠한 단어가 올지 확률을 출력합니다. Word2Vec과 달리 RNN 계층이 존재하기 때문에 이전에 입력된 단어들의 정보를 기억할 수 있다는 장점이 존재합니다.
언어 모델의 예측 성능을 평가하는 척도로는 주로 퍼플렉서티(Perplexity, 혼란도)를 사용하며, 간단하게 '확률의 역수'로 나타낼 수 있습니다. 아래의 예시에서 모델 1의 경우, say가 나올 확률이 0.8일 때 퍼플렉서티는 1/0.8=1.25가 나옵니다. 반면 모델 2의 경우, say가 나올 확률이 0.2이므로 퍼플렉서티는 1/0.2=5가 나옵니다. 퍼플렉서티는 작을수록 좋은 모델임을 나타내며, 직관적으로 분기 수, 즉 다음에 출현할 수 있는 단어의 후보 수로 해석이 가능합니다.
데이터가 여러 개일 경우를 생각해 보면, 교차 엔트로피 오차의 수식은 \( L \)로 표현되고, 손실 함수의 결과인 \( L \)은 자연지수 함수에 입력되어 퍼플렉서티가 계산됩니다.
<참고>
https://product.kyobobook.co.kr/detail/S000001810145
밑바닥부터 시작하는 딥러닝 2 | 사이토 고키 - 교보문고
밑바닥부터 시작하는 딥러닝 2 | 직접 구현하면서 배우는 본격 딥러닝 입문서 이번에는 순환 신경망과 자연어 처리다!이 책은 『밑바닥부터 시작하는 딥러닝』에서 다루지 못했던 순환 신경망(R
product.kyobobook.co.kr
'Data Science > Deep Learning' 카테고리의 다른 글
[Deep Learning] Word2Vec - skip-gram (0) | 2024.02.20 |
---|---|
[Deep Learning] Word2Vec - CBOW (2) | 2024.02.08 |
[Deep Learning] 자연어처리(Natural Language Processing, NLP) 기초 (2) | 2024.02.07 |
[Deep Learning] Variational AutoEncoder(VAE) (2) | 2022.12.06 |
[Deep Learning] AutoEncoder(오토인코더) (1) | 2022.12.02 |
댓글