트랜스포머 아키텍처는 self-attention을 중심으로 설계된 신경망 구조입니다. 주로 순차적으로 한 단계씩 처리하는 방식에 의존하는 대신, 시퀀스 안의 각 토큰이 다른 관련 토큰들로부터 정보를 모을 수 있게 합니다.
이 때문에 트랜스포머는 언어와 그 밖의 시퀀스 작업에서 강력하게 작동합니다. 어떤 단어가 멀리 떨어진 다른 단어에 의존하더라도, 어텐션은 그 둘 사이에 직접적인 경로를 제공합니다.
트랜스포머 아키텍처의 의미
트랜스포머 블록은 단순히 하나의 공식을 적용하는 것보다 더 많은 일을 하지만, 핵심 아이디어는 self-attention입니다. self-attention에서 각 토큰은 세 개의 벡터를 만듭니다.
- query: 이 토큰이 무엇을 찾고 있는지를 나타냄
- key: 이 토큰이 매칭을 위해 무엇을 제공하는지를 나타냄
- value: 전달될 수 있는 정보 자체
토큰 표현이 행렬 에 정리되어 있다면, 하나의 attention head는 보통 다음과 같이 만듭니다.
여기서 , , 는 학습되는 행렬입니다.
표준적인 scaled dot-product attention 공식은 다음과 같습니다.
여기서 는 key의 차원입니다. 로 나누는 스케일링은 차원이 커질수록 원시 dot-product 점수가 지나치게 커지는 것을 막는 데 도움이 됩니다.
softmax는 행마다 적용됩니다. 각 행은 하나의 토큰이 던지는 질문에 답합니다. “나는 다른 토큰들에 얼마나 주의를 기울여야 할까?”
쉬운 말로 보는 self-attention의 작동 방식
self-attention은 보통 하나의 토큰만 고르고 나머지를 무시하지 않습니다. 대신 value 벡터들의 가중평균을 만듭니다.
어떤 토큰이 다른 토큰의 key와 강하게 매칭되면 그 토큰은 더 큰 가중치를 받습니다. 매칭이 약하면 가중치는 더 작아집니다. 따라서 한 토큰의 출력은 시퀀스 전체 정보가 반영된 문맥 의존적 혼합이 됩니다.
이 방식은 주어-동사 일치, 대명사 지시 대상, 그 밖의 장거리 관계를 다루는 데 도움이 됩니다. 정보가 사용 가능해지기 전에 많은 중간 단계를 거쳐 전달될 필요가 없습니다.
self-attention 계산 예제
하나의 attention head에서 하나의 query와 두 개의 후보 토큰을 생각해 봅시다. 계산을 단순하게 하기 위해 로 두겠습니다.
현재 토큰의 query가 다음과 같다고 합시다.
그리고 두 후보 토큰의 값이 다음과 같다고 합시다.
value는 다음과 같습니다.
원시 attention 점수는 dot product입니다.
이므로 스케일링 계수는 이고, 따라서 스케일된 점수도 그대로 와 입니다.
이제 이 두 점수에 softmax를 적용합니다.
attention 출력은 다음과 같은 가중 결합입니다.
핵심 아이디어는 단순합니다. query가 과 보다 더 강하게 매칭되었기 때문에, 출력은 에 더 가까워집니다.
이것이 훨씬 더 큰 모델 내부에서 반복되는 기본 패턴입니다. 실제 트랜스포머는 더 높은 차원에서, 더 많은 토큰에 대해 동시에 이 계산을 수행하지만, 계산의 아이디어 자체는 같습니다.
트랜스포머 블록 안에 들어 있는 다른 요소들
트랜스포머는 하나의 어텐션 공식만으로 이루어지지 않습니다. 표준 블록에는 보통 다음이 포함됩니다.
- multi-head attention: 모델이 여러 종류의 관계를 동시에 학습할 수 있게 함
- 위치별 피드포워드 네트워크: 어텐션 이후 각 토큰 표현을 변환함
- 잔차 연결: 층을 거치며 정보를 보존하고 정교하게 다듬는 데 도움을 줌
- layer normalization: 학습을 안정화하는 데 도움을 줌
시퀀스-투-시퀀스 작업을 위한 원래의 트랜스포머 아키텍처에서는 모델이 인코더 스택과 디코더 스택으로 구성되었습니다.
- 인코더는 입력 시퀀스 전체에 대해 self-attention을 사용합니다.
- 디코더는 어떤 위치도 미래의 출력 토큰을 미리 볼 수 없도록 masked self-attention을 사용합니다.
- 디코더는 cross-attention도 사용할 수 있는데, 이때 query는 디코더에서 오고 key와 value는 인코더 출력에서 옵니다.
많은 현대 언어 모델은 디코더 쪽만 사용합니다. 핵심 어텐션 아이디어는 그대로 있지만, 전체 아키텍처는 다음 토큰 예측에 맞게 특화되어 있습니다.
트랜스포머에 위치 정보가 필요한 이유
어텐션만으로는 입력 토큰에 대해 순열 등가적입니다. 쉽게 말해, 같은 토큰 벡터 집합에 위치 정보 없이 어텐션만 적용하면, 모델은 어떤 토큰이 먼저 왔는지를 본질적으로 알 수 없습니다.
그래서 트랜스포머는 학습된 위치 임베딩이나 positional encoding 같은 위치 정보를 추가합니다. 이런 추가 신호가 없으면, 언어처럼 순서에 민감한 작업을 올바르게 모델링하기가 훨씬 더 어려워집니다.
트랜스포머 아키텍처에 대한 흔한 오해
어텐션이 트랜스포머의 전부라고 생각하는 것
어텐션이 핵심 아이디어인 것은 맞지만, 아키텍처는 피드포워드 층, 잔차 경로, 정규화, 위치 정보에도 의존합니다.
self-attention과 cross-attention을 혼동하는 것
self-attention에서는 , , 가 모두 같은 시퀀스에서 나옵니다. cross-attention에서는 이들이 모두 같은 출처에서 오지 않습니다.
마스킹의 역할을 잊는 것
디코더 전용 언어 모델은 학습과 추론 중에 causal masking이 필요합니다. 그래야 한 토큰이 미래 토큰에 attention하지 못합니다.
attention 가중치를 완전한 설명으로 여기는 것
attention 가중치는 유용한 정보를 줄 수 있지만, 그것만으로 모델의 추론을 완전히 증명할 수는 없습니다. 최종 동작은 value 벡터, 이후 층들, 비선형 변환에도 영향을 받습니다.
트랜스포머 모델은 언제 사용될까
트랜스포머는 언어 모델링, 번역, 요약, 코드 생성, 음성, 그리고 많은 비전 작업에서 널리 사용됩니다. 특히 시퀀스나 집합 내부의 관계가 순전히 국소적인 패턴보다 더 중요할 때 잘 작동합니다.
하지만 모든 상황에서 만능은 아닙니다. 데이터셋이 매우 작거나, 엄격한 실시간 제약이 있거나, 국소적 귀납 구조가 가장 중요한 문제에서는 다른 아키텍처가 더 적합할 수 있습니다.
비슷한 문제를 직접 해보기
세 단어로 된 구를 하나 고르고, 그중 한 단어에 집중해 보세요. 나머지 단어들 중 어떤 단어가 높은 attention 가중치를 받아야 하는지와 그 이유를 정한 뒤, 그 직관에 맞는 작은 query-key-value 예시를 그려 보세요.
한 걸음 더 나아가고 싶다면, 작은 attention 출력을 하나 손으로 직접 계산해 보세요. 보통 이것이 “공식은 안다”에서 “아키텍처가 무엇을 하는지 이해한다”로 가는 가장 빠른 길입니다.