부스트캠프 AI Tech 4기

(NLP 기초대회) Transformer

쉬엄쉬엄블로그 2023. 7. 19. 11:16
728x90

이 색깔은 주석이라 무시하셔도 됩니다.

Transformer - Review for NLP

Transformer

  • Transformer 탄생 배경, Transformer에 대한 이해, 자연어처리를 위한 Transformer

기존 NN의 문제점

  • 기존의 신경망은 Sequence data에 대해서는 처리하기 어려움

https://www.ibm.com/cloud/learn/neural-networks

  • 입력이 하나가 들어오면 출력이 하나가 나감

    • 자연어는 기본적으로 하나가 들어와서 하나가 나가는 구조가 아님
    • 입력이 하나가 들어오고 출력이 하나가 나가는 구조로는 시퀀스 정보를 처리하기에는 쉽지 않음
  • RNN의 등장

    https://ieeexplore.ieee.org/document/7965918

    • Sequence data의 처리를 위한 RNN(Recurrent Neural Network) 등장
  • RNN의 문제점

    • 3번의 정보가 2번에 들어올 수 없는 문제가 있음
    • 무조건 t-1이 끝나야 t가 생성됨
    • 문장이 길어서 토큰이 많아진다면 초반에 있는 토큰의 정보가 마지막 부근에 있는 토큰에 전달되기가 힘들어짐
  • 어떻게 하면 Sequence to Sequence 문제를 잘 해결할 수 있을까?

    • RNN의 구조적인 문제를 해결하기 위해서 나온 메커니즘이 attention
    • attention의 효과는 번역 task에서 잘 증명됨
    • 이 attention을 집적시켜서 만든 것이 트랜스포머 구조
    • 어떻게 여러가지 토큰을 쉽게 잘 인코딩할까?
    • 어떻게 Long-term Dependency를 잘 인코딩할까?
    • 어떻게 순서 정보를 잘 인코딩할까?
    • 어떻게 빠르게 인코딩할까?
    • 하나의 구조로 여러 문제를 동시에 풀려면 어떻게 인코더와 디코더를 만들어야 할까?

Attention Mechanism

  • attention을 이해하려면 Blending이라는 개념을 잘 이해하면 도움이 됨

  • Sequence를 서로 Blending 해보는 건 어떨까?

    • 여러가지 material을 사용하여 Q와 가장 반응이 좋은 material을 만들어보자!

    • 내가 가지고 있는 것들과 Q를 섞어보고

    • Material과 Q의 반응 정도를 확인해서

    • 반응하는 정도에 따라서 서로 적절히 섞어준다면?

    • 내가 원하는 반응들이 서로 Blending된 material이 나온다!

    • attention은 관심있는 정보(Q라는 토큰)와 가장 잘 반응하는 토큰을 찾고 그 토큰들만 잘 모아서 새로운 벡터를 만들어내는 기법

    • 앞선 방법의 Q와 material을 Vector로 바꾸어 생각해보면

    • Query vector와 multiple vectors(material vectors)의 반응 정도를 확인해보고

    • 반응하는 정도에 따라서 서로 적절히 섞어준다면?

    • 내가 원하는 반응들로 Blending된 vector를 얻을 수 있다!

    • Query와 가장 잘 반응하는 친구들만 선택적으로 모을 수 있는 알고리즘이 attention mechanism임

    • $x_1,x_2,x_3...$들의 multiple vectors를 Query vector와 반응을 실험해봅니다.

    • 우리는 이 방법을 Attention Mechanism이라고 할 수 있습니다.

  • 다양한 Attention Mechanism

    • 다양한 방식이 존재하는데 트랜스포머라는 구조는 위 방식 중 Dot을 확장시킨 Scaled dot이라는 기법을 활용함

Transformer

https://jalammar.github.io/illustrated-gpt2/

  • 트랜스포머에서는 Query, Key, Value 패턴을 무조건 이해해야 함

    • Query와 Key를 먼저 attention score로 조합해보고(scaled dot 연산) 가장 높은 점수를 가진 Key값의 가중치를 이용해서 Value값을 갱신(가중치를 Value 값에 곱)하여 사용
    • self-attetnion은 A, B, C 토큰 중에 A, B, C를 섞을 때 외부 정보 Q를 쓰는 것이 아니라 A, B, C를 3번에 걸쳐 섞을텐데 첫 번째 쿼리는 A, 두 번째 쿼리는 B, 세 번째 쿼리는 C로 쿼리를 문장안에 즉, self안에 존재하는 3가지에 대해서 각각 수행하는 것
    • attention을 여러 번 사용하여 결과를 종합적으로 보는 것이 multi-head attention
  • Transformer Architecture

    https://ratsgo.github.io/nlpbook/docs/language_model/transformers/

    • Transformer는 Encoder와 Decoder Block들이 쌓여있는 구조
    • Transformer는 RNN을 사용하지 않고 Attention으로 구성
  • Encoder Block(Layer)

    https://ratsgo.github.io/nlpbook/docs/language_model/transformers/

    • Encoder는 아래 세 가지로 이루어져 있습니다.
      • Multi-Head Attention
      • Feed Forward Network
      • Add & Norm
  • Decoder Block(Layer)

    https://ratsgo.github.io/nlpbook/docs/language_model/transformers/

    • Decoder는 아래 네 가지로 이루어져 있습니다.
      • Masked Multi-Head Attention
      • Multi-Head Attention
      • Feed Forward Network
      • Add & Norm
    • Encoder의 현재 hidden state에서 Key와 Value 값을 가져와서 Multi-Head Attention의 입력으로 사용
    • Query는 Masked Multi-Head Attention을 거쳐서 나온 값을 그대로 사용
  • NLP에 적용

    • N21, N2N에는 인코더만 사용해도 됨

출처: 부스트캠프 AI Tech 4기(NAVER Connect Foundation)