본문 바로가기
Study/시계열

7. (Transformer-1편) RNN 과 Attention

by 까망우동 2024. 7. 24.
반응형

 

     

    이번 포스팅부터 2~3편으로 나누어 Transformer와 관련한 내용을 정리하려고 한다. 첫 번째 포스팅은 Transformer 모델이 나오게 된 배경? 흐름에 대해 정리하고, 시계열, 자연어 분야에서 트랜스포머 전까지 가장 많이 쓰였던 RNN 기반의 S2S + Attention 구조에 대해 다루려고 한다. 


    딥러닝 기반의 시계열 예측모델 흐름 

     

    시계열 예측 모델을 큰 카테고리로 나눠보면 3가지로 분류해볼 수 있다. 

    1. 전통적인 통계기반의 시계열 분석 방법들 (Moving average, Exponential smoothing, ARIMA, Prophet 등..) 
    2. 머신러닝 기반의 시계열 분석 방법들 (SVM, Random foreset, Boosting 등..) 
    3. 딥러닝 기반의 시계열 분석 방법들 (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와혁펜하임 유튜브 채널을 참고하였다. 

    반응형

    댓글