[논문] Attention is All You Need

saemi·2024년 9월 10일

AI논문

목록 보기
1/3

Transformer의 시발점

https://arxiv.org/abs/1706.03762

Abstract

기존의 RNN과 CNN의 한계를 극복하기 위해 새로운 구조인 Transformer를 제안한다
Attention 메커니즘을 기반으로하여 입력 시퀀스의 모든 단어를 동시에 처리할 수 있다
장기 의존성의 문제를 해결하고 병렬 처리가 가능해져 학습 속도를 크게 향상시킨다
트랜스포머 모델이 기계 번역 작업에서 최고 성능을 기록했음을 보여준다

Introduction

순환신경망(LSTM, GRU) 시퀀스 모델링과 기계 번역 등에서 효과적으로 작동한다
그러나 훈련 데이터에 대해 병렬화가 배제되고 시퀀스 길이가 길어지면 메모리 용량에 치명적인 타격을 받는다
이는 순환 신경망의 한계점을 보여준다

Attention mechanism

입출력 시퀀스 내의 요소 간의 의존성을 거리와 상관없이 모델링할 수 있다
순환 네트워크와 결합해 사용하기 때문에 순차적 계산의 제약이 생긴다

Transformer

순환 구조를 완전히 배제하고 어텐션 매커니즘에만 의존함으로써 입력과 출력 사이의 광범위한 의존을 이끈다
병렬화를 가능하게 하며 짧은 시간 내에 고품질을 출력하도록 한다(12시간, 8 P100 GPU)

Background

Extended Neural GPU, ByteNet, 그리고 ConvS2S와 같은 모델들은 기본적으로 컨볼루션 신경망(CNN)을 사용하여 입력 및 출력 위치에 대해 숨겨진 표현을 병렬로 계산하고 입&출력 위치 간의 신호 연결위해 필요한 연산의 수가 위치 간 거리에 비례하여 증가

Transformer는 이러한 연산의 수가 상수로 줄어들어 의존성 학습이 용이
Nulti-Head Attention을 통해 평균화된 주의 가중치로 효과적인 해상도가 감소하는 단점을 보완

self-attention // intra-attention이라는 매커니즘은 단일 시퀀스의 서로 다른 위치 간의 관계를 파악하여 시퀀스의 표현을 계산

End-to-end 메모리 네트워크는 순차 정렬 순환 구조 대신 순환 어텐션 매커니즘을 기반으로하고 간단한 언어 질문 응답, 언어 모델링 작업에서 좋은 성능

트랜스포머는 순차 정렬 RNN이나 컨볼루션을 사용하지 않고 입력과 출력의 표현을 전적으로 자기주의에 의존하는 최초의 변환 모델
트랜스포머의 구조 설명, Attention mechnism의 장점을 얘기

Model Architecture

대부분의 신경 시퀀스 변환 모델과 마찬가지로 인코더-디코더 구조
인코더: 입력 시퀀스(x1, ..., xn)를 연속적인 표현 시퀀스z = (z1, ..., zn)로 매핑
디코더: z를 바탕으로 출력 시퀀스(y1, ..., ym)를 생성
모델은 각 단계에서 자가 회귀적이며 이전에 생성된 기호를 추가 입력으로 사용해 다음 기호를 생성함

Encoder

  • 6개의 레이어로 구성
  • 각 레이어는 2개의 서브 레이어를 갖고있음
    • 멀티-헤드 self-attention
    • position-wise fully connected feed-forward network(위치별 완전 연결 피드-포워드 네트워크)
  • 각 서브 레이어 주위에 잔차 연결(residual connection)을 사용하며, 이어서 층 정규화(layer normalization)를 수행
    • 서브 레이어의 결과값 : Sublayer(x) -> LayerNorm(x + Sublayer(x))
    • sublayer(x): 해당 하위 층 자체에 의해 구현된 함수
  • 모든 서브 레이어와 임베딩 레이어는 512차원의 출력 생성

Decoder

  • 6개의 레이어로 구성
  • 각 레이어는 3개의 서브 레이어를 갖고있음
    • 인코더 레이어의 두 서브 레이어
    • 인코더 스택 출력을 대상으로하는 multi-head attention
  • 인코더와 같이 각 서브 레이어는 잔차 연결로 이어진 후 레이어 정규화를 수행
  • 디코더 스택의 self-attention sub-layer는 이후 위치를 참조하지 못하도록 마스킹 됨.
  • 출력값이 각 위치마다 오프셋되어 이전 위치로부터만 예측 가능하도록 함

Attention

쿼리, 출력에 대한 한 쌍의 키-값이 모두 벡터로서 매핑되는 것으로 설명될 수 있다
출력은 values의 가중치 합으로 계산됨
vlaues -> 가중치가 할당된 각 values가 키에 대한 쿼리 함수로 계산됨

