sequence-to-sequence 모델은 한 시퀀스를 다른 시퀀스로 변환하는 작업을 수행하는 딥러닝 모델로,
주로 자연어 처리(NLP) 분야에서 활용되며 Sequence Transduction의 대표 기법이였음
인코더(Encoder)와 디코더(Decoder)라는 모듈을 갖고있기에 Encoder-Decoder 모델이라고도 부름.
인코더
- 일반적으로 RNN, LSTM 등의 순환 신경망 구조를 사용하여 입력 시퀀스를 고정 길이의 벡터로 변환하는 역할을 수행함
디코더
- 인코더의 출력인 고정 길이의 벡터를 기반으로 원하는 출력 시퀀스를 생성하는 역할을 수행함
ex) RNN(LSTM)을 기반으로한 seq2seq의 예시
[RNN 기반 seq2seq 모델의 단점]
- LSTM이 RNN의 장기 의존성 문제(long-term dependency)를 개선시켰지만,
그럼에도 초반 입력 정보가 사라지는 문제(vanishing gradient problem)가 완전히 해결되지 않음- 입력 시퀀스를 순차적으로 처리해야 하므로 병렬 연산이 불가능함!
위의 예시들과 다르게, "Attnetion is All you Need" 논문에서 제시한 Transformer는
인코더와 디코더의 구조에 RNN을 사용하지 않고, (Self-Attention과 FFN)으로만 이룸으로써
모든 토큰을 동시에 처리하므로 병렬 연산이 가능하고,
문장 전체에서 중요한 정보를 선택하므로 효과적으로 장기 의존성을 처리함!
* SOTA: 현재까지 가장 뛰어난 성능을 보인 기술 혹은 모델
Transformer는 기존 seq2seq 모델의 Encoder-Decoder 구조를 따르지만, 내부 구조를 다르게 구성함
>> RNN 구조 없이 Self-Attention + Fully Connected Layers 로만 구성됨
위 사진과 같은 구조를 갖는데, 인코더와 디코더 모두 총 6개의 동일한 Layer를 갖고, 그 중 하나를 보이면 Figure 1과 같은 구조를 보임
>> 동일한 레이어를 반복함으로써 모델의 표현력과 학습 능력을 향상시킬 수 있음
인코더
*Residual Connection: 입력값과 출력값을 더해 학습을 돕는 기법
디코더
>> Query와 Key-Value 쌍을 입력으로 받아 출력을 생성하는 함수라고 정의할 수 있음 (모두 벡터값)
>> 즉 , 입력(Query)과 관련성이 높은 Key-Value를 찾아내어, 그 정보를 가중치를 반영한 합으로 출력
Query와 Key의 내적을 구하여 유사도를 구하고 (MatMul)
Gradient Vanishing을 방지하기 위해 스케일링(로 나눠주기) 적용 (Scale)
softmax 적용하여 유사도를 확률 분포 형태로 변환 (SoftMax)
softmax에서 구한 가중치를 각 Value에 곱해 최종 출력 계산 (MatMul)
Additive Attention과 Dot-Product Attention 두 종류가 있는데 Transformer에선 Dot-Product Attention을 사용!
>> Additive는 *FFN을 사용하여 유사도를 계산하기에, Dot-Product가 훨씬 빠름
*FFN: Feed-Forward Neural Network
여러 개(8개)의 Attention을 병렬로 수행하여 정보를 더 풍부하게 학습할 수 있도록 함
head는 독립적으로 수행되는 Attention 연산의 단위를 말한다!
각 head 에서는 서로 다른 학습된 가중치 를 통해 Query, Key, Value를 반환함
h개의 head 출력을 결합(Concatenation)한 후, 최종적으로 하나의 가중치 를 적용하여 출력을 생성
는 어디서 오는가?
입력인 단어(토큰) 시퀀스는 임베딩 레이어를 거치면 임베딩 벡터로 변환되고,
Positional Encoding이 더해지면 입력 벡터 로 전환됨.이 입력 벡터에 각각의 가중치 행렬 를 곱하면 그제서야 가 됨!
(이 작업은 Multi-Head Attention 하단의 Linear 블록에서 이루어짐)는 Transformer 모델이 처음 시작될 때 무작위로 초기화 되고, 훈련 과정을 거치면서 자동으로 업데이트 됨
각각의 역할
- = Query: 현재 단어가 "어떤 단어를 참고해야 하는지" 결정하는 역할
- = Key: 각 단어가 자기 자신을 설명하는 정보
- = Value: 최종적으로 참고할 정보
즉, Query와 Key를 비교해서 "어떤 단어를 참고해야 하는지"를 결정하고
실제 정보는 Value에서 가져오는 것!
1. 인코더-디코더 Attention
2. 인코더의 Self-Attention
3. 디코더의 Self-Attention
Self-Attention을 거친 후, 각 단어의 표현을 정제하고 비선형성을 추가하는 역할
선형 변환, ReLU 활성화, 선형 변환으로 이루어짐
첫번째 선형 변환에서 더 큰차원으로 변환하고,
ReLU를 통해 비선형성을 추가해 학습 능력을 강화,
두번째 선형 변환에서 다시 원래 차원으로 축소시킴
*전체 스키마*
임베딩레이어에서 입력 토큰 시퀀스를 벡터로 임베딩할때 사용하는 가중치 행렬과,
최종 출력을 위한 softmax 이전의 선형 변환에서 쓰이는 가중치 행렬은 같음.
>> 즉, 가중치를 공유함(Weight Sharing)으로써 성능을 올릴 수 있었음
순서 정보를 처리하는 방법인 Positional Encoding이 왜 필요한가?
기존의 RNN 기반 모델은 입력 토큰들의 순서를 자연스럽게 반영할 수 있었으나,
Self-Attention을 사용해 문장을 한 번에 병렬처리하는 Transformer는 단어의 순서 정보가 없음
>> 문맥을 제대로 이해하기 위해 Positional Encoding을 통해 순서를 인식하도록 함!
자세한 내용은 트랜스포머 파헤치기 - Positional Encoding 참고!
왜 Self-Attention을 사용하는가?
>> 연산 복잡도, 병렬화, 장거리 의존성 학습 능력 때문
게다가, Attention의 head들이 각각
어떤 head는 문법적 관계, 어떤 head는 의미적 관계를 학습하는 것이 관찰됨
>> 모델의 해석 가능성을 높임 (Explainable AI)
WMT 2014 데이터셋 (영어-독일어, 영어-프랑스어) 사용
각각의 훈련 배치는 약 25,000개의 소스 토큰과 25,000개의 타겟 토큰을 포함함
1대의 머신에서 8개의 NVIDIA P100 GPU를 사용해 훈련
Basic Model은 약 12시간 훈련시키고, Big Model 은 약 84시간 훈련시킴
옵티마이저로 학습률 스케줄링(Learning Rate Schedule)을 적용시킨 Adam을 사용함.
모델의 차원(=512)을 기반으로 학습률의 기반 크기를 조정
초반(=4000)에는 학습률을 선형 증가시키고 ()
이후에는 학습률을 역제곱근으로 감소 ()
과적합 방지/일반화 성능 향상을 위한 정규화로 Dropout과 Label Smoothing 사용
(*BLEU: 기계 번역 결과와 사람이 직접 번역한 결과가 얼마나 유사한지 비교한 점수)
English-Deutsch 성적을 보면, 이전 SOTA 모델보다 *BLEU 점수가 2.0 이상 높음
English-French 성적을 보면, 이전 SOTA 모델과 BLEU가 비슷하거나 높지만,
훈련 비용이 기존 SOTA 모델 대비 1/4 수준으로 낮음
훈련 비용 = 훈련에 사용된 연산량 = FLOPs(Floating Point Operations)
FLOPs = 훈련시간 x GPU 개수 x GPU의 단정밀도 연산량
모델의 안정성(일반화성능)을 위해 체크포인트 평균(Checkpoint Averaging) 기법을 사용함.
Base 모델은 마지막 5개 체크포인트를, Big 모델은 20개 체크포인트를 평균함
(A) Attention의 head 개수 변화
(B) Attention의 (Key 차원) 감소
(C) 모델 크기 증가 --> 클수록 성능 좋음
(D) Dropout 적용 여부
(E) Positional Encoding 변경
sinusoidal encoding = sin/cos 기반
learned positional encoding = 학습된 벡터
Transformer는 RNN 구조가 없는, 온전한 Self-Attention를 기반으로 하는
첫번째 Sequence Transduction 모델임
병렬 연산으로 인해 학습 속도가 크게 향상되었고, 번역에서 SOTA를 달성함
다른 입출력 Modality로 확장될 수 있음
ex) Vision Transformer