수달이네 기술 블로그

11. Attention 본문

AI공부/자연어처리

11. Attention

슬픈 수달이 2026. 3. 4. 22:01

어텐션 메커니즘

RNN(Recurrent Neural Network)나, LSTM(Long Short-Term Memory)등의 모델은 입력 순서를 순차적으로 처리하므로

  • 장기 의존성 문제(긴 문장에서 중요 정보를 잃어버리거나, 멀리 떨어진 단어의 관계 파악 난항) 존재

Attention 메커니즘은 입력 문장의 모든 단어를 한 번에 보고, 어떤 단어가 중요한지 가중치를 계산해 집중한다.

  • ex) 오늘 시험을 봤다 > ‘시험’이 가장 중요한 의미 > 해당 단어에 가장 높은 가중치

단어 임베딩, 문맥

단어의 의미는 문맥에 따라 상이하다.

  • ex) 사과 > apple or apology
  • 단어 임베딩 학습에서는 문맥적 공동 출현 정보를 가중치로써 반영하고,
  • 벡터 공간에서 단어를 서로 끌고 밀며 위치를 조정(단어간의 관계성)

  • ‘귤과 사과’라는 문맥일 때 과일 쪽으로 사과를 끌어옴
  • ‘어제일을 사과’라는 문맥 일 때 행위 쪽으로 사과를 끌어옴

임베딩

  • 위처럼 자주 등장하는 단어끼리 가까워지도록 단어 벡터 공간을 정렬하는 과정이다.

토큰화 및 패딩

자연어 처리에서 문장을 다루기 위한 전처리 과정

토큰화

문장을 특정 단위로 나누는 과정

  • ex) 커피 한잔 어때 > 커피, 한잔, 어때 등으로 나뉨(토큰화 방식에 따라 다름)
  • 이후 나눈 토큰을 임베딩 하여 숫자벡터에 표현시킨다.(보통 512차원)

패딩

문장의 길이가 제각각인데 모든 문장을 같은 길이로 맞춰주는 방식

  • ex) 위 그림처럼 패딩을 이용해 빈 공간을 넣어 크기를 맞춰준다.
  • 이로 인해 문장의 의미를 잃지 않으면서 효율적으로 학습 가능하다.

멀티헤드 어텐션(Multi-head Attention)

트랜스포머 모델에서 벡터를 보통 512차원으로 표현할 때 벡터를 한번에 다루지 않고, 8개의 64차원으로 벡터를 분할하여 각각 다른 시선으로 처리하는 것.

  • 이로 인해 다양한 관계를 파악 가능한데, 예를 들어 ‘커피 한잔 어때’ 단어라면,
  • 커피와 음료 간의 관계, 커피와 어때? 간의 제안 관계, 커피-한잔의 숫자 관계등 다양하게 볼 수 있다.

셀프 어텐션

입력 임베딩으로 단어 사이의 관계를 수치적으로 계산.

  • 각 단어의 임베딩 벡터를 복사해 두 행렬을 만들고, 한 행렬을 전치행렬로 만든다.
  • 이후 두 행렬을 곱하여 각 단어 간의 관계를 나타내는 유사도 행렬을 만든다. (Wn이 관련성)
  • 이걸로 집중할 단어를 결정하고, 문맥을 깊이 이해할 수 있다.

  • 위에서 얻은 유사도 행렬(4x4)과 각 단어의 임베딩을 담은 Value행렬을 곱해 새로운 표현을 만들 수 있다.
  • 그렇게 되면 문장에서 단어 하나의 가중치가 자신만 표현하는 게 아닌, 다른 단어와의 관련성 가중치까지 담은 벡터가 된다.
  • 이로 인해 각 단어의 의미를 문맥에 맞춰 풍부하게 반영하게 된다.

위와 같은 방식으로 트랜스포머는 단어 간의 관계를 이해한다.

헤드 결합

멀티 헤드 어텐션에서 나눠진 후 어텐션을 계산한 차원을 이어붙여 원래 행렬로 복원하여 최종 출력 X’를 만든다.

  • 이로 각 헤드가 같은 단어라도 서로 다른 문맥적 특징을 학습하여 풍부한 의미 표현을 형성

쿼리(Query), 키(Key), 값(Value)

