Transformer

지윤·2024년 7월 1일

인공지능개론

목록 보기
2/5

https://github.com/huggingface/transformers

Transformer란?

Untitled

  • RNN → LSTM → LSTM + attention → Only attention (Transformer)

    • 트랜스포머는 LSTM보다 long-term dependencies를 더 잘 저장
    • Transformer 아키텍처에는 RNN, LSTM같은 전통적인 순환형 모델이 사용되지 않음
    • Attention 메커니즘을 기반으로 한 완전히 새로운 구조를 도입
  • 어텐션 모듈을 통해 병렬적인 학습이 가능하도록 설계된 구조
    → 효율적인 학습 가능 (기존 모델은 한 단어에 대한 계산이 앞 단어에 대한 계산이 끝나야 가능해서 병목 현상Bottleneck이 일어날 수 있었음)

  • 언어 뿐 아니라 다양한 모달리티의 데이터도 처리 가능 (ex. Vision Transformer)

  • 내부에 인코더 파트와 디코더 파트 존재, 이 둘 사이를 이어주는 연결고리 존재

  • (오리지널 버전) 인코더 6개 + 디코더 6개

  • (오리지널 버전) 레이어 간에는 같은 파라미터 공유 X

Encoder

두개의 하위 레이어로 구성된 동일한 구조를 가짐
(동일한 파라미터 값을 갖지는 X)

2. Feed Forward Neural Network각 position마다 동일한 구조의 FFNN이 독립적으로 적용
1. Self-Attention layer특정 단어를 인코딩할 때 주변 단어들을 고려하는 역할 수행

↑ As we are encoding the word "it" in encoder #5 (the top encoder in the stack), part of the attention mechanism was focusing on "The Animal", and baked a part of its representation into the encoding of "it".

Decoder

세 개의 하위 레이어를 가짐

3. Feed Forward인코더와 동일한 방식의 FFNN
2. Encoder-Decoder Attention인코더와 디코더 간 어텐션(디코더의 특정 토큰이 input의 어느 부분과 관련 있는지 파악) 수행
1. Self-Attention마스킹이 적용된 셀프 어텐션 수행

Unmasked vs. Masked

  • 인코더는 특정 토큰 이후 출현하는 토큰들의 정보를 모두 사용
    • 실제 데이터에는 입력을 모두 알고 있기 때문에 특정 토큰의 이후 정보를 사용하는 것이 전혀 문제 없음
  • 디코더는 현재 보고 있는 토큰 이후에 출현하는 토큰들의 정보를 사용하지 않음 (Masking)
    • 특정 시점 이후 정보를 모르기 때문

Untitled


Structure

↑ Transformer 모델의 한 레이어의 단순화된 전체 구조. 이 레이어가 N번 쌓임

↑ Transformer의 한 레이어에는 3개의 multi-head attention 존재

특징
1. 셀프 에텐션
2. 병렬처리
3. 멀티 헤드 어텐션


트랜스포머(Transformer) 파헤치기—1. Positional Encoding
https://www.blossominkyung.com/deeplearning/transfomer-positional-encoding

입력 임베딩 Input Embedding

입력 텍스트를 임베딩으로 변환

  • Input 인덱스 값들을 받아서 이를 컴퓨터가 이해할 수 있도록 각각의 단어 임베딩 벡터값(→행렬)으로 바꿔줌
  • 각각의 벡터 차원은 해당 단어의 피처 값을 가지고, 서로 다른 단어의 피처 값이 유사할수록 벡터공간의 임베딩 벡터는 가까워짐
  • 개별 단어에 대한 임베딩 벡터를 최초 입력으로 사용 Untitled
    • 이 단어 임베딩은 최하단 인코더에서만 입력으로 1회 사용
      • 나머지 인코더들은 하위 인코더의 출력 결과물을 입력으로 사용
    • 최초 논문에서는 512차원의 임베딩 사용
    • 입력으로 사용되는 리스트는 사용자가 지정하는 하이퍼파라미터
      • 컴퓨팅 자원이 충분하면 큰 값 지정 가능

포지셔날 인코딩(Positional Encoding)

단어의 위치 정보를 제공

  • Transformer는 단어를 순차적으로 받지 않고 입력된 문장을 병렬로 한번에 처리하는 구조
    • RNN과 LSTM은 순차적으로 문장을 처리 … 한번에 1개씩 처리되기 때문에 연산 속도가 매우 느림
  • 연산은 빠르지만 단어의 위치(순서)를 알 수 없음
  • 따라서 입력 시퀀스에서 단어들 간의 위치 관계 표현 필요
  • 이러한 역할을 수행하도록 설계된 벡터를 포지셔날 인코딩(Positional Encoding)이라고 하며, 모든 단어 임베딩에 포지셔날 인코딩을 더해서(Summation. Concatenate가 아님) 입력 벡터 산출

Untitled

