이번 포스팅부터 2~3편으로 나누어 Transformer와 관련한 내용을 정리하려고 한다. 첫 번째 포스팅은 Transformer 모델이 나오게 된 배경? 흐름에 대해 정리하고, 시계열, 자연어 분야에서 트랜스포머 전까지 가장 많이 쓰였던 RNN 기반의 S2S + Attention 구조에 대해 다루려고 한다.
딥러닝 기반의 시계열 예측모델 흐름
시계열 예측 모델을 큰 카테고리로 나눠보면 3가지로 분류해볼 수 있다.
- 전통적인 통계기반의 시계열 분석 방법들 (Moving average, Exponential smoothing, ARIMA, Prophet 등..)
- 머신러닝 기반의 시계열 분석 방법들 (SVM, Random foreset, Boosting 등..)
- 딥러닝 기반의 시계열 분석 방법들 (RNN, LSTM, GRU, S2S, S2S+attention, Transformer, GPT, BERT 등..)
※ attention 과 transformer는 텍스트 문제에서 처음 등장했기 때문에, 이후 설명은 텍스트 번역문제를 기준으로 된 부분이 많지만 여기서 단어 = 시계열 데이터의 time step이라고 가정하면 동일하다.
딥러닝 기반의 시계열 모델의 흐름은 ..
- RNN 이 처음 나오고, Vanishing gradient 문제 (오래된 데이터에 대한 정보를 점점 소실하는..)를 해결하기 위해 LSTM 및 GRU 가 등장했다.
- 이후 가변 길이의 시계열 데이터를 처리할 수 있고, 미래에도 알고 있는 변수를 함께 사용할 수 있는 Encoder-Decoder 구조의 Sequence to Sequence (S2S) 모델이 등장했다.
- S2S 모델은 Encoder 가 입력 정보를 모두 담을 수 있는 '하나의' 벡터 (Context vector)를 만들고 이를 디코더가 원하는 크기의 출력으로 반환하는 구조이다. Context vector는 결국 마지막 시점의 hidden layer 다. 그래서 여전히 오래된 시점의 정보일수록 흐려지는 문제 (마지막 시점/단어를 열심히 보는)가 있다.
- 이러한 문제를 해결하고자.. 각 단어를 예측할 때 입력 문장의 어떤 단어에 더 집중해야 할지를 예측모델에 반영하기 위해 Attention이라는 개념을 접목한 S2S + Attention 구조가 제안되었다. Attention을 사용하면서 Decoder는 각 시점마다 다른 콘텍스트 벡터를 사용하게 되었다. (하나의 콘테스트 벡터가 아닌..)
- 하지만 S2S+attnetion 자체도 어쨌든 인코더와 디코더에 RNN, LSTM 구조를 사용하면서, 고질적인 한계점 (시점에 따른 흐려짐 문제)을 완전히 없애지는 못했다.
- 그래서 RNN 구조를 완전히 버리고 Self-attention 개념을 중심으로 한 Transformer라는 모델이 등장했다. (논문의 제목도 Attention is all you need) 최근까지도 Transformer 구조를 기반으로 한 다양한 모델 (GPT, BERT 등)이 각광받고 있다.
이번 포스팅에서는 RNN (혹은 LSTM이나 GRU가 될 수도 있다) 기반의 S2S + Attention 구조에 대해 정리한다.
Sequence to Sequence + Attention 구조
- Attention 은 'Decoder의' 각 시점마다 다른 컨텍스트 벡터를 쓴다.
- Decoder의 각 단어를 예측할 때 '시점정보' 를 참고하고 Encoder 이서 더 중요한 단어는 더 집중해서 보자. → 이 때 중요도 = 유사도로 판단 -> 유사도의 측도는 내적
- 즉, 각 시점마다의 Context vector를를 만들고, 유사도 기반으로 Context vector를를 가중합해서 Decoder의 인풋으로 사용하는 것
- 즉, 각 시점마다 유사도 기반으로 가중합 하여 만든 Context vector를를 Decoder의 인풋으로 사용하는 것
- 예를 들어번째 단어를 예측하고 싶으면 그에 맞는 컨텍스트벡터를 새로 만든다 : C4 = <S4 · h1> h1 + <S4 · h2> h2 + <S4 · h3> h3
- 이때 이 '유사도' 에 해당하는 확률값을 Attention score라고라고 한다 : <S4 · h1>
- h와학습하면서 계속 변하는 값… 목적은 L4 (Y4와와 Y^4 간의 loss) 을 최소화 하는것. 그것은 S4 S4와 h2 의 유사도가 최대화 될때 일것이다.
이러한 RNN + Attention 구조는 여전히 아래와 같은 한계점을 갖는다.
- 인코더로 가는 길은 이제 attention 을 통해 직접적으로 갈수가 있지만 (예를들어 c4가 직접적으로 h2 를 잘 반영할 수 있지만)
- <문제점 1> 디코더의 학습에서는 여전히 멀수록 잊혀지는 문제.. s4 학습하려면 미분할때 체인룰로 s3, s2, s1 거쳐야..
- <문제점 2> 갈수록 흐려지는 정보에 attention 한다 : x7을을 표현하는 벡터인 h7 은 x1,2.. 등 앞 단어의 정보가 흐려진 채로 들어가 있다. 또한 x8,9 등의 정보는 h7에 들어있지 않다 (이를 반영하려고 Bidirectional LSTM과 같은 모델이 개발되기도 했지만 일반적으로 추천하는 방법은 아니다)
- 정리하면..가 h 는 잘 반영할 수 있지만, 여전히 디코더 학습에 있어서 뒷단의 단어(시점)은 학습이 어렵고, 인코더의 매핑(x->h)도 뒷 시점은 잘 안된다.
Self-attention 콘셉트만..
앞선 한계점을 해결하고자 등장한 Transformer 모델의 핵심 개념은 Self-attention이다. 다음 포스팅에서 Transformer 정리하기 전에 Self-attention의 간단한 콘셉트만 정리해 보면...
기본적인 S2S 구조의 attention 구조는 달리, C (Context vector) , h (hidden layer), s (state of decoder)를 아래와 같이 정의한다.
- C4 = <S4 · h1> h1 + <S4 · h2> h2 + <S4 · h3> h3
- h2 = <h2 · h1> h1 + <h2 · h2> h2 + <h2 · h3> h3
- S4 = <S4 · S1> S1 + <S4· S2> S2 + <S4· S3> S3 + <S4· S4> S4 +
<S4· S5> S5(S5는 안 쓴다.. 커닝하는 거니까..)
C를 구하는 과정은 기존의 attention 구조와 동일하다. 다만,
h를 구할 때 자기 자신과의 attention을 통해 구한다 → 이를 통해 앞선 <문제 2>를 해결한다.
S를 구할 때도 자기 자신과의 attention을 통해 구한다 → 이를 통해 앞선 <문제 1>를 해결한다.
즉, Self attention에서는 아래 X 표시를 한 것처럼, 순서의 연결고리 자체를 없앰으로써 기존의 S2S 구조 attention 문제를 완화했다고 볼 수 있다.
※ 포스팅의 그림은 고려대학교 김성범 교수님 DMQA와혁펜하임 유튜브 채널을 참고하였다.
'Study > 시계열' 카테고리의 다른 글
8. (Transformer-2편) Transormer : Self-Attention (0) | 2024.07.24 |
---|---|
6. 시계열 데이터 클러스터링 (DTW, TimeSeriesKMeans) (0) | 2024.07.09 |
5. Seq2Seq 모델을 이용한 다변량 다중시점 시계열 예측 (0) | 2024.07.08 |
4. Prophet 패키지를 이용한 간단 시계열 예측 (0) | 2024.07.08 |
3. 딥러닝을 이용한 시계열 예측 (TensorFlow, LSTM) (1) | 2024.07.08 |
댓글