AI VIDEO BRIEFING

트랜스포머 교차 어텐션 원리 정리: 디코더가 인코더 출력을 받아들이는 구조와 마스킹이 없는 이유

트랜스포머 디코더의 두 번째 어텐션 층인 인코더-디코더 어텐션이 두 개의 행렬을 어떻게 받아 번역 정보를 옮기는지, 쿼리와 키·값의 출처가 갈리는 이유와 마스킹이 필요 없는 까닭까지 차근차근 짚었다.

트랜스포머 디코더가 인코더를 읽는 법, 교차 어텐션 한 겹을 뜯어보다 영상 대표 이미지

핵심 메시지

  • 인코더-디코더 어텐션은 디코더의 두 번째 어텐션 층으로, 인코더가 계산해 둔 정보를 디코더 안으로 끌어들이는 통로다.
  • 이 층은 두 개의 행렬을 받는데, 쿼리는 디코더 쪽 벡터에서만 만들고 키와 값은 인코더 출력에서만 만든다는 점이 일반 셀프 어텐션과 결정적으로 다르다.
  • 입력 문장과 출력 문장의 길이가 달라도 문제가 없다. 출력 벡터의 개수는 언제나 쿼리 개수, 즉 디코더가 받은 토큰 수와 같기 때문이다.
  • 이 층에는 마스킹이 필요 없다. 각 출력이 자기 자신의 디코더 벡터와 인코더 출력에만 의존해서 미래 토큰을 볼 수 없는 구조이기 때문이다.
  • 디코더 블록은 두 개의 멀티헤드 어텐션과 피드포워드 층, 세 개의 잔차 연결과 정규화로 이뤄지며, 학습 때 모든 단어의 확률을 병렬로 계산할 수 있다는 점이 순환 신경망 대비 강점이다.

쉽게 이해하기

이 영상은 트랜스포머 아키텍처를 여러 편으로 나눠 설명해 온 강의 시리즈의 마지막 회차로, 디코더를 다루는 세 편 중 세 번째다. 주제는 인코더가 만든 정보를 디코더가 받아들이는 층, 즉 흔히 교차 어텐션(cross-attention)이라고도 불리는 인코더-디코더 어텐션이다. 이 층은 두 개의 행렬을 입력으로 받는다. 하나는 디코더의 앞선 층들이 넘겨준 행렬이고, 다른 하나는 인코더의 출력이다. 두 행렬의 열 벡터 개수는 같을 필요가 없다. 디코더 쪽 개수는 디코더에 들어온 토큰 수로 정해지고, 인코더 쪽 개수는 번역하려는 원문 길이로 정해지기 때문이다. 그럼에도 이 층의 출력은 디코더 쪽 입력과 똑같은 크기를 유지한다.

강의는 인코더에 세 단어가 들어가 세 개의 벡터가 나온 상황에서 디코더의 네 번째 단어 임베딩을 새로 계산하는 예로 원리를 보여 준다. 먼저 디코더의 네 번째 벡터에 가중치 행렬을 곱해 쿼리를 만들고, 인코더가 내놓은 세 벡터 각각에서 키와 값을 만든다. 이후는 평소와 같다. 키와 쿼리의 내적을 벡터 길이의 제곱근으로 나눈 뒤 소프트맥스를 거쳐 가중치를 얻고, 그 가중치로 값 벡터들의 가중 평균을 구한다.

여기서 강사가 강조하는 대목이 있다. 평균을 내는 대상인 값 벡터들이 전적으로 인코더 출력에서 나온다는 점이다. 디코더가 아무리 좋은 단어 임베딩을 갖고 있어도, 그 임베딩이 할 수 있는 일은 인코더 쪽 값들을 얼마만큼의 비중으로 섞을지 정하는 가중치에 영향을 주는 것뿐이다. 정보의 내용물 자체는 인코더에서 온다.

이 층에는 마스킹이 들어가지 않는다. 마스크가 없어도 i번째 출력이 i번째 디코더 벡터와 인코더 출력에만 의존하므로, 뒤에 올 입력을 미리 보는 일이 구조적으로 생기지 않기 때문이다. 여러 개의 헤드를 병렬로 돌린 뒤 결과를 이어 붙이고 출력 행렬을 곱하는 멀티헤드 구성 방식은 인코더와 동일하며, 쿼리는 디코더 행렬에서, 키와 값은 인코더 행렬에서 온다는 점만 다르다.

마지막으로 강의는 전체 그림을 정리한다. 디코더 블록 하나에는 두 개의 멀티헤드 어텐션 외에 피드포워드 층과 세 개의 잔차 연결 및 정규화가 들어 있고, 구조는 같지만 파라미터가 다른 블록이 여러 개 쌓여 디코더를 이룬다. 마지막 블록의 출력은 선형 층과 소프트맥스를 지나 출력 확률이 되며, 학습 시에는 모든 입력 단어에 대한 확률을 한꺼번에 계산할 수 있어 순환 신경망보다 병렬화와 속도 면에서 유리하다는 것이 시리즈의 마무리다.

주요 인사이트

  • 번역 모델에서 '원문을 참고한다'는 추상적인 말이 실제로는 키와 값을 인코더 출력에서 가져온다는 한 줄의 설계 결정으로 구현된다.
  • 출력 벡터 수가 쿼리 수와 같다는 사실은 입력 문장과 출력 문장의 길이가 달라도 되는 이유를 그대로 설명해 준다. 인코더 출력의 차원은 출력 크기에 영향을 주지 않는다.
  • 마스킹은 무조건 붙이는 장치가 아니다. 이 층에서는 의존 구조상 미래 정보 누출이 애초에 일어나지 않으므로 마스크가 불필요하다.
  • 디코더 임베딩의 역할이 '가중치에만 영향을 준다'는 정리는, 교차 어텐션에서 무엇이 정보의 원천이고 무엇이 선택 장치인지 명확히 구분해 준다.
  • 학습 시 모든 단어의 확률을 동시에 계산할 수 있다는 점이 트랜스포머가 순환 신경망을 대체한 실질적인 이유로 제시된다.

자주 묻는 질문

인코더-디코더 어텐션은 일반 셀프 어텐션과 무엇이 다른가요?

쿼리와 키·값의 출처가 갈립니다. 쿼리는 디코더 쪽 행렬에서만 만들고, 키와 값은 인코더 출력에서 만듭니다. 그 뒤 내적과 스케일링, 소프트맥스, 가중 평균을 거치는 계산 절차 자체는 일반 셀프 어텐션과 같습니다.

입력 문장과 출력 문장의 길이가 다르면 어떻게 되나요?

문제가 없습니다. 인코더가 내놓는 벡터 수는 원문 길이로, 디코더 쪽 벡터 수는 디코더에 들어온 토큰 수로 각각 정해지며, 이 층의 출력 개수는 항상 쿼리 개수와 같아 디코더 입력과 동일한 크기를 유지합니다.

이 층에는 왜 마스킹을 쓰지 않나요?

i번째 출력이 i번째 디코더 벡터와 인코더 출력에만 의존하기 때문입니다. 마스크를 씌우지 않아도 뒤에 오는 디코더 입력에는 의존하지 않으므로, 미래 정보를 미리 보는 문제가 생기지 않습니다.

원문과 출처

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

YouTube 원본 영상 보기 ↗

관련 AI 소식