문과생 네버랜드의 데이터 창고

트랜스포머 알고리즘의 등장 : Attention is all you need 본문

논문 Review

트랜스포머 알고리즘의 등장 : Attention is all you need

K JI 2023. 5. 23. 18:50

<요약>

  1. 기존 자연어 처리(NLP) 분야에서 주로 쓰이던 RNN계열 알고리즘 시대를 종식시킨 트랜스포머 알고리즘을 다룬 논문
  2.  순차적으로 직전 Hidden State를 입력받아 이번 Hidden State를 생성하는 RNN계열 알고리즘의 특성상 장기의존성 문제가 뼈아픈 Pain Point로 작용

    1) 이를 해결하기 위해 현재 시퀀스(ex. '나는 빵집에 간다' 중  '빵집에')에 가장 가까운 시퀀스('간다')를 모델이 학습과정에서 
    좀 더 면밀하게 주목(Attention)하도록 하는 Attention Mechanism을 RNN계열 알고리즘 위에 덧붙이는 시도가 주로 이루어졌음

    2) 이는 성공적인 시도였으나, 여전히 장기의존성문제를 겪는 
    RNN 계열 알고리즘에 의존한다는 근본적인 한계점이 존재.

  3. 트랜스포머 알고리즘은 RNN 계열 알고리즘을 싹 걷어내고, 다음의 방법들로 토큰들의 모든 장기 관계(Long-range Dependency)를 고려하면서도 여전히 RNN계열의 Auto-regressive한 특성을 반영하는 장점을 모두 취함

    1) 인코더 - 디코더 구조를 취함 : 입력 시퀀스를 입력받아 특성 임베딩을 추출하는 인코더, 출력 시퀀스(정답)을 입력받아 입력 시퀀스의 임베딩과 출력 시퀀스의 임베딩을 모두 고려하는 디코더 구조를 채용|

    2) 어텐션 매커니즘의 채택 : 알고리즘이 현재 단계에서 연산중인 출력 시퀀스와 가장 유사한 입력 시퀀스를 학습할 수 있도록 Dot-product Attention Mechanism을 채택
    -. Multi-head Attention : 동일한 시퀀스를 각각 분리된 h개의 다른 공간에서 다른 표현형을 익힐 수 있도록 차원을 분리하여 어텐션 매커니즘을 수행 => 동일한 시퀀스를 다른 시각에서 학습 가능
    -. Self-Attention : 디코더가 인코더를 참조하는 일반적인 Attention 뿐만 아니라, 디코더 및 인코더 각각이 자기 스스로입력값들을 참조하는 Self-attention을 채용

    3) Auto-regressive 특성을 반영
    -. Positional Encoding : 방향성이 존재하지 않고, 모든 시퀀스가 모든 시퀀스에 연결되어 있는 DNN을 차용한 구조상 시계열적인 위치구조를 학습시 알려줘야할 필요성이 존재. => Sin과 Cos의 특성을 적극 활용하여 시퀀스의 위치(Position)과 각 시퀀스들이 갖는 차원($d_{model})이라는 양 특성을 모두 이용하여 위치 구조를 알려주는 Positional Encoding을 차용
    -. 마스크 적용 : 디코더가 학습 과정에서 '미래의 값'을 미리 참고하여 '미래의 값'을 예측하는(LeftWard) 학습 실패를 예방하기 위해 현재 시퀀스의 위치 외에는 전부 0으로 처리하는 마스크를 적용

  4. 이런 방법론으로 트랜스포머는 언어 번역 데이터셋인 WMT 2014 English-to-German 기준 경쟁 모델들의 평가지표(BLEU)에서 가장 높은 평가값을 기록함

    1) 성능평가지표가 매우 드라마틱하게 좋은 성능을 기록한것은 아니나, 계산 복잡도를 낮추면서 RNN의 장기 의존성 문제를 해결했다는 점에서 새로운 NLP 지평을 열었다고 볼 수 있음

    2) 이후 트랜스포머는 인코더는 Bert로, 디코더는 GPT로 각각 발전하게 되며 현재 AI의 인류 위협 문제에 대한 논쟁을 폭발시킨 ChatGPT의 원형이 됨

