RNN (Recurrent Neural Network)
- RNN은 현재 타임스텝에 대해 이전 스텝까지의 정보를 기반으로 예측값을 산출하는 구조의 딥러닝 모델이다.
- 예를 들어서, I study math라는 문장이 input이면 x0 = I, x1 = study, x2 = math가 된다.
- A 모델의 output이 다음 time stemp의 input이 된다.
- 매 타임스텝마다 동일한 파라미터를 가진 모듈을 사용하므로, 재귀적인 호출의 특성을 보여주어 'Recurrent Neural Network'라는 이름을 가지게 되었다.
계산 방법
- 변수 설명
- t : 현재 타임스텝 (time step)
- w : 웨이트 (weight)
- h_(t - 1) : old hidden-state vector
- x_t : time step t에서의 input vector
- h_t : new hidden-state vector
- f_W : 파라미터 W를 가진 RNN 함수.
- y_t : time step t에서의 output vector
- 계산 과정
- 위의 변수들에 대하여 h_t = f_W(h_(t-1), x_t)의 함수를 통해 매 타임스텝마다 hidden state를 다시 구해준다.
- 이 때, W와 입력값(x_t, h_(t-1))으로 tan_h를 곱해서 h_t를 구해준다.
- 구해진 h_t, x_t를 입력으로 y_t 값을 산출하게 된다.
- 게산 과정을 더 정리한 그림은 아래와 같다.
다양한 타입의 RNN 모델
- one to one
- [키, 몸무게, 나이]와 같은 정보를 입력값으로 할 때, 이를 통해 저혈압/고혈압인지 분류하는 형태의 태스크.
- one to many
- 이미지 캡셔닝과 같이 하나의 이미지를 입력값으로 주면 설명글을 생성하는 태스크
- many to one
- 감성 분석과 같이 문장을 넣으면 긍/부정 중 하나의 레이블로 분류하는 태스크
- many to many
- 기계 번역과 같이 입력값을 끝까지 다 읽은 후, 번역된 문장을 출력해주는 태스크
- many to many
- 비디오 분류와 같이 영상의 프레임 레벨에서 예측하는 태스크
- 혹은 각 단어의 품사에 대해 태깅하는 POS와 같은 태스크
RNN 모델이 학습하는 방법 : Truncation, BPTT
- Truncation : 제한된 리소스 (메모리) 내에서 모든 시퀀스를 학습할 수 없기 때문에 아래 사진과 같이 잘라서 학습에 이용하는 것.
- BPTT (Backpropagation through time)
- RNN에서 타임스텝마다 계산된 weight를 backward propagation을 통해 학습하는 방식.
- 아래 그림은 특정 hidden state를 시각화한 그림으로, BPTT를 반복하게 되면 다음과 같이 빨강(긍정)과 파랑(부정)으로 해당 time step에서의 중요한 부분을 잘 학습하는 것을 볼 수 있다.
- 그러나, 기존의 Vanilla RNN으로는 위의 사진처럼 잘 학습이 진행되지 않는다. 왜?
- gradient가 전파되면서 소실 혹은 증폭되며 멀리까지 학습 정보를 잘 전달하지 못하는 Long-Term-Dependency가 발생하기 때문.
- 위의 사진은 해당 문제를 보완한 LSTM 모델로 학습한 결과이다.
Vanishing/Exploding Gradient Problem in RNN
'Study > 자연어처리' 카테고리의 다른 글
3. Glove (1) | 2024.02.16 |
---|---|
2. Word2Vec (1) | 2024.02.14 |
1. Bag-of-Words(BoW) (0) | 2024.02.13 |
공부 계획 (0) | 2024.02.11 |