트랜스포머는 2017년 발표된 Attention Is All You Need라는 논문에서 제시된 모델 아키텍처로 자연어처리 분야에 많은 영향을 끼쳤고 현재까지도 트랜스포머 기반의 모델들이 주류를 차지하고 있습니다. 트랜스포머의 등장 이전에는 RNN 기반의 모델들이 주류를 이뤘었지만, RNN 기반 모델들은 길이가 긴 시퀀스에서 성능과 효율이 떨어진다는 문제점이 있었습니다. 하지만 트랜스포머에서는 순환 구조를 버리고 Self-Attention이라는 기술을 활용하는 방법을 통해서 그 문제점들을 해결하였습니다.
RNN 모델에 Attention 메커니즘이라는 현재 처리해야 할 토큰과 높은 연관성을 가지는 토큰들을 찾는 기술을 활용하여 성능을 한층 향상시켰지만, 여전히 순환 모델의 태생적인 문제점이 남아있었습니다. 순환 모델에서는 처리해야 할 시퀀스가 길어지면 후반부에는 시작 부분의 데이터에 손실이 발생할 수 있다는 long-term dependency 문제는 해결이 되지 않았던 것이죠.
트랜스포머에서는 RNN 계열 모델의 long-term dependency 문제를 해결하기 위해 순환 구조를 버리고 Attention 메커니즘을 개량한 Self-Attention 메커니즘을 활용하였습니다.
Self-Attention의 가장 큰 특징은 기존의 Attention에서 시퀀스의 각 타임 스텝마다 가중치를 계산하였던 것과는 다르게 전체 시퀀스에서 각 임베딩의 가중 평균으로 가중치를 계산한다는 것입니다.
Self-Attention에서는 전체 시퀀스에서 토큰별로 연관성이 높은 토큰들을 찾는다고 했는데 그렇다면 토큰 들간의 연관성은 어떻게 계산할까요?
트랜스포머를 소개한 Attetion Is All You Need에서는 Scaled dot-product이라는 방법을 소개합니다. Scaled dot-product에서는 각 토큰의 임베딩을 Query, Key, Value 3개의 벡터를 사용하여 표현하며 dot product라는 유사도 함수를 활용해 Query 벡터와 Key 벡터의 유사도를 계산하고 이를 통해 n × n 크기(n=시퀀스에서 토큰의 개수)의 어텐션 점수 행렬을 만듭니다. 쿼리와 키의 유사도가 높을수록 점수가 높아지고 유사도가 낮으면 해당 점수의 값도 낮아집니다.
점수 행렬을 완성시키고 나면 어텐션 가중치를 계산하는 데 일반적인 dot product에서는 가중치의 값이 커지면서 훈련 과정에 불안정해질 수 있는데 Scaled dot-product에서는 스케일링을 통해 그 점을 해결합니다. 스케일링 과정은 스케일링 인자(논문에서는 로 활용)를 곱해 분산을 정규화한 후 소프트맥스 함수를 통해서 값의 총합이 1이 되도록 하는 방식입니다.
위의 과정이 모두 끝나면 Value 벡터에 어텐션 가중치를 곱하는 것으로 마무리입니다.
실제 트랜스포머 구조에서는 Self-Attention 이외에도 Multi head attention과 positional embedding이라는 기술들도 포함되어 있습니다. 추후 트랜스포머에 대해 좀 더 공부를 하면서 기회가 되면 다른 기술들에 대해서도 다루어보겠습니다. Self-Attention에 대한 부분도 아직 모르는 부분이 많은 것 같은데 만약 위의 내용에서 잘못된 내용이나 보완할 내용이 있을 경우 피드백을 감사히 받겠습니다. 읽어주셔서 감사합니다.