Introduction
초기 기계번역 모델은 Seq2Seq 아키텍처로 구현되었다. 이 모델은 입력 문장을 인코더로 압축하고, 그 결과를 디코더로 전달하여 번역을 생성하는 'encoder-decoder' 방식이었다. 그러나 이 방식은 인코더가 context vector라는 고정된 크기의 벡터에 모든 입력 정보를 담기 때문에 정보가 손실될 우려가 있었다. 뿐만 아니라 Seq2Seq와 같은 RNN 기반 모델들은 계산이 순차적으로 이루어져 병렬처리가 어려웠다. 하지만 논문에서 제안하는 Transformer 모델은 행렬곱 계산을 통해 Context vector을 순차적 계산 없이 한번에 생성할 수 있는 동시에, 정보 손실을 최소화하는 매커니즘을 가지고 있다.
Seq2Seq 모델은 위 그림과 같이 인코더의 최종 결과 값을 하나의 문맥 벡터로 만든 뒤 그것을 디코더가 받아 최종 결과를 출력하는 방식이었다. 하지만 위에서 언급되었던 문제들이 발생했고, 이에 따라 인코더의 모든 출력을 디코더의 입력으로 받자는 'Attention' 매커니즘에 대한 아이디어가 나오게되었다.
위 그림이 Seq2Seq 모델에 attention 매커니즘을 사용한 것이다. 이렇듯 context vector 뿐만 아니라 각 단계의 모든 출력값들을 고려한 weighted sum vector을 같이 입력으로 넣어줌으로써 성능을 높일 수 있다.
Architecture
논문에서 소개하는 transformer 모델은 기존의 Seq2Seq의 encoder-decoder 구조를 따르면서도 RNN을 사용하지 않고 attention만을 사용하면서도 다른 모델들보다 우수한 성능을 낼 수 있음을 보여주었다.
transformer는 인코더와 디코더가 n번 중첩된 구조로 되어 있고, RNN을 사용하지 않는 대신 positional encoding을 사용한다.
논문에서는 인코더와 디코더를 6번씩 중첩하여 사용하였고, 입력과 출력의 문장 행렬 차원은 512로 설정하였다.
1. Positional Encoding
RNN을 사용할 경우 입력 값을 순차적으로 처리하기 때문에 각 단어의 위치정보를 가질 수 있다. 하지만 transformer는 RNN을 사용하지 않고, 행렬곱 계산으로 한번에 처리하기 때문에 각 단어의 위치정보를 가지기 어렵다. 이 때문에 transformer 모델은 각 단어의 위치에 따른 sin, cos 함수 값의 벡터를 positional encoding 벡터로 사용하여 위치정보를 얻는다.
단어의 embadding 벡터에 positional encoding 벡터를 더하여 인코더와 디코더의 입력으로 사용한다.
2. Attention
transformer에서 사용하는 attention의 종류는 세 가지로, 인코더에서 사용하는 Self-Attention, 디코더에서 사용하는 Masked Self-Attention, 마지막으로 Encoder-Decoder Attention이 있다.
Self-Attention은 입력 문장 내에서 단어들 간의 관련성을 계산하는 매커니즘이다. Masked Self-Attention은 Self-Attention에서 현재 단어 이후의 단어 정보를 참조하지 않도록 하는 매커니즘이다. 이후 단어를 참고하지 않게 하는 이유는 문장을 생성하는 과정에서 인과적인 순서를 고려하기 위해서이다.
Encoder-Decoder Attention은 인코더에서 생성된 문장 정보를 디코더로 전달하면서 문맥 파악 능력을 강화하는 역할을 수행한다.
이 세가지 attention은 multi-head attention이라는 공통된 특성을 가지고 있는데, 이는 서로 다른 가중치 행렬을 사용하는 attention들을 수행함으로써 한 번의 attention을 수행하는 것보다 성능을 끌어올리는 방식이다.
Attention 방식은 입력 시퀀스의 모든 위치 간의 유사도를 계산하기 위해 행렬 곱셈을 사용한다. 하지만 512차원에 대해 계산을 수행하기에는 비용이 너무 많이 든다는 문제가 있다. 이 때문에 논문에서는 512차원을 64차원으로 차원 축소하여 8번의 attention을 병렬처리하고 각 결과값을 합쳐 512차원의 결과값을 얻어냈다.
transformer 모델에서는 여러가지 attention 방식 중 Scaled Dot-Product Attention 방식을 사용하고 있다. 다음은 Scaled Dot-Product Attention이 입력 시퀀스의 각 단어들 간의 관련성을 계산하여 Context vector을 생성하는 과정이다.
1. Query, Key, Value 생성
입력 시퀀스의 각 단어에 대해 Query, Key, Value를 생성한다. Query는 디코더의 현재 상태를 표현한 벡터로, 현재 어떤 단어에 집중해야 할지를 결정하는데 사용된다. Key는 입력 시퀀스의 각 단어나 위치를 나타내는 벡터이고, Value는 Key가 가지고 있는 단어별 의미를 가지고 있는 벡터이다.
2. 유사도 계산
Query와 Key를 내적하여 유사도를 계산한다.
3. 스케일링
계산된 유사도를 입력 차원의 제곱근으로 나눠줌으로써 스케일을 조정하여 그래디언트 소실 문제를 완화한다.
4. 소프트맥스 적용
유사도 값을 소프트맥스 함수를 통해 확률 분포로 변환한다. 소프트맥스 함수를 적용하면 각 Key의 중요도를 정규화한 가중치를 얻을 수 있다.
5. 가중합 계산 및 Context vector 생성
소프트맥스로 정규화된 가중치와 Value 벡터를 곱하여 Context vector을 생성한다.
각 head에 대하여 위와 같은 과정을 수행한 후 이를 종합하여 최종 결과 값을 얻게 된다.
3. Position-wise FFNN
Attention 연산을 마친 후에는 인코더와 디코더 모두 문장 내 위치의 특징을 더 잘 학습하기 위해 position-wise feed forward neural network를 사용한다. 이 신경망에서는 먼저 입력 데이터의 차원을 높이는 선형 변환을 수행하고, 그 다음 비선형 활성화 함수 Relu를 사용해 성을 강화시킨다. 이렇게 변환된 정보는 다시 차원을 낮추는 선형 변환을 거치며 최종적인 출력을 만든다. 이 과정을 각 위치별로 반복하여 모든 위치에서 정보를 보다 정제된 형태로 변환한다.
4. Add & Norm
Add & Norm은 FFNN이 끝날 때마다 적용되는 정규화 기법이다. Add & Norm에서 addition은 레이어의 출력에 원래 입력을 더해줌으로써 입력 정보를 유지하는 동시에 변화를 줄 수 있다. Normalization에서는 더해진 결과를 정규화하여 모델의 안정성을 높인다.
5. Learning Rate Scheduler
Learning Rate Scheduler는 학습 일정을 정해두고 그에 따라 학습률을 동적으로 조절하는 기법이다. 이를 통해 학습 초기에는 큰 학습률로 빠르게 수렴하고, 학습이 진행됨에 따라 학습률을 줄여 안정적인 성능 향상을 얻을 수 있다.
6. Why only Self-Attention?
수치적인 면에서 봤을 때 RNN없이 Self-Attention만을 사용했을 때 더욱 좋은 성능을 보임을 확인할 수 있었다. 다음은 Self-Attention만을 사용하는 것이 좋은 이유들이다.
1. 각 레이어마다 계산 복잡도가 줄어듬
2. Recurrent 특성을 제거했으므로 병렬처리가 가능해 훈련 속도가 빠름
3. RNN보다 더 긴 sequential path를 사용할 수 있어, 문장 내에서 먼 단어들 사이의 의존성을 포착하는데 유용함
Experiment
1. BLEU
다음 표에서 BLEU는 기계의 번역 결과와 사람이 직접 번역한 결과가 얼마나 유사한지 비교하여 번역의 성능을 측정한 지표이다.
결과적으로 transformer는 base 모델만 가지고도 기존의 모델에 필적하는 좋은 성능을 내었으며, 학습 시간은 더욱 단축되었다. 파라미터 수가 더 많아진 big 모델은 그보다 더 높은 성능을 보였다.
2. Structural Deformation
논문에서는 헤드나 파라미터의 수를 바꿔보는 등, Transformer의 구조를 변형함으로써 어떤 요소가 상대적으로 중요한지 확인해보았다.
(A)에서는 헤드의 수를 변경하며 성능을 비교하였고, 헤드가 8개일 때 가장 좋은 성능을 가짐을 확인할 수 있었다.
(B)에서는 key dimension을 변경해가며 성능을 비교했다. key dimension의 경우 모델의 파라미터 수와 관련이 있는데, 이를 통해 파라미터 수가 줄어들수록 성능 또한 낮아진다는 것을 확인할 수 있다.
(C)를 통해 모델의 용량이 커질수록 성능이 증가함을 볼 수 있다.
(D)에서는 Dropout을 사용하면 성능이 더 좋아짐을 보여준다.
(E)는 위치에 대한 정보를 주기 위해 sin, cos 함수를 이용하는 대신, 별도의 layer을 사용하였을 때 base 모델의 성능 차이가 거의 없다는 것을 보여준다.
'개인공부 > 데이터 사이언스' 카테고리의 다른 글
AlexNet 논문 리뷰 (0) | 2024.02.13 |
---|---|
BERT 논문 리뷰 (2) | 2024.02.13 |
편향과 분산 (0) | 2024.01.11 |
앙상블 기법 (0) | 2024.01.11 |
로지스틱 회귀 (0) | 2022.03.14 |