AI VIDEO BRIEFING

스탠퍼드 CS224N 강의 정리: 자기어텐션과 트랜스포머는 RNN의 어떤 한계를 어떻게 풀었나

순환신경망의 두 가지 한계에서 출발해 질의·키·값 자기어텐션, 위치 인코딩과 마스킹, 멀티헤드와 잔차 연결까지 스탠퍼드 CS224N 강의가 설명한 트랜스포머의 구성 요소를 정리했다. 남은 약점인 제곱 계산량도 함께 짚는다.

RNN을 밀어낸 자기어텐션, 스탠퍼드 CS224N이 짚은 트랜스포머의 뼈대 영상 대표 이미지

핵심 메시지

  • 순환신경망은 멀리 떨어진 두 단어의 관계를 배우려면 그 사이 길이만큼 계산 단계를 거쳐야 해서 긴 의존 관계를 학습하기 어렵다.
  • 또 하나의 문제는 병렬화다. 앞 시점의 은닉 상태를 계산해야 다음 시점을 계산할 수 있어, 순차 길이만큼 병렬 처리가 불가능한 연산이 쌓인다.
  • 자기어텐션은 질의·키·값으로 이뤄진 '흐릿한 사전 조회'로, 단어 사이 거리와 무관하게 문장 전체를 한 번에 참조한다.
  • 자기어텐션만으로는 순서 개념·비선형성·미래 차단이 없어 위치 표현, 피드포워드 층, 마스킹이 최소 구성 요소로 함께 붙는다.
  • 트랜스포머는 여기에 멀티헤드 어텐션과 스케일 조정, 잔차 연결, 층 정규화를 더한 조합이며 남은 약점은 시퀀스 길이에 제곱으로 늘어나는 계산량이다.

쉽게 이해하기

강의는 2014년부터 2017년 무렵까지 자연어처리의 기본기였던 조합, 즉 양방향 LSTM으로 문장을 인코딩하고 단방향 LSTM으로 결과를 생성하며 그 사이를 어텐션으로 잇는 방식을 되짚는 데서 출발한다. 잘 작동하던 이 구성에 두 가지 구조적 문제가 있었고, 그 문제를 정면으로 없앤 부품이 자기어텐션이라는 것이 이날 강의의 뼈대다.

첫 번째 문제는 강의에서 '선형 상호작용 거리'라고 부르는 것이다. 순환신경망은 문장을 왼쪽에서 오른쪽으로 훑기 때문에 가까운 단어끼리는 쉽게 영향을 주고받지만, '그 요리사는 … 였다'처럼 주어와 서술어 사이에 긴 수식이 끼면 두 단어가 만나기까지 그 길이만큼 순환 연산을 거쳐야 한다. LSTM이 단순 순환신경망보다 기울기를 잘 전달하긴 해도 완전한 해결은 아니었다. 두 번째 문제는 시점 의존성이다. 다섯 번째 은닉 상태는 네 번째를 계산한 뒤에야 계산할 수 있어, GPU가 아무리 커도 순차 길이만큼의 연산은 병렬로 처리할 수 없다.

자기어텐션은 이 둘을 동시에 푼다. 강의는 어텐션을 파이썬 딕셔너리 같은 조회 테이블에 빗댄다. 다만 질의가 키 하나와 정확히 일치하는 대신 모든 키와의 유사도를 재고, 소프트맥스로 0과 1 사이 가중치를 만든 뒤 값들을 가중 평균한다. 각 단어 임베딩에 서로 다른 학습 행렬 세 개를 곱해 질의·키·값을 만들고, 질의와 키의 내적으로 점수를 낸 다음 값들을 더하는 것이 전부다. 이렇게 하면 아무리 멀리 떨어진 단어라도 한 번에 참조할 수 있고, 문장 전체를 한 덩어리 행렬 곱으로 처리할 수 있다.