<본문>

  1. 개요
    1) 2017년 기준으로, NLP문제를 푸는데 주로 사용되었던것은 RNN계열의 알고리즘들, 주로 LSTM(Long short-term memory)GRU(Gated- Recurrent Unit)등이었다.

    ${(1)}$ LSTM, GRU알고리즘을 기본을 하여 입력값을 해석하는 인코더, 출력값과 인코더에서 생성한 Hidden State을 모두 고려하여 정답을 내놓는 디코더 구조를 차용한 인코더-디코더 네트워크가 주로 사용되었다.
    RNN 계열 알고리즘을 인코더 - 디코더 구조로 묶어서 인코더는 해석을, 디코더는 정답을 예측하도록 하는
    인코더 - 디코더 네트워크는 2017년까지 NLP 예측 분야에서 널리 사용되던 구조였다.
    그러나, 길이가 길어질수록 멀리 떨어진 정보는 점점 소실되는 장기 의존성 문제라는 치명적 단점을 가지고 있다.

    ${(2)}$ 그러나 다음과 같은 RNN 계열 알고리즘 자체의 뚜렷한 한계점때문에 발전이 더딜수밖에 없음
    -. 장기 의존성 문제(Long-Range Dependency Problem) : 직전 Hidden State로 이번 Hidden State를 생성하여 정답을 내놓는 방식상, Sequence 길이가 매우 길어질경우 필요한 정보가 점점 손실되는 문제를 가짐

    2) 이런 기존 RNN계열 알고리즘의 문제를 해결하기 위해 저자들은 트랜스포머 알고리즘을 제안

    ${(1)}$ RNN계열의 기본 철학인 '순차성'을 배제

    ${(2)}$ 모든 시퀀스가 모든 시퀀스에 의존하는 전역 의존성(Global Dependency)을 끌어내기 위해 RNN 계열 알고리즘과 함께 발전했던 '어텐션 매커니즘'을 적극 차용

  2. 배경 지식
    1) 어텐션 매커니즘?

    ${(1)}$ 어텐션 매커니즘은 순차적으로 Hidden State를 받아들여 정답을 생성하는 RNN 계열 알고리즘의 한계를 보완하기 방법론

    ${(2)}$ 직전 Hidden State뿐만 아니라, 모든 Hidden State에 걸쳐 현재 고려하고 있는 디코더의 Hidden State와 가장 유사한 인코더의 Hidden State를 더 명확히 부각하는 방법론
    어텐션 메커니즘 예시 애니메이션.
    디코더의 'school'과 가장 연관도가 높은 인코더 시퀀스 '학교에'를 강조하기 위해 어텐션 매커니즘을 활용한다.
    최종적으로 가중화된 Hidden State를 모두 Sum하는 과정에서, '학교에'라는 Hidden State만 강조되어 살아남고
    나머지 Sequence들의 영향력은 미미하게 축소된다.
    ${(3)}$ 트랜스포머는, 위와 같은 어텐션 매커니즘을 알고리즘 작동의 핵심으로 차용한다

  3. 알고리즘 구조
    1) 어텐션 매커니즘의 차용

    ${(1)}$ 우선, 트랜스포머에서는 위 예시 애니메이션 중
    -. 'Hidden State 도출' 단계 중 인코더의 입력에 해당하는 Hidden State를 Query, '디코더의 입력'에 해당하는 Hidden State를 Key
    -. 'Hidden State 가중화' 단계에서 활용되는 인코더의 입력에 해당하는 Hidden State를 Value라고 명명한다.
    Query와 Key는 어텐션 매커니즘에서각각 '인코더의 입력'과 '디코더의 입력',
    Value는 가중화된 Hidden State를 도출하기 위한 '인코더의 입력'에 해당한다.

    물론, 셀프 어텐션을 수행할 땐 모두 '인코더' (혹은 '디코더') 의 입력만이 Query, Key, Value로 활용된다.
    ${(2)}$ 저자들은 위의 어텐션 매커니즘을 다음과 같은 우아한 수식 한줄로 표현한다
    $$ Attention(Q,K,V) = softmax(\frac{QK^{T}}{\sqrt{d_{k}}})V $$

    ${(3)}$ 위 수식을 하나하나 천천히 해석하면
    -. 'Query'와 'Key의 전치 행렬'을 행렬곱 : 어텐션 매커니즘에서 'Dot-product 유사도 도출' 단계와 동일하다
    -. Softmax 함수 적용 : 'Softmax 정규화' 단계와 동일하다
    -. Value 함수 행렬곱 : '가중화된 Hidden State 도출 단계와 동일하다'
    -. 다만, 원래는 수행하지 않는 $\frac{1}{\sqrt{d_{k}}}$ 를 곱해주는데, 저자들이 밝힌 바에 의하면 'Key의 차원 $d_{k}$가 커질수록 유사도 점수는 덩달아 커지는 경향이 있으며, 이는 역전파시 Softmax 함수의 Gradient를 매우매우 작은 수준으로 몰아넣는 경향이 있는 것으로 의심된다'라고 적고 있다. Gradient가 소실되어 역전파가 일어나지 않는 Gradient Vanishing 문제를 해결하기 위해 $\frac{1}{\sqrt{d_{k}}}$를 곱해 정규화를 수행한다.

    ${(4)}$ 한편, 입력값을 입력받는 인코더는 상관이 없으나, 출력값을 입력받아 정답을 생성하는 디코더는 한가지 제약사항이 있다.
    -. 출력값(=정답)을 입력받기 때문에, 현재 시퀀스에서 미래의 시퀀스의 '정답'을 보는것은 학습의 룰 위반이다.
    -. 미래의 시퀀스를 보지 못하기 위해 검은 베일을 씌우는 마스킹 과정을 수행하는데, 이는 디코더에서만 수행하는 과정이다.
    -. 이는 뒤의 '인코더 - 디코더 네트워크' 부분에서 더 자세히 설명한다.

    2) 1개 차원에 국한되어있는 기존 어텐션 매커니즘을 h개로 확장

    ${(1)}$ 동일한 Query와 Key의 어텐션이라도 다양한 부분공간(subspace)에서 다른 관점에서 그 관계를 들여다볼 수 있도록 h개의 멀티 헤드 어텐션을 제안
    동일한 Key, Query에 대하여 어텐션을 수행하지만, 이를 h번 반복하여
    랜덤 초기화된 기저(가중치)를 갖는 다양한 부분공간에서 다른 관계를 살펴볼 수 있도록 multi-head attention을 수행한다.
    ${(2)}$ Multi-head Attention을 수행한 h개의 어텐션 결과물은 1차원으로 다시 Concat을 수행하여 평평하게 만든다.
    $$ MultiHead(Q,K,V) = Concat(head_{1}, ..., head_{h}) W^{O}) $$
    $$ where \quad head_{i} = Attention(QW_{i}^{Q}, KW_{i}^{K}, VW_{i}^{V}) $$
    $$ And \quad W_{i}^{Q} \in \mathbb{R}^{d\_model * d_{k}}, \quad W_{i}^{Q} \in \mathbb{R}^{d\_model * d_{k}}, \quad W_{i}^{V} \in \mathbb{R}^{d\_model * d_{v}}$$

    3) 인코더 - 디코더 네트워크
     
    트랜스포머의 인코더 - 디코더 네트워크 구조 얼개도.
    입력값과 출력값은 Embedding 과정을 거쳐 Positional Encoding이 덧붙여지고, 잔차 네트워크(Residual Network)로
    연결된 Multi-head Attention을 통과해 Feed forward network로 연결된다.
    ${(1)}$ Positional Encoding
    -. 트랜스포머 알고리즘은 RNN구조를 걷어내어 성능 향상을 꾀함
    -. 문제는, 순차성을 제거하면서 모델이 데이터의 기저에 내재되어있는 자연스러운 흐름에 대한 정보(order of sequence)소실한다는 점이다.
    -. 이는 별도의 과정으로 흐름에 대한 정보를 줘야한다는 의미이다.
    -. 트랜스포머는 시퀀스의 상대적 / 절대적 위치에 대한 정보입력 임베딩 벡터에 추가하여 흐름에 대한 결손을 보완함
    -. Positional Encoding이 가져야할 특성은 아래 표와 같다
    조건 설명
    1. 어떤 시퀀스에서 다른 시퀀스까지의 거리(상대적인 거리)는 시퀀스의 위치가 아닌 거리 그 자체에 따라 같은값을 가져야함 -. 예를 들어, (세 번째 시퀀스, 다섯 번째 시퀀스)간 거리는 2,
    (네 번째 시퀀스, 여섯 번째 시퀀스)간 거리는 $\sqrt{2}$와 같이 다른 값을 가져선 안됨
    2. 그 값이 지나치게 커지면 안됨 -. 단순히 포지션 위치를 인덱스로 쓰는 방법론이 기각되는 이유
    -. 예를 들어, 500개의 시퀀스를 가진 문장을 입력했다면 최대 500의 값을 가지는데, 이런 경우 Gradient 역전파 과정에서 불안정이 나타날 수 있음
    3. 각 시퀀스의 포지션은 그 포지션에 대해서는
    차별화되는 고유한 값을 가져야함
    -. 첫번째 포지션과 여덟번 째 포지션이 동일한 값을 가지면 안됨
    4. 가변적인 시퀀스 길이에 대응 가능해야함 -. Min-Max Scailing과 같은 정규화 방법론이 기각되는 이유
    -. 200개의 시퀀스를 가정하고 모델을 구성했다가, 추론 단계에서 500개의 시퀀스가 들어오게 된다면 동일한 위치값을 가짐에도 실제로는 다른 위치인 사례가 발생할 수 있음
    -. 저자들은 위 조건들을 모두 만족시키기 위해 아래와 같은 정현파(코사인, 사인)를 활용한 인코딩 방법론을 제안

     $PE(pos, 2i) = sin(pos / 10000^{2i/d_{model}})$ 2i번째 차원(즉, 짝수 차원)의 경우
    sin을 이용하여 정현파 변환을 수행
     $PE(pos, 2i+1) = cos(pos / 10000^{2i/d_{model}})$ 2i + 1째 차원(즉, 홀수 차원)의 경우
    cos을 이용하여 정현파 변환을 수행
    -. 시퀀스의 Position(Pos)값을 기준으로 각 시퀀스별 $d_{model}$ 값을 일종의 '돌림 버튼'으로 활용하여 차원이 깊어질수록(50에 가까울수록) 정현파의 파장이 점점 더 길어진다

    $d_{model}$의 차원이 깊어질수록(즉, i가 증가할수록) 파장이 점점 길어지다가 어느순간 직선에 가깝게 된다.
    이를 '돌림 버튼'으로 활용하면 고유한 절대적 위치값은 확보하면서, 상대적 거리는 모두 동일하면서, (-1 ~ 1) 사이의 값을 가지는 우리가 원하는 결과를 얻을 수 있다.
    x축 : 시퀀스의 Pos, Y축 : $d_{model}$.
    20개 시퀀스가 각각 50차원을 갖는 경우를 시뮬레이션.
    무지개처럼 호를 그리며 아래로 떨어지는 형태 덕분에
    각 Position은 고유한 절대적 위치값을 갖는다.
    (첫번째 - 세번째), (두번째 - 네번째), (세번째 - 다섯번째),
    즉 두 개 만큼의 거리를 두고 측정한
    시퀀스간 거리는 모두 2.4757로 동일하다.

    ${(2)}$ 인코더 - 디코더 어텐션과 셀프 어텐션
    -. 트랜스포머의 어텐션 매커니즘은 인코더-디코더 어텐션과, 셀프 어텐션으로 이루어져 있다. 
    -. 셀프 어텐션은 어텐션에서의 Key, Value, Query를 인코더 / 디코더 각각 자기 자신의 입력값으로만 수행하는 어텐션을 의미
    -. 인코더 - 디코더 어텐션은 전통적인 의미의 어텐션으로, 인코더의 Hidden StateKey와 Query값으로 입력받고, 디코더의 Hidden State Value값으로 받는 어텐션 매커니즘을 의미

    ${(3)}$ 잔차 네트워크
    -. Multi-head Attention을 거쳐 도출된 Hidden State와 입력값(혹은 직전 Layer에서 도출된 Hidden State)을 더해주는 절차
     
    잔차 네트워크(Residual Network)의 얼개도.
    입력값($X$)을 Layer를 거쳐 나온 출력값($F(x)$)에 더해 최종 Output을 구성한다.
    https://en.wikipedia.org/wiki/Residual_neural_network
    -. 잔차 네트워크를 구성할 경우, 일반적인 Gradient가 Layer를 거쳐 흐르며 Gradient가 소실되는 문제를 '잔차 네트워크'라는 우회로를 통해 어느정도 보상할 수 있다.

    ${(4)}$ Feed-forward 네트워크
    -. 활성화 함수를 ReLU로 갖는 단순 Feed Forward 네트워크를 각 Multi-head Attention 위에 붙인다.
    -. 저자들은 이를 '커널 사이즈 1의 Convlution 레이어'로 간주할 수 있다고 서술하고 있다.

    ${(5)}$ 마스킹 수행
    -. 트랜스포머 알고리즘은 크게 두 가지 마스크를 가짐
    -. 패딩 마스크 : 문장 같은 시퀀스에서 '빈 공간'은 <pad>로 처리하는데, 이 공간은 모델이 학습을 수행하며 연산을 하지 않도록 처리해주는 마스크
    -. Look-ahead 마스크 : 디코더 한정으로, 정답값이 들어오는 디코더가 '미래의 시퀀스'를 미리 참고하여 정답값을 내놓는 학습 실패를 예방하기 위해 미래의 시퀀스는 참조하지 않도록 처리해주는 마스크
    -. 구체적으로는 Attention Layer 내에서 어텐션 스코어를 구한 뒤 패딩 or 미래의 시퀀스의 자리에는 음의 무한대(-InF)를 곱함 => 'softmax 함수 통과'시 자연스럽게 0으로 처리되도록 유도
    Padding Mask와 Look-ahead Mask를 결합하여 마스킹을 수행하는 방법에 대한 절차도
    Attention Layer 연산 과정에서 나오는 '어텐션 점수 행렬'의 요소 중
    ① <pad> ② 미래의 시퀀스 자리에 -InF를 곱한 후, SoftMax 함수를 통과하며 자연스럽게 0으로 처리되도록 유도한다.
  4. 예측 및 추론 수행

    1) 트랜스포머의 학습

    ${(1)}$ 인코더의 입력값과 디코더의 입력값(= 정답값) 이 입력되었을 때, 디코더의 현재 시퀀스(들)의 다음에 올만한 다음 토큰을 예측하는 것이 목표가 된다.
    -. 예를 들어 나올 수 있는 단어의 갯수25,000개라면
    -. 모델은 이 25,000개 중에 '다음에 올 수 있는 확률이 가장 높은 토큰'을 예측하는 문제를 학습하게 된다. 

    ${(2)}$ 이 때, 디코더에서 마스킹한 행렬이 오답의 역전파를 가로막는 게이트 역할을 수행한다.
    -. 연산 과정에서 그 값을 명시적으로 0으로 처리했기 때문에 오답이라고 해도 역전파가 수행되지 않는다.
    트랜스포머 학습하는 방법에 대한 예시 애니메이션 
    ${(3)}$ 저자는 다음의 하이퍼 파라미터로 학습을 수행했다고 밝히고 있다.
    -. 옵티마이저 : Adam Optimizer with warmup($\beta_{1} = 0.9$,$\beta_{2} = 0.98$, $\varepsilon  = 10^{-9}$, warmup_steps = 40000)
    -. 학습 Epochs : 300,000
    -. 인코더 스택(Multi-Head Attention + FF network 결합체) : 6개
    -. 디코더 스택(Maksed Multi-Head Attention + Multi-head Attention + FF network 결합체) : 6개
    -. $d_{model}$ : 512
    -. multi-head Attention의 갯수(h) : 8

  5. 벤치마크 결과
    1) 저자들은 다음의 공개 번역 언어셋을 이용하여 당시 SOTA 모델들과 벤치마킹을 수행했다.

    WMT 2014 English-German Dataset WMT 2014 English-French Dataset
    https://www.statmt.org/wmt14/index.html https://www.statmt.org/wmt14/index.html
    2) 평가 지표는 아래와 같다.
    BLEU
    $min(1,{output\,length(예측\,문장)\over reference\,length(정답\,문장)})(\prod_{i=1}^4precision_i)^{1\over 4}$
    Precision은 예측된 토큰과 실제 토큰이 겹칠때의 기하평균


    -. 2017년 기준으로 당시 SOTA 모델들을 모두 물리치고 가장 최고의 성능을 기록하는데 성공했다.

  6. 결론

    1) 트랜스포머 알고리즘은 기존 RNN 계열 알고리즘의 한계점이었던 장기 의존성 문제를 해결

    2) 또한, Positional Encoding, 닷 프로덕트 어텐션 매커니즘 등 여러 혁신적인 기법들을 결합하여 당시 기준으로 SOTA 성능을 달성
    -. 성능평가지표가 매우 드라마틱하게 좋은 성능을 기록한것은 아니나, 계산 복잡도를 낮추면서 RNN의 장기 의존성 문제를 해결했다는 점에서 새로운 NLP 지평을 열었다고 볼 수 있음

    3) 트랜스포머 알고리즘이 이후 자연어 처리(NLP)분야에 남긴 족적은 다음과 같음
    -. NLP 프로젝트에서 RNN 계열 알고리즘 의존에서 탈피
    -. 이후 트랜스포머는 
    인코더는 Bert로, 디코더는 GPT로 각각 발전
    -. 이 중 GPT는 현재 AI의 인류 위협 문제에 대한 논쟁을 폭발시킨 
    ChatGPT를 탄생시켰다는 점에서 Transformer는 ChatGPT의 직계 할아버지의 역할을 수행했다고 볼 수 있음

  7. 참고문헌
    -. Ashish et.al, “Attention Is All You Need”, 31st Conference on Neual Information Processing System(NIPS 2017), 6000-6010.
    -. "Transformer와 Nerf에서의 Positional Encoding의 의미와 사용 목적", https://gaussian37.github.io/dl-concept-positional_encoding/, 2023년 5월 25일 확인.
    -. "Master Positional Encoding: Part 1", https://towardsdatascience.com/master-positional-encoding-part-i-63c05d90a0c3, 2023년 5월 25일 확인.
    -. "언어 이해를 위한 트랜스포머 모델", https://www.tensorflow.org/text/tutorials/transformer?hl=ko, 2023년 5월 25일 확인.