쿼리: 질문을 던지는 역할

키: 단서를 제공하는 역할

값: 답변을 하는 역할

셀프 어텐션은

  • 한 문장의 각 단어 벡터를 기준으로 쿼리 행렬과 키 행렬의 내적을 계산하여 유사도 행렬을 생성
  • 이 유사도 행렬 값으로 Value 행렬을 가중합하여 최종 행렬을 만든다.
  • ex) 커피한잔 어때? 에서 커피라는 단어가 쿼리로 다른 단어를 바라보고, 키는 어떤 단어가 중요한지 판단하고, 단어끼리의 유사도 행렬에서 벨류 행렬로 조정하여 다른 단어를 파악하는 커피라는 단어가 만들어짐.

Attention Score(어텐션 스코어)

쿼리: 질문을 던지는 역할

키: 단서를 제공하는 역할

값: 답변을 하는 역할

셀프 어텐션은

  • 한 문장의 각 단어 벡터를 기준으로 쿼리 행렬과 키 행렬의 내적을 계산하여 유사도 행렬을 생성
  • 이 유사도 행렬 값으로 Value 행렬을 가중합하여 최종 행렬을 만든다.
  • ex) 커피한잔 어때? 에서 커피라는 단어가 쿼리로 다른 단어를 바라보고, 키는 어떤 단어가 중요한지 판단하고, 단어끼리의 유사도 행렬에서 벨류 행렬로 조정하여 다른 단어를 파악하는 커피라는 단어가 만들어짐.

Attention Score(어텐션 스코어)

쿼리: 질문을 던지는 역할

키: 단서를 제공하는 역할

값: 답변을 하는 역할

셀프 어텐션은

  • 한 문장의 각 단어 벡터를 기준으로 쿼리 행렬과 키 행렬의 내적을 계산하여 유사도 행렬을 생성
  • 이 유사도 행렬 값으로 Value 행렬을 가중합하여 최종 행렬을 만든다.
  • ex) 커피한잔 어때? 에서 커피라는 단어가 쿼리로 다른 단어를 바라보고, 키는 어떤 단어가 중요한지 판단하고, 단어끼리의 유사도 행렬에서 벨류 행렬로 조정하여 다른 단어를 파악하는 커피라는 단어가 만들어짐.

Attention Score(어텐션 스코어)

쿼리: 질문을 던지는 역할

키: 단서를 제공하는 역할

값: 답변을 하는 역할

셀프 어텐션은

  • 한 문장의 각 단어 벡터를 기준으로 쿼리 행렬과 키 행렬의 내적을 계산하여 유사도 행렬을 생성
  • 이 유사도 행렬 값으로 Value 행렬을 가중합하여 최종 행렬을 만든다.
  • ex) 커피한잔 어때? 에서 커피라는 단어가 쿼리로 다른 단어를 바라보고, 키는 어떤 단어가 중요한지 판단하고, 단어끼리의 유사도 행렬에서 벨류 행렬로 조정하여 다른 단어를 파악하는 커피라는 단어가 만들어짐.

Attention Score(어텐션 스코어)

Self-Attention에서 쿼리, 키의 내적으로 단어 간 유사도를 계산하지만 값이 너무 커지면 학습이 불안정해진다. → 이를 헤드 차원의 제곱근(dk)으로 나누어 스케일링 해준다.

$$ softmax\Big(\frac{QK^T}{\sqrt{d_k}}\Big)V $$

스케일링 후 문장의 길이를 맞추기 위해 패딩 토큰을 추가해준다(-∞ > 소프트맥스 후 0)

스케일링된 값을 소프트맥스 함수를 거쳐 0~1의 확률로 변환, 이후 각 행의 합이 1이 되도록 정규화

문장의 길이와 배치 처리

트랜스포머 모델에서 문장을 어텐션에 입력하려면 일정한 형식으로 변환해야 한다.

  • <sos>: start of sentence(문장의 시작)
  • <eos>: end of sentence(문장의 끝) 토큰을 붙인다.
  • pd: padding(짧은 문장에 붙임)
  • 위 과정으로 한번에 여러 문장을 처리하기 위해 배치(batch)단위로 문장을 묶어 입력해 빠르고 효율적으로 학습 가능하다.(GPU연산 효율 극대화)