일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Machine Learning
- 분류
- ChatGPT
- AI
- LG Aimers
- Classification
- 오블완
- LLM
- GPT-4
- LG Aimers 4th
- 티스토리챌린지
- PCA
- 회귀
- 머신러닝
- supervised learning
- 지도학습
- deep learning
- regression
- 해커톤
- LG
- gpt
- OpenAI
- 딥러닝
Archives
- Today
- Total
SYDev
[논문 리뷰] Attention Is All You Need 본문
https://arxiv.org/abs/1706.03762
Background
Sequence Data
- sequence data는 순서가 있는 데이터를 의미한다.
- sequence 원소들은 특정 순서를 가지므로 독립적이지 않다.
RNN
- RNN(Recurrent Neural Network) 입력과 출력을 시퀀스 단위로 처리하는 시퀀스(sequence) 모델이다.
LSTM
- Long Short-Term Memory은 시계열 데이터 예측, 자연어 처리, 음성 인식, 이미지 분류 등에서 중요한 역할을 하는 모델 중 하나이다.
- RNN에서 input data의 길이가 길어지면 gradient vanishing ploblem으로 이전의 정보를 제대로 기억하지 못하는 문제를 해결하기 위해 고안된 모델
- 이전 정보를 오랫동안 기억하는 메모리 셀을 통해 긴 시퀀스 데이터를 처리한다.
- RNN의 구조 + 셀의 값을 얼마나 기억할지 결정하는 것이 가능한 게이트로 필요한 정보만 기억하도록 제어
seq2seq
- seq2seq는 입력된 시퀀스로부터 다른 도메인의 시퀀스를 출력하는 모델로, 주로 번역기에서 사용된다.
- seq2seq 모델의 내부는 인코더와 디코더로 구성되며, 인코더는 문장의 모든 단어들을 순차적으로 입력받은 뒤에 모든 단어 정보를 압축해 하나의 벡터로 만드는데 이를 컨텍스트 벡터(context vector)라 부른다.
- 문장을 단어 토큰화로 단어 단위로 쪼개 RNN 셀의 각 시점에 입력
- 모든 단어를 입력받은 인코더 RNN 셀의 마지막 시점 hidden state는 context vector, 이는 디코더 첫 번째 RNN 셀의 hidden state로 사용된다.
- seq2seq는 훈련 과정과 테스트 과정의 작동 방식이 조금 다른데, 훈련 과정에선 컨텍스트 벡터와 실제 정답인 상황을 입력 받으면서 원하는 정답이 나오도록 알려주면서 훈련한다. 이를 교사 강요(teacher forcing)라고 한다.
- 테스트 과정: 디코더에는 문장의 시작을 의미하는 심볼 <sos>가 들어가는데, 이것이 입력되면 다음에 등장할 확률이 높은 단어를 예측한다. 이렇게 다음에 올 단어를 예측하는 과정을 RNN 셀에서 순환시키고, 문장의 끝을 의미하는 심볼인 <eos>가 다음 단어로 예측될 때까지 반복한다.
- seq2seq에서 사용되는 모든 단어들은 워드 임베딩을 통해 임베팅 벡터로 표현된 벡터이다.
Attention Mechanism
- seq2seq 모델은 하나의 고정된 크기의 벡터에 모든 정보를 압축하는 과정에서 정보 손실이 발생하며, RNN의 고질적으로 gradient vanishing 문제가 존재한다. 때문에 입력 문장이 길어질수록 번역 품질이 떨어지는 현상이 발생한다.
- 이런 문제를 해결하기 위해 등장한 개념이 attention이다.
- attention의 기본 아이디어는 디코더에서 출력 단어를 예측하는 매 시점마다 인코더에서의 전체 입력 문장을 다시 한 번 참고하는 것이다. 이때, 문장을 모두 동일한 비율로 참고하는 것이 아니라, 해당 step에서 예측해야할 단어와 연관이 있는 입력 단어 부분을 더 집중(attention)해서 본다.
Introduction
- RNN, LSTM 그리고 GRU와 같은 RNN 계열 모델은 sequence modeling과 transduction 문제(기계 번역이나 언어 모델 같은)에 state of the art approaches였다. 그러나, time step을 밟는 순차적 특성은 본질적으로 parallelization을 불가능하게 하고, 이는 input suquence의 길이가 길어질수록 메모리적인 부분에서 치명적이다.
- 최근 연구에서 factorization tricks과 conditional computation으로 성능을 어느정도 향상시켰지만, 그럼에도 순차적 계산에서 오는 근본적인 문제는 남아있다.
- 어텐션 메커니즘은 인풋과 아웃풋의 거리과 관계 없이, sequence modeling과 transduction model의 다양한 tasks에서 종속성을 모델링할 수 있도록하지만, 대부분의 경우 recurrent network와 함께 사용된다.
- 본 연구에서는 recurrence를 배제하고 오직 attention mechanism만으로 input과 output의 전역 종속성을 모델링할 수 있는 Transformer를 제안한다.
Model Architecture
Encoder
- N = 6 layers의 stack으로 구성된다.
- 각 레이어는 multi-head self-attention mechanism, position-wise fully connected feed-forward network 2개의 sub-layers를 가진다.
- 각 2개의 sub-layers 이후에 residual 연산 적용 -> $output = LayerNorm(x + Sublayer(x))$
- 위 residual이 가능하게 하기 위해서는 sub-layers와 embedding layers가 출력 차원 512인 outputs을 만들어야 한다.
Decoder
- 인코더에서의 sub-layers 이외에도 인코더 스택의 output에 multi-head attetion을 시행하는 3번째 sub-layer가 존재한다.
- position $i$가 $i$보다 이전 위치에서의 outputs에만 연관되도록 self-attetion sub-layer를 수정한다. 다음 위치에 대한 attetion을 방지!
- a를 예측할 때는 b와 c의 attention을 고려하지 않음
- b를 예측할 때는 a의 attention만 고려
Attention
Scaled Dot-Product Attetion
- Input으로는 Query(Q), Key(K), Value(V)가 있다.
- Q와 K는 $d_k$차원, V는 $d_v$차원
- scaled dot-product attetion을 수식으로 표현하면 다음과 같다.
- 가장 흔히 쓰이는 attention function으로 additive attention, dot-product attention이 있는데 이중 후자가 실전에서 더 빠르고 공간효율적이기 때문에 이를 채택
- $route(d_k)$로 나누어 scaling을 진행해주었는데, 이를 하지 않으면 additive attetion보다 효율이 대폭 떨어진다.
Multi-Head Attention
- 하나의 attention function을 사용하는 것보다, queries와 keys, values를 linear projection을 통해 중간에 매핑해줘서 각 다른 값들을 입력으로 하는, 여러 개의 attention function들을 만드는 것이 더 효율적
- h = 8인 병렬 attention layers이면, key와 value의 차원을 64로 설정한다.
Applications of Attention in out Model
- transformer는 3가지 다른 방식으로 multi-head attention을 사용한다.
- encoder-decoder attention: 이전 decoder layer에서 온 queries와 encoder의 output에서온 keys and values를 input으로하는 attention. decoder의 sequence vector들과 encoder의 sequence vector 사이의 연관성을 학
- encoder 내부의 self-attention: Q, K, V 모두 이전 layer의 output에서부터 온다. input sequence의 한 단어가 모든 단어 중에서 어느 것과 관련이 얼마나 있는지 학습한다.
- decoder 내부의 self-attention: 대략적인 과정은 encoder에서의 self-attention과 유사하지만, auto-regressive 특성을 보존하기 위해서 masking vector를 사용하여 해당 위치의 이전 위치 vector들만을 참조
Position-wise Feed-Foward Networks
- 각 위치에 동일하게 적용되는 연산
- input과 output 차원은 512, inner-layer의 차원은 2048
Embeddings and Softmax
- 다른 시퀀스 번역 모델들과 마찬가지로, input and output tokens를 embedding layer를 거쳐서 사용한다.
- 두 개의 embedding layers와 pre-softmax linear transformation은 같은 weight matrix를 공유한다.
Positional Encoding
- transformer 모델에는 recurrence나 convolution이 없으므로, 순서를 활용하려면 sequence 내부 tokens의 상대적 혹은 절대적 위치 정보를 주입해야 한다.
- 이런 역할을 하는 positional encoding을 디코더와 인코더 스택 하단에 추가한다.
- positional encoding을 하는 방법을 다양한데, 해당 논문에서는 sin, cos함수를 사용한다.
-> sin,cos로 어떻게 위치 정보를 표현할 수 있는지는 다음에 시간 남을 때 자세히 제대로 알아보려 한다.
Why Self-Attention
- 논문에서는 self-attention을 사용하는 이유를 3가지 측면에서 설명한다.
- 각 레이어 당 총 계산 복잡성(computational complexity per layer), 병렬화 가능한 계산의 총량(amount of computation that can be paralleized), 네트워크 내에서 장거리 의존성 간의 경로 길이(the path length between long-range dependencies in the network)
- computational complexity per layer의 측면에서 n은 대부분 d보다 작을 때가 많기 때문에, Self-attention의 속도가 RNN보다 빠르다. sequence length가 너무 길 때는 이웃의 크기를 제한하는 restricted self-attention을 이용하는 방법도 있다.
>> 시간관계상 training, results, conclusion은 추후 정리 . . .
참고자료