| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 기초
- Python
- ASR
- 에이전트
- 객체지향
- CLIP
- 데이터 시각화
- RNN
- python기초
- 머신러닝
- 소프트웨어 개발
- CNN
- 랭그래프
- 힙정렬
- 캐글
- 자연어처리
- UMAP
- LangGraph
- SQL
- 트랜스포머
- RDBMS
- Transformer
- 딥러닝
- dementional reduction
- 생성형 인공지능
- 정보처리기사
- python 기초
- 데이터엔지니어
- 알고리즘
- TTS
- Today
- Total
수달이네 기술 블로그
11. Attention 본문
어텐션 메커니즘
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연산 효율 극대화)
'AI공부 > 자연어처리' 카테고리의 다른 글
| 13. 트랜스포머(포지셔널 인코딩, 피드포워드 신경망, 잔차연결...) (0) | 2026.03.06 |
|---|---|
| 12. Attention 연산 구현 (0) | 2026.03.05 |
| 10. Seq2Seq구현 (0) | 2026.03.03 |
| 9. Seq2Seq(Sequence-to-Sequence) (0) | 2026.03.02 |
| 8. GRU(Gated Recurrent Unit) (0) | 2026.02.28 |