어텐션은 쿼리를 입력하면, 관련 있는 키들의 가중치 합을 계산하는 과정이다.
즉, Attention의 결과는 Query와 연관된 Key 정보들의 가중 합이다.
이때, 가중치 합을 계산할 때 Query와 Key를 각각 하나씩 내적하여 계산한다.
하지만 이 과정에서는 단어의 "순서" 정보가 고려되지 않는다.
어텐션 연산은 Query와 Key 간의 내적(dot product) 연산을 기반으로 한다.
즉, 단어들의 내적 값이 동일하면 그 단어가 문장에서 처음 등장했든, 마지막에 등장했든 내적 결과는 동일하다.
"인도 음식점을 가던 중 주행 금지 표지판을 보았다."
위 문장에서 "인도"라는 단어가 첫 번째 위치에 등장한다.
하지만 "인도"라는 단어가 문장 끝에 있더라도 내적 계산 결과는 동일하다.
즉, 어텐션은 단어의 위치 정보를 고려하지 않는다.
어텐션의 결과(가중치 합)는 Query 값이 동일하면 단어의 순서가 바뀌어도 동일한 결과를 출력한다.
트랜스포머 모델에서는 순서 정보를 보완하기 위해 Positional Encoding을 사용한다.
Positional Encoding은 단어의 위치를 표현하는 벡터를 추가하는 방법이다.

Positional Encoding을 통해 단어의 위치 정보를 모델에 주입한다.
어텐션 네트워크에서 Query와 Key로 동일한 정보를 사용하는 경우, 이를 Self-Attention이라고 한다.
한 문장을 분석할 때, 모든 단어를 Query로도 사용하고 Key로도 사용한다.
계산된 가중치 합을 다음 레이어의 입력으로 사용한다.
인코더-디코더를 거치면서 문맥 정보가 더욱 풍부해진다.
Self-Attention을 여러 레이어 반복하면, 단어 간의 상관관계를 더 깊이 반영할 수 있다.
| 문제점 | 해결 방법 |
|---|---|
| Attention만 사용하면 단어들을 개별적으로 내적 계산하기 때문에, 위치 정보와 맥락 정보가 반영되지 않는다. | Positional Encoding을 활용하여 위치 정보를 포함한다. |
| 단순 Attention만으로는 문맥을 이해하는 데 한계가 있다. | Self-Attention을 사용하여 문맥 정보를 반영한다. |