개요
Transformer는 2017년 논문 「Attention Is All You Need」에서 제안된 신경망 아키텍처다.[1] 원 논문은 순환 신경망(RNN)이나 합성곱 신경망(CNN)에 의존하지 않고 어텐션 메커니즘을 중심으로 시퀀스를 처리하는 구조를 제시했다.
Self-Attention
Transformer의 핵심은 self-attention이다. 각 토큰은 다른 토큰과의 관련도를 계산해 문맥 정보를 모으고, 여러 attention head를 사용해 서로 다른 관계를 병렬로 표현할 수 있다.[1] 이 방식은 문장 안에서 멀리 떨어진 토큰 사이의 관계도 직접 계산할 수 있다는 장점이 있다.
인코더·디코더와 위치 정보
원래 Transformer는 인코더와 디코더 블록을 조합한 기계번역 구조로 제안됐다. 어텐션 자체에는 토큰의 순서 정보가 없기 때문에 원 논문은 위치 정보를 더하는 positional encoding을 사용했다.[1] 이후에는 인코더 중심, 디코더 중심, 인코더-디코더 형태 등 목적에 따라 다양한 변형이 발전했다.
왜 중요한가
RNN처럼 토큰을 순서대로 한 단계씩 처리하는 구조보다 학습 계산을 병렬화하기 쉬웠고, 대규모 데이터와 계산 자원을 활용하는 모델 확장에 잘 맞았다. 이 특성 때문에 Transformer는 자연어 처리뿐 아니라 여러 생성형 AI 시스템의 핵심 기반 구조로 자리 잡았다.
한계와 비용
표준 full attention은 시퀀스 길이가 길어질수록 토큰 쌍 사이의 상호작용 수가 빠르게 늘어난다. 원 논문에서도 self-attention의 시퀀스 길이에 대한 계산 복잡도를 제시한다.[1] 따라서 긴 문맥을 처리하는 실제 시스템에서는 메모리와 계산 비용을 줄이기 위한 여러 최적화가 함께 사용된다.
관련 개념
사례: 문맥에 따라 달라지는 단어
다음은 ORBiS Tree가 구성한 개념 설명용 예시다. '배가 항구에 도착했다'와 '배를 깎아 먹었다'에서 '배'는 같은 글자지만 주변 문맥이 다르다. Self-attention은 각 위치가 다른 위치의 정보를 가중해 결합하는 메커니즘이므로 문맥에 따라 다른 표현을 만드는 데 사용될 수 있다.[1] 이 예시는 특정 모델의 내부 가중치를 측정하거나 해석한 결과는 아니다.
입력 이해와 순차 생성
- 인코더 중심 구조: 입력의 여러 위치를 바탕으로 표현을 만들고 분류나 검색 같은 과제에 활용할 수 있다. BERT가 대표적인 관련 문서다.
- 디코더 중심 구조: 앞선 토큰을 조건으로 다음 토큰을 순차적으로 생성하는 모델에 사용된다. GPT의 계보와 연결된다.
- 인코더-디코더 구조: 입력 표현을 만들고 그 표현에 조건화해 출력을 생성한다. 원 Transformer 논문은 기계번역을 대상으로 이 구성을 제시했다.[1]
문맥을 길게 넣으면 무조건 좋아지는가
필요한 원문을 충분히 제공하는 것과 관계없는 문장을 계속 추가하는 것은 다르다. 장문 입력에서는 중요한 정보가 놓이는 위치나 과제에 따라 활용 성능이 달라질 수 있다. Lost in the Middle 연구는 장문 질의응답과 정보 탐색에서 이런 차이를 평가했다.[2] 최대 문맥 길이가 큰 모델이라는 이유만으로 모든 자료를 똑같이 정확하게 이용한다고 판단해서는 안 된다.
긴 입력의 비용을 이해하기
표준 full self-attention은 토큰 쌍의 관계를 계산하므로 길이에 따라 상호작용 수가 늘어난다.[1] 다만 실제 구현은 메모리를 줄이는 최적화나 다른 어텐션 구성을 사용할 수 있다. 특정 서비스의 처리 시간을 원 논문의 복잡도만으로 계산하거나, 입력을 두 배로 늘렸으니 실제 요금도 일정한 배수로 늘어난다고 가정하는 것은 적절하지 않다.
제품 비교에서 확인할 점
Transformer라는 구조 이름만으로 출력 품질이나 지원 기능을 정할 수 없다. 학습 데이터와 목표, 추가 학습, 입력 형식, 검색·도구 사용, 추론 환경을 함께 봐야 한다. 구조 설명은 모델을 이해하는 출발점이고, 구매나 도입의 판단에는 실제 사용 과제에서의 검증이 필요하다.
차원 예제: 두 head의 출력이 합쳐지는 과정
원 Transformer 연구 ↗는 attention과 위치별 feed-forward 층, 잔차 연결과 정규화를 조합했다.[1] 다음 차원은 논문의 모델 사양이 아닌 설명용 가정이다. 입력이 6토큰이고 표현 차원이 8이면 입력 행렬은 6×8이다. 두 head가 각각 Q·K·V를 4차원으로 투영하면 head마다 Q·K·V는 6×4, QK^T 점수는 6×6, 가중합 출력은 6×4가 된다.
두 출력을 이어 붙이면 6×8이고 이후 출력 투영을 적용한다. 토큰 수 6은 유지되고 표현을 섞는 방식이 바뀐다. 가중합 뒤의 feed-forward 층은 각 위치의 표현을 변환하는 별도 계산이다. 입력 표현과 토큰 분할도 이 head 계산 자체와 구분해야 차원 오류와 의미 오류를 나눠 찾을 수 있다.
병렬 학습과 순차 생성이 함께 가능한 이유
인코더는 주어진 입력 안의 여러 위치를 읽고, 원 논문의 디코더는 자기 출력의 허용된 이전 위치와 인코더 출력을 읽는다. BERT의 입력 표현 과제와 GPT의 다음 토큰 생성은 구조와 목표가 다르다. 구조 이름 하나로 모든 모델이 같은 마스크나 출력 방식을 사용한다고 가정하지 않는다.
학습에서는 이미 주어진 정답 시퀀스를 한 위치 이동한 입력으로 사용할 수 있고 causal mask가 미래 정답을 가린다. 생성에서는 아직 다음 토큰이 없으므로 앞선 결과를 조건으로 다음 단계를 진행한다. 학습의 위치별 계산을 병렬화할 수 있다는 사실이 추론의 모든 토큰을 한 번에 확정한다는 뜻은 아니다. 이전 키·값 재사용도 미래 답을 미리 아는 기능이 아니다.
계산 예제: 길이 두 배와 점수 자리 네 배
가상의 한 head에서 표준 full self-attention 점수 행렬은 길이 16일 때 16² = 256자리, 길이 32일 때 32² = 1,024자리다. 같은 층·head 조건에서 이 잠재 점수 자리 수는 네 배다. 이는 실제 요금이나 전체 처리 시간이 반드시 네 배라는 계산이 아니다. 마스크, 투영·feed-forward 계산, 메모리 접근, 배치와 구현이 실제 비용에 함께 영향을 준다.
FlashAttention 연구 ↗는 메모리 계층 사이의 읽기·쓰기를 줄이는 정확한 attention 계산을 제시했다.[3] 모든 점수 행렬을 큰 메모리에 그대로 저장해야 한다는 가정은 최적화 구현에 맞지 않을 수 있다. 전체 입력 처리와 캐시를 활용한 토큰별 생성도 나누어 측정하고 지연·처리량을 실제 조건에서 확인한다.
구조 비교를 재현 가능한 실험으로 바꾸기
토크나이저·입력 길이·마스크·위치 정보 방식·모델 버전·정밀도·장비·동시 요청·출력 길이를 남긴다. 같은 문장을 넣어도 문맥 예산에서 차지하는 토큰 수는 달라질 수 있다. 번역한 질문은 의미와 정답을 보존했는지 확인하고 한국어·영어 결과를 나눠 기록한다.
빠른 구현이 같은 과제의 성공률을 유지하는지와 긴 입력에서 근거를 정확히 이용하는지를 함께 본다. 구조 설명과 현재 제품 성능은 별개의 증거가 필요하다. 모델 카드에 설정과 평가 범위를 연결하면 'Transformer이므로 좋다'는 이름 비교를 실제 업무 결과 비교로 바꿀 수 있다.