카테고리 없음

셀프 어텐션은 문맥을 어떻게 계산하는가

notol 2026. 8. 4. 16:21

셀프 어텐션은 문맥을 어떻게 계산하는가

사람은 문장을 읽을 때 단어를 따로 떼어 이해하지 않는다. 앞에서 나온 대상과 뒤의 표현을 연결하고, 같은 단어라도 주변 문맥에 따라 의미를 다르게 판단한다. 셀프 어텐션은 언어 모델이 이와 비슷한 관계를 수치로 계산하도록 만든 기술이다. 문장 속 각 단어가 다른 단어와 얼마나 관련되어 있는지를 비교해 현재 단어를 이해하는 데 필요한 정보를 모은다.

예를 들어 ‘철수가 영희에게 책을 주었고 그녀는 고맙다고 말했다’라는 문장에서 ‘그녀’가 누구를 가리키는지 알려면 앞부분의 ‘영희’를 살펴야 한다. 셀프 어텐션은 ‘그녀’를 처리할 때 문장 안의 여러 단어에 서로 다른 중요도를 부여한다. 영희와의 관련성은 높게, 책이나 주었다와의 관련성은 상대적으로 낮게 계산하는 방식이다.

이 계산을 위해 각 토큰은 쿼리, 키, 밸류라는 세 종류의 벡터로 변환된다. 쿼리는 현재 토큰이 어떤 정보를 찾는지를 나타내고, 키는 각 토큰이 어떤 정보를 가지고 있는지를 표현한다. 밸류는 실제로 전달할 내용에 해당한다. 현재 토큰의 쿼리와 모든 토큰의 키를 비교하면 서로의 관련성을 나타내는 점수를 얻을 수 있다.

관련성 점수는 그대로 사용하지 않고 일정한 범위의 비율로 바꾼다. 일반적으로 소프트맥스라는 계산을 적용하여 모든 비율의 합이 1이 되도록 만든다. 관련성이 큰 토큰에는 높은 비중이, 관련성이 작은 토큰에는 낮은 비중이 배정된다. 이후 각 토큰의 밸류에 이 비중을 곱해 더하면 현재 토큰을 위한 새로운 문맥 표현이 만들어진다.

셀프 어텐션이라는 이름은 문장 내부의 요소들이 같은 문장 안의 다른 요소를 참고한다는 뜻에서 붙었다. 번역문과 원문처럼 서로 다른 입력을 연결하는 어텐션과 달리, 하나의 입력 안에서 관계를 계산한다. 이를 통해 멀리 떨어진 단어 사이의 관계도 직접 비교할 수 있다. 순서대로 정보를 전달하던 이전 구조보다 긴 문장의 의존 관계를 다루는 데 유리한 이유다.

실제 모델은 한 가지 기준으로만 단어의 관계를 보지 않는다. 멀티 헤드 어텐션을 이용해 여러 관점의 계산을 동시에 수행한다. 한 헤드는 주어와 동사의 관계에 집중하고, 다른 헤드는 대상이나 시간 표현을 살필 수 있다. 각각의 결과를 결합하면 한 문장을 문법, 의미, 위치 등 여러 측면에서 표현할 수 있다.

셀프 어텐션에는 단어의 순서를 스스로 알기 어렵다는 특성도 있다. 모든 토큰을 한꺼번에 비교하면 같은 단어가 앞에 있는지 뒤에 있는지가 계산만으로는 분명하지 않다. 그래서 트랜스포머는 위치 정보를 별도로 더한다. 이 정보 덕분에 ‘개가 사람을 물었다’와 ‘사람이 개를 물었다’처럼 단어는 같지만 순서에 따라 뜻이 달라지는 문장을 구분할 수 있다.

문장을 생성할 때는 미래의 단어를 미리 참고하지 못하도록 가림 처리를 한다. 첫 단어를 예측할 때 뒤에 올 정답을 볼 수 있다면 올바른 학습이 이루어지지 않기 때문이다. 언어 모델은 현재 위치보다 앞에 있는 토큰에만 어텐션을 적용하고, 그 정보를 바탕으로 다음 토큰을 예측한다. 이 과정이 반복되면서 문장이 한 토큰씩 완성된다.

다만 셀프 어텐션이 문장의 의미를 사람처럼 이해한다는 뜻은 아니다. 모델은 학습 데이터에서 발견한 관계를 수치적으로 계산한다. 긴 입력에서는 모든 토큰 쌍을 비교해야 하므로 계산량과 메모리 사용량도 크게 증가한다. 컨텍스트가 길어질수록 처리 비용이 커지는 주요 원인 가운데 하나다.

결국 셀프 어텐션은 문장 속 각 토큰이 무엇을 참고해야 하는지를 가중치로 정하는 장치다. 쿼리와 키로 관련성을 계산하고, 그 결과에 따라 밸류를 결합하여 문맥이 반영된 표현을 만든다. 이 단순한 원리를 여러 층과 여러 헤드로 반복함으로써 언어 모델은 대명사의 대상, 문법적 관계, 멀리 떨어진 표현의 연결까지 폭넓게 처리할 수 있다.