자기 주의는 모델이 문장을 처리할 때 먼저 각 단어가 문장 안의 어떤 단어에 얼마나 주목해야 하는지를 판단한 뒤 그 정보를 융합하는 방식이다. 고정된 순서대로 단어를 하나씩 읽는 것이 아니라 모든 단어가 서로 점수를 매긴다. 관련성이 강할수록 가중치가 커지고, 결국 각 단어는 자신에게 가장 필요한 문맥이 섞인 새로운 표현을 얻는다.
예시로 살펴보기
“샤오밍이 열쇠를 책상 위에 올려놓고, 그는 곧 외출했다.”에서 “그”는 누구를 가리킬까? 사람은 한눈에 샤오밍임을 알 수 있다. 자기 주의도 비슷한 일을 한다. 모델이 “그”를 처리할 때 “샤오밍”에 더 높은 가중치를, “책상”이나 “열쇠”에는 더 낮은 가중치를 주므로 “그”의 표현에는 “샤오밍”에 대한 정보가 담긴다. 이 가중치는 사람이 직접 정한 규칙이 아니라 학습 과정에서 대량의 텍스트로부터 배운 것이다.
무엇을 계산하는가
과정은 세 단계로 나눌 수 있다. 먼저 각 단어를 벡터로 바꾸고, 단어 사이의 일치 점수를 계산한 뒤, 그 점수로 가중합하여 다른 단어의 정보를 모은다. 점수가 높은 단어의 영향은 크고, 점수가 낮은 단어는 거의 무시된다. 핵심은 병렬성이다. 문장 속 모든 단어가 동시에 이 단계를 수행할 수 있어 앞 단어가 끝나기를 기다릴 필요가 없으며, 이는 긴 텍스트 처리와 학습 효율이 높은 이유 중 하나이다.
순환 구조나 합성곱과의 차이
순환 구조는 문장을 순서대로 읽기 때문에 먼 단어의 정보는 전달되는 과정에서 약해지기 쉽다. 합성곱 구조는 한 번에 고정된 범위의 단어만 보며, 범위 밖의 관계는 층을 쌓아 간접적으로 만들 수밖에 없다. 자기 주의는 고정된 범위가 없고 순서대로 전달하는 방식에 의존하지 않으므로 먼 단어끼리 직접 연결될 수 있다. 다만 만능은 아니다. 단어 순서를 알기 위한 위치 정보가 따로 필요하며, 그렇지 않으면 “고양이가 개를 쫓는다”와 “개가 고양이를 쫓는다”를 구분하기 어려워진다.
경계는 어디인가
자기 주의는 “어떤 정보가 더 중요한가”만을 정한다. 사실을 기억하거나 논리적으로 추론하거나 출력이 옳음을 보장하지 않는다. 볼 수 있는 범위도 문맥 길이에 제한되며, 범위를 벗어난 내용은 직접 참여할 수 없다. 계산량은 문장이 길어질수록 빠르게 늘어나 긴 텍스트의 비용은 짧은 텍스트보다 확연히 높다. 지식 베이스나 추론 엔진이 아니라 정보 선별 장치로 이해하는 편이 더 정확하다.
흔한 오해
첫째, 자기 주의는 이해 그 자체가 아니다. 가중치가 높다는 것은 모델이 배운 통계적 관련성이 강하다는 뜻일 뿐, 의미를 진정으로 이해했다는 뜻은 아니다. 둘째, 주의 가중치를 그대로 설명으로 쓸 수는 없다. 가중치가 높은 단어가 특정 답변의 유일한 이유인 것은 아니다. 셋째, 자기 주의는 Transformer 전체와 같지 않다. Transformer에는 피드포워드 네트워크, 위치 인코딩, 정규화 등의 부품도 있으며, 주의만으로는 완전한 모델을 만들 수 없다.