Untitled

  • 좋은 포지셔날 인코딩이 가져야 하는 속성
    • 모든 위치에서 인코딩 벡터의 크기는 동일해야 함 → 워드 임베딩에 내재된 정보를 훼손하지 않도록
    • 두 단어 사이의 거리가 멀수록 해당 단어들의 포지셔날 인코딩 간 거리가 멀음
    • 모든 위치값은 시퀀스의 길이나 input에 상관없이 동일한 식별자를 가짐 → 시퀀스가 변경되더라도 위치 임베딩은 동일하게 유지
    • 모든 위치값은 너무 크지 X (너무 크면 단어 간 상관관계와 의미를 유추할 수 있는 의미정보 값이 상대적으로 작아져 attnetion layer에서 제대로 학습 및 훈련이 되지 않음)
    • example (n=10, dim=10) 두 포지셔날 인코딩 벡터 간 거리 Untitled

어텐션 레이어 (Attention Layer)

  • 멀티 헤드 어텐션(Multi-head attention)
  • Residual connection & Normalization
  • 포지셔날 인코딩이 더해진 단어 임베딩은 첫번째 인코더 블록에서 셀프 어텐션과 FFNN을 거치게 됨
    • 특정 위치의 단어는 해당 위치를 유지하며 연산 수행
      • 셀프 어텐션 과정에서는 이 경로 간 의존성이 존재
      • FFMM 과정에서는 의존성 존재X (병렬화 가능)

인코딩 과정

  • 인코더는 일련의 벡터들을 입력받음
  • 입력된 벡터들은 셀프 어텐션과 FFNN을 거쳐 상위 인코더의 입력으로 투입
    Untitled

Self-Attention

  • 다음 문장을 번역한다고 해 보자:
    The animal didn’t cross the street because it was too tired
    • 여기서 “it”은 어떤 단어를 의미하는가? (street or animal?)
      → 사람에게는 매우 쉬운 질문이지만 기게는 이해하기 어려움
  • 셀프 어텐션은 입력 시퀀스의 다른 위치에 있는 단어들을 둘러보면서 특정 위치의 단어를 잘 설명/표현할 수 있게 함
  1. 입력 벡터에 대한 세가지 벡터 생성

    • Query : 다른 단어들을 고려하여 표현하고자 하는 대상이 되는 현재 단어에 대한 임베딩 벡터
    • Key : Query가 들어왔을 때 다른 단어들과 매칭을 하기 위해 사용되는 레이블로 사용되는 임베딩 벡터
    • Value : Key와 연결된 실제 단어를 나타내는 임베딩 벡터

    Query, Key, Value에 대응하는 행렬을 곱해서 생성

    Untitled

    • Q, K, V에 해당하는 벡터들은 원래 단어의 임베딩 벡터보다 적은 차원수를 갖도록 설계
      • 원 논문에서 Q,K,V는 64차원, 단어 벡터는 512차원
      • 필수는 아니나 멀티헤드 어센션 수행 이후 연산의 효율성을 위함
  2. 현재 표현하고자 하는 단어(Q)에 대해 어떤 단어들을 고려해야 하는지(K)를 알려주는 스코어 산출

    • Q와 K를 곱한 후 softmax를 취해 스코어 계산

    Untitled

  3. 2에서 계산한 스코어를 dk\sqrt{d_k}(=8 in the original paper since dkd_k=64)로 나눔

    • softmax의 결과인 확률 분포의 skewness에 영향을 줌
  4. 3의 결과물에 softmax를 적용하여 해당 단어에 대한 집중도 산출

  5. 4에서 얻은 확률값과 해당 단어의 Key값을 곱함

    • 집중하고자 하는 토큰의 값을 크게 유지
    • 필요한 토큰의 값을 매우 작게 만듬
  6. 5에서 산출된 모든 값들을 더해 출력으로 반환

Untitled

※ 위의 모든 과정이 행렬 연산으로 수행됨
: Matrix calculation or self-attention

Self-Attention example

  • Create Query, Key, Value vectors
    1) 각 input token에 대해 weight Matrix WQW^Q, WKW^K, WVW^V를 곱하여 query vector, key vector, value vector을 생성한다.
  • Score
    2) 현재 query vector를 모든 key vectors로 dot product
    ****→ get a score of how well they match
  • Sum
    3) value vectors에 score를 곱하고 sum up
  • 동일 작업을 모든 입력 토큰에 대해 각각 수행

Multi-head attention 멀티헤드 어텐션

  • 한 Query 토큰에 대하여 다양한 관점으로 표현할 수 있는 능력 제공

  • 어텐션 결과물들은 concatenation 후 가중치 행렬과의 연산을 통해 원래 입력 차원과 동일한 차원에 출력 벡터를 생성

Residual

  • 각 어텐션 블록에서 Residual Connection, Layer Normalization 수행

  • 디코더 과정에서도 이 절차 적용


Position-wise Feed-Forward Networks

  • Fully connected feed-forward network
  • 각 포지션에 대해서 독립적으로 수행
FFN(x)=max(0,xW1+b1)W2+b2FFN(x) = max(0, xW_1+b_1)W_2+b_2
  • 같은 인코더 블록에서는 동일한 가중치 사용
  • 다른 인코더 블록끼리는 서로 다른 가중치 학습

Untitled


