AI VIDEO BRIEFING
트랜스포머와 어텐션 원리 이해하기: 스탠퍼드 CS231N 강의로 보는 셀프 어텐션의 등장
오늘날 거의 모든 대형 AI 모델은 트랜스포머다. 스탠퍼드 CS231N 강의를 토대로, 순환 신경망의 고정 길이 병목을 고치려던 어텐션이 어떻게 독립적인 연산이 되고 트랜스포머로 이어졌는지 정리했다.

핵심 메시지
쉽게 이해하기
요즘 널리 쓰이는 대형 AI 모델은 이미지를 분류하든 글을 쓰든 소리를 다루든 대부분 트랜스포머 계열이다. 그런데 강연자는 트랜스포머가 등장하던 순간이 극적인 전환점처럼 느껴지지는 않았다고 말한다. 어텐션이라는 아이디어 자체는 이미 몇 년 전부터 순환 신경망 연구 안에서 자라고 있었기 때문이다.
출발점은 번역 문제였다. 영어 문장을 순환 신경망으로 읽어 하나의 고정 길이 벡터에 압축한 뒤, 그 벡터만 보고 다른 언어의 문장을 만들어내는 구조였다. 문장이 짧을 때는 그럭저럭 통하지만, 문단이나 책 한 권을 그 하나의 벡터에 담으라고 요구하는 순간 명백한 병목이 생긴다.
해결책은 압축을 포기하는 것이었다. 출력 단어를 하나씩 만들 때마다 입력 문장 전체를 다시 돌아보게 하면 병목이 사라진다. 구체적으로는 현재 상태와 입력의 각 위치가 얼마나 맞는지 점수를 매기고, 소프트맥스로 합이 1인 분포를 만든 뒤, 그 가중치로 입력 표현들을 섞어 문맥 벡터를 만든다. 흥미로운 점은 문법을 가르친 적이 없는데도 학습이 끝나면 영어와 프랑스어의 어순 차이가 어텐션 지도 위에 대각선이 꺾인 모양으로 드러난다는 것이다.
여기서 강의는 결정적인 한 걸음을 뗀다. 이 메커니즘을 순환 신경망에서 떼어내 독립적인 연산으로 만드는 것이다. 유사도 함수는 가장 단순한 내적으로 바꾸되, 차원이 커질 때 소프트맥스가 지나치게 뾰족해져 기울기가 사라지는 문제를 막기 위해 차원의 제곱근으로 나눈다. 또 입력 데이터를 키와 값으로 나누어 투영하는데, 어떻게 나눌지는 사람이 정하지 않고 학습으로 알아서 정하게 둔다.
질의와 데이터가 서로 다른 두 묶음일 때는 교차 어텐션, 하나의 입력 묶음 안에서 서로를 참조할 때는 셀프 어텐션이 된다. 셀프 어텐션은 입력을 뒤섞어도 출력이 같은 방식으로 뒤섞여 나올 뿐이어서, 본질적으로 순서가 있는 수열이 아니라 벡터의 집합을 다루는 연산이다. 순서 정보가 필요하면 위치 임베딩을 덧붙이고, 뒤를 미리 보지 못하게 막아야 하면 해당 점수를 음의 무한대로 덮어쓰는 마스킹을 쓴다.
마지막으로 강의는 순환 신경망·합성곱·셀프 어텐션을 나란히 놓고 비교한다. 순환 신경망은 본질적으로 순차적이라 병렬화가 어렵고, 합성곱은 병렬화는 잘 되지만 넓은 범위를 보려면 층을 많이 쌓아야 한다. 반면 셀프 어텐션은 층 하나만으로 모든 벡터가 서로를 보고, 전체 계산이 네 번의 큰 행렬 곱으로 정리되어 GPU를 늘리는 만큼 확장된다.
주요 인사이트
- 설계자가 정답을 정해주지 않고 '유용해 보이는 메커니즘'만 심어두면 나머지는 학습이 채운다. 어순 대응도 키와 값의 분리도 사람이 규칙으로 준 것이 아니라 경사하강법이 찾아낸 결과다.
- 차원의 제곱근으로 나누는 사소해 보이는 처리가 사실상 규모 확장의 전제 조건이다. 이것이 없으면 벡터 차원을 키울수록 기울기가 사라져 학습이 멈춘다.
- 멀티 헤드 어텐션에서 각 헤드의 차이는 구조가 아니라 무작위로 다르게 초기화된 가중치뿐이다. 같은 계산을 여러 벌 돌려 표현 용량을 늘리는 단순한 방법이다.
- 수열 길이의 제곱에 비례하는 연산량은 흔히 단점으로 꼽히지만, 강연자는 연산량이 곧 모델이 생각할 여지라는 점에서 반드시 나쁜 것만은 아니라고 본다.
- 지난 20년간 컴퓨팅이 발전한 방식은 프로세서 하나를 빠르게 만드는 것이 아니라 여러 개를 동시에 쓰는 것이었다. 병렬화가 쉬운 알고리즘이 결국 살아남는다는 관점이 트랜스포머의 성공을 설명한다.
- 2017년 이후 구조 자체는 크게 바뀌지 않았는데도, 12개 블록·2억 개 파라미터에서 수백 개 블록·조 단위 파라미터까지 규모만으로 확장됐다.
자주 묻는 질문
어텐션은 왜 만들어졌는가?
순환 신경망으로 번역할 때 입력 문장 전체를 고정 길이 벡터 하나에 압축해야 하는 병목을 없애기 위해서였다. 출력 단어를 만들 때마다 입력 전체를 다시 돌아볼 수 있게 한 것이 어텐션의 출발점이다.
셀프 어텐션과 교차 어텐션은 어떻게 다른가?
교차 어텐션은 질의와 데이터가 서로 다른 두 묶음일 때 쓴다. 번역이나 이미지 캡션 생성처럼 비교할 대상이 둘로 나뉜 문제가 여기 해당한다. 반면 셀프 어텐션은 입력 묶음이 하나뿐이어서, 그 안의 요소들끼리 서로를 참조하게 한다.
위치 임베딩은 왜 필요한가?
셀프 어텐션은 입력 순서를 바꿔도 출력이 같은 방식으로 뒤섞여 나올 뿐 계산 자체가 순서에 의존하지 않는다. 즉 순서가 있는 수열이 아니라 집합을 다루는 연산이므로, 순서를 알려주려면 각 입력에 위치 정보를 덧붙여야 한다.
트랜스포머 블록은 무엇으로 이루어져 있는가?
벡터들이 서로를 참조하게 하는 셀프 어텐션과, 각 벡터를 독립적으로 처리하는 작은 2층 신경망이 한 쌍을 이룬다. 둘 다 잔차 연결로 감싸고 층 정규화를 붙인 것이 한 블록이며, 트랜스포머는 이 블록을 여러 개 쌓은 구조다.
원문과 출처
이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.
YouTube 원본 영상 보기 ↗