다만 이대로는 LSTM을 대체할 수 없다. 임베딩이 단어의 위치를 모르기 때문에 '주코가 삼촌을 만들었다'와 '삼촌이 주코를 만들었다'가 같은 표현으로 계산되고, 가중 평균만 반복해서는 비선형성이 없으며, 다음 단어를 예측해야 하는 모델이 미래를 훔쳐볼 수도 있다. 그래서 위치 벡터를 입력에 더하고(사인·코사인 함수를 쓰거나 아예 위치 행렬을 학습하는데, 후자는 정해둔 최대 길이를 넘기면 모델이 처리하지 못한다), 어텐션 출력마다 단어별 피드포워드 신경망을 통과시키고, 미래 자리의 점수를 음의 무한대로 만들어 소프트맥스 이후 가중치가 0이 되게 마스킹한다.

트랜스포머는 이 최소 구성에 네 가지를 더한다. 서로 다른 이유로 여러 곳을 동시에 볼 수 있게 하는 멀티헤드 어텐션(텐서를 재배열할 뿐이라 계산 비용은 거의 같다), 차원이 커질수록 내적이 커져 기울기가 작아지는 것을 막는 스케일 조정, 기울기가 그대로 흐르는 통로를 내주는 잔차 연결, 그리고 벡터 하나하나를 평균 0·표준편차 1로 맞추는 층 정규화다. 강의는 층 정규화가 배치나 문장 전체가 아니라 단어 벡터 하나 안에서만 통계를 낸다는 점을 짚는다. 마스킹을 빼면 양방향 인코더가 되고, 디코더의 질의에 인코더의 키·값을 물리면 원 논문의 인코더-디코더 구조가 된다.

주요 인사이트

  • 질의와 키를 굳이 별도 행렬로 두는 이유는 수학적 필연이 아니라 효율이다. 두 행렬의 곱은 결국 하나의 행렬이지만, 낮은 계수(low rank) 근사로 두는 편이 계산에 유리하고 자기 자신을 볼지 말지까지 학습으로 결정하게 해준다.
  • 헤드마다 다른 역할을 하도록 강제하는 장치는 없다. 강의는 그저 그렇게 되기를 기대할 뿐이며 실제로 중복이 생겨 일부 헤드는 통째로 잘라내도 된다고 말한다. 반대로 헤드 하나만 두는 것보다 여럿을 두는 편이 훨씬 낫다는 것은 경험적으로 분명하다.
  • 긴 문맥 문제는 강의 시점에도 현재진행형이었다. 자기어텐션의 계산량이 길이의 제곱으로 늘기 때문인데, 순환신경망이 길이에 비례해 늘었던 것에 비하면 오히려 후퇴한 지점이다.
  • 다만 GPT-3 규모로 가면 전체 연산에서 자기어텐션이 차지하는 비중이 크지 않아, 이 제곱 비용을 반드시 없애야 하는지 자체가 열린 문제라는 지적도 함께 나온다.
  • 강사는 트랜스포머를 '탐색의 종착점'으로 보지 말라고 당부한다. 지금도 원 논문 구조에 몇 가지 수정을 더한 것이 최선에 가깝지만, 그것은 더 나은 구조를 찾는 일이 끝났다는 뜻이 아니다.

자주 묻는 질문

인코더에도 미래를 가리는 마스킹을 쓰나요?

쓰지 않습니다. 마스킹은 다음 단어를 예측해야 해서 미래를 봐선 안 되는 디코더 쪽에 씁니다. 번역의 원문처럼 모든 단어가 서로를 봐도 되는 인코더에서는 마스킹하지 않는 편이 낫다고 강의는 설명합니다.

층 정규화는 문장이나 배치 단위로 통계를 공유하나요?

아닙니다. 단어 벡터 하나 안의 차원들만 가지고 평균과 표준편차를 냅니다. 배치 정규화는 한 예시의 계산이 무관한 다른 예시에 영향을 받는 문제가 있어, 층 정규화가 그 대체재로 나왔다고 강의는 짚습니다.

학습으로 만든 위치 행렬에는 어떤 단점이 있나요?

미리 정한 최대 길이 n을 넘는 입력을 처리할 수 없습니다. n개 위치만큼만 행렬을 학습했기 때문에 더 긴 입력이 들어오면 모델이 오류를 냅니다.

원문과 출처

이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.

YouTube 원본 영상 보기 ↗

관련 AI 소식

#트랜스포머#자기어텐션#스탠퍼드 CS224N#자연어처리#딥러닝 강의