Masked Multi-Head Attention

  • teacher forcing을 사용하므로 문장을 한번에 입력받지만 미래 정보는 참고하면 안됨

  • 디코딩 단계에서 셀프 어텐션은 Query 토큰보다 뒤에 위치한 토큰들에 대한 정보는 하지 않다고 가정하고 해당 부분을 전부 마스킹(Masking) 처리

    • 매우 작은 음수값을 넣어줌 → softmax를 거치며 0이 됨
  • 순차적으로 수행할 필요 없이 한번에 수행 가능

    Untitled


Multi-head Attention with Encoder Outputs

  • self-attention이 아님
    • Q: decoder로부터 가져옴
    • K, V: encoder로부터 가져옴

Decoder side

Untitled

Untitled


The Final Linear and Softmax LayerD

  • Linear layer : 단순 FFNN 형태로서 마지막 디코더의 출력 결과물을 이용하여 모든 단어들의 출력 확률을 산출하기 위해 차원을 늘리는 역할
  • Softmax layer : 개별 단어들의 출력 확률 반횐

Complexity

Untitled

Performance

  • in terms of BLEU score

  • BLEU (Bilingual Evaluation Understudy) score

    • 성과지표

    • 데이터의 X가 순서정보를 가진 단어들(문장)로 이루어져 있고, y또한 단어들의 시리즈(문장)로 이루어진 경우에 사용

    • 번역을 하는 모델에 주로 사용

    • 3요소
      - n-gram을 통한 순서쌍들이 얼마나 겹치는지 측정 (precision)
      - 문장길이에 대한 과적합 보정 (Brevity Penalty)
      - 같은 단어가 연속적으로 나올때 과적합 되는 것을 보정 (Clipping)

      Untitled

      ex. n-gram(1~4)을 통한 순서쌍들이 얼마나 겹치는지 측정 (precision)

      Untitled

      Untitled

  • Transformer variations


Review

Transformer에서 어떤 모델들이 RNN 및 LSTM 대신에 사용되었으며, 이 모델의 장점은 무엇인가?

transformer에서는 기존의 RNN 및 LSTM과 같은 순환형 모델을 사용하지 않고 attention을 중심으로 새로운 구조를 제시하였다. tranformer의 encoder 파트에서는 multi-head self-attention과 feed-forward neural network가 사용되고 decoder 파트에서는 masked multi-head self attention, encoder-decoder mult-head attention, feed-forward nerual network가 사용된다. 이 모델의 장점은 input을 한번에 받아 병렬적으로 처리함으로써 연산 시간이 단축되고 RNN, LSTM보다 long-term dependencies를 더 잘 저장한다는 점이다. 또한 언어뿐 아니라 다양한 모달리티의 데이터 처리가 가능하다.

포지셔날 인코딩(Positional Encoding)이 Transformer에서 왜 필요한지 간단하게 설명하시오.

transformer는 순차적으로 입력을 처리하는 RNN과 다르게 전체 시퀀스를 한 번에 입력받기 때문에 위치 정보를 저장해 줄 필요가 있다. 따라서 모든 단어 임베딩에 positional encoding vector를 더하여(sum) 입력 벡터를 산출함으로써 단어와 단어 간의 선행 관계를 표시해준다.

Transformer의 Self-Attention 레이어에서 Query, Key, Value 벡터의 역할은 무엇이고, 이들을 어떻게 생성하는지 설명하시오.

Query는 현재 처리하고자 하는 단어 임베딩이고, Key는 Query와 다른 단어들과의 매칭을 위한 레이블이며, Value는 Key와 연결된 실제 단어 임베딩이다. 이들은 가중치를 곱하여 생성할 수 있다.

Multi-head Attention은 어떻게 작동하며, 왜 한 Query 토큰에 대해 다양한 관점으로 표현할 수 있는 능력이 필요한지 설명하시오.

Multi-head attention은 여러 개의 어텐션 헤드를 동시에 사용하여 다양한 관점에서 정보를 수집하고 학습한다. 각 헤드는 서로 다른 가중치 행렬을 사용하여 어텐션을 계산하며, 각각의 헤드의 결과를 결합하여 최종 출력을 산출한다. 이는 다양한 언어 처리 작업에서 효과적이며 특히 문맥을 고려하여 어텐션을 수행해야 하는 자연어 번역과 같은 작업에서 유용하다.

Position-wise Feed-Forward Networks가 Transformer에서 어떤 역할을 하는지 설명하시오.

position-wise feed-forward network는 transformer 각 위치의 특성을 강화하고 다양한 위치에 대한 특징을 캡처함으로써 아키텍처의 효율적인 특성 학습과 모델의 표현력을 향상시키는 데 기여하며, 특히 텍스트와 같은 순차적인 데이터를 처리하는 데 유용하다.

Masked Multi-Head Attention이 디코딩 과정에서 왜 필요한지 간단히 설명하시오.

decoding에서는 encoding과 달리 현재 처리하는 단어 기준에서 미래의 단어를 참고하면 안 되지만 teacher forcing을 사용하면 문장 전체를 한번에 입력받아 버린다. 따라서 Query 토큰 이후 미래 시점을 전부 마스킹하고 어텐션을 수행하여야 한다.

0개의 댓글