Scaled Dot-Product Attention

  • 입력: 쿼리 Query(Q), 키 Key(K), 값 Value(V)

  • Q: 쿼리 집합, K: 키 집합, V: 값 집합 => 행렬로 묶어 동시에 처리

  • 모든 키값에 대한 쿼리의 내적(dot product)을 계산하고, dx\sqrt{d_x} 로 나누어 스케일링 후 소프트맥스(softmax) 함수를 적용해 값(values)에 대한 가중치 얻음

  • 디코더 스택의 self-attention 서브 레이어는 이후 위치를 참조하지 못하도록 마스킹되고 출력 임베딩이 한 위치씩 오프셋되어 예측이 이전 위치의 출력에만 의존할 수 있도록 보장

  • 어텐션 함수로 주로 쓰이는 함수: additive attention, dot-product(multiplicative) attention

    • dot-product함수가 더욱 이상적이라고 판단(1dx1\over\sqrt{d_x} 스케일링 요소를 제외하면)
    • additive attention은 feed-forward 네트워크와 하나의 은닉층으로 호환성 함수 계산
    • 이론적으로 두 함수의 복잡도는 비슷하지만 dot-product attention이 더 빠르고 공간 효율적
    • dot-product attention 은 고도로 최적화된 행렬 곱셈 코드를 사용하기 때문
  • dx{d_x} 값이 클수록 내적값도 커져서 소프트맥수 함수가 매우 작은 기울기를 갖는 영역으로 밀려남

    • 이를 해결하기 위해 내적을 dx\sqrt{d_x} 로 스케일링하여 안정적 학습 보장

Multi-Head Attention

쿼리, 키, 값에 대해서 여러번 선형 투영한 후 병렬로 어텐션 함수를 수행하고 Context 벡터를 계산

  • 'encoder-decoder attention' layers: 이전 디코더 레이어에서 온 쿼리들과 출력 인코더로부터 기억된 키, 값들. 이를 통해 디코더의 모든 위치가 입력 시퀀스의 모든 위치에 걸쳐 적용됨. 이는 [38, 2, 9]와 같은 시퀀스 간 모델에서 일반적인 encoder-decoder attention 메커니즘을 모방.

  • The encoder contains self-attention layers: 이전 인코더 레이어의 출력값이 키, 값으로 옴. 각 인코더의 위치가 이전 레이어의 모든 인코더와 매치됨

  • self-attention layers in the decoder: 디코더의 각 위치가 해당 위치까지 디코더의 모든 위치에 매치됨. 자동 회귀 속성을 보존하기 위해 디코더의 왼쪽 방향 정보 흐름을 방지. 불법 연결에 해당하는 소프트맥스 입력의 모든 값을 마스킹(-∞로 설정)하여 scaled dot-product 내부를 구현.

Feed-Forward 레이어

  • 인코더: Context 벡터를 변환하여 내부 표현을 계산
  • 디코더: Context 벡터를 변환하여 다음 디코더 출력을 계산

fully connected Feed-Forward Network

각 위치에 대해 독립적으로 그리고 동일하게 적용됨
Attention만으로는 충분하지 않기 때문에 인코더와 디코더에는 FFN(Feed-Forward Network)가 추가됨
각 입력 벡터에 대해 독립적으로 작동하고, Attention이 끝난 후 각 단어의 표현을 좀 더 복잡하게 변환함
각 단어의 위치별로 동일하게 적용되며, 각 단어의 벡터 표현을 추가로 가공하는 역할
=> 각 단어: 독립적 처리로 문장 내 다른 단어들과는 상관없이 변환 이루어짐

Embeddings and Softmax

Embeddings: 입력 텍스트와 출력을 벡터로 변환하는 과정
-> 학습된 Embedding을 사용해 입출력 토큰을 d_model 차원의 벡터로 변환
디코더 출력에 선형 변환, Softmax 함수 적용해 다음 토큰에 대한 확률 예측
Embedding 벡터: 모델 학습동안 점진적으로 업데이트됨
=> 의미적으로 가까운 단어들이 비슷한 벡터 공간에서 배치되도록 학습

입력 Embedding: 입력 문장을 벡터로 변환
출력 Embedding: 디코더가 예측한 다음 단어를 다시 벡터로 변환해 다음 단어를 예측
-> 디코더 출력 + 선형 변환 + Softmax 함수 => 다음 나올 단어 확률 예측
입출력 디코더: 동일 임베딩 방식, 동일 가중치 행렬 공유

입력 Embedding & Pre-Softmax 선형 변환 => 동일 가중치 행렬 공유
=> 모델의 파라미터 수를 줄이고 메모리 효율성을 높임
=> 안정적인 학습 유도

Positional Encoding

해당 Transformer 모델에는 재귀적(RNN) 또는 합성곱 신경망(CNN)이 없기에 시퀀스 순서를 고려할 수 있도록 Positioning Encoding을 입력Embedding에 추가
Transformer 모델은 순서 의존성이 없음 => 시퀀스 내 단어들의 순서 이해를 위해 Positioning Encoding이 필요. 단어 간 순서 학습을 도와줌

학습되지 않은 새로운 시퀀스 길이에 대해서도 잘 작동함

Why Self-Attention

입력 시퀀스의 각 토큰이 다른 토큰과 얼마나 관련이 있는지 계산하는 방법
1. 각 토큰에 대한 가중치 벡터 계산
2. 가중치 벡터를 사용하여 각 토큰의 출력을 계산

셀프 어텐션은 입력 시퀀스의 순서 보존하지 않음
입력 시퀀스의 모든 정보를 고려하여 출력 생성

Transformer model

입력 시퀀스의 순서를 보존하지 않기 때문에 입력 시퀀스 순서가 중요하지 않은 작업에 적합

셀프 어텐션을 사용해 입력 시퀀스의 모든 정보를 고려 가능 -> 장거리 의존성 학습

다양한 작업에 대해 효과적인 성능

Transformer - 응용분야

기계 번역, 자연어 요약, 질문 응답 등 다양한 자연어 처리 작업에 사용
이미지 분류, 이미지 캡셔닝, 물체 인식 등 다양한 컴퓨터 비전 작업에 사용
음성 인식 작업에 사용
=> 다양한 분야에서 효과적인 성능

profile
모방은 창작의 어머니, 나는 그 딸

0개의 댓글