attention이란
1) 어텐션이란
“지금 이 토큰이, 문장(또는 이미지) 안의 다른 위치들 중 ‘누구를 얼마나 참고할지’를 정해서, 참고한 만큼 정보를 섞어 새 표현을 만드는 방식”이다.
핵심은 두 가지이다:
- 참고 비율(가중치)을 계산하고
- 그 비율대로 정보를 섞어서 업데이트한다
2) 왜 이런 게 필요한가?
언어를 이해할 때 우리는 항상 “참조”를 한다.
- “철수가 영희에게 사과를 줬다. 그녀는 기뻤다.”
→ ‘그녀’는 영희를 봐야 함. - “나는 어제 산 책을 오늘 읽었다.”
→ “어제”는 시간 정보, “책”은 대상 정보. 어디를 봐야 할지가 다름. - “not … because …” 같은 구조에서는 멀리 떨어진 단어끼리도 강하게 연결됨.
어텐션은 이 “참조”를 모든 위치 쌍에 대해 동시에 가능하게 만든다.
3) Self-Attention은 “토큰들이 서로 대화하는 회의”
문장을 토큰(단어 조각)들의 모임이라고 해보자.
Self-Attention은 매 레이어마다 이런 회의를 연다고 보면 된다.
- 각 토큰이 “나 지금 뭐가 필요해”라고 말하고(Q)
- 다른 토큰들은 “나 이런 정보 가지고 있어”라고 명함을 내고(K)
- 실제로 전달되는 내용은 “내가 가진 정보 본체”로 전달된다(V)
그리고 각 토큰은 회의에서
- 누구 말이 중요했는지(가중치) 정하고
- 그 사람들 말(정보)을 적당히 섞어서
- 자기 상태(표현)를 업데이트한다.
즉, 토큰 표현이 “혼자” 의미를 가지는 게 아니라, 맥락 속에서 다시 재작성되는 과정이 Self-Attention.
4) Q, K, V를 “도서관”으로 비유해본다
어텐션을 도서관 검색으로 보면:
- Query(Q): 내가 찾는 질문(예: “it가 누구지?”)
- Key(K): 각 책(토큰)의 색인/태그(예: “animal”, “street”, “tired”)
- Value(V): 책 내용(실제 정보)
과정은:
- 내가 질문(Q)을 던짐
- 모든 책의 색인(K)과 “얼마나 맞는지”를 점수로 매김
- 점수를 확률처럼 바꿔서(=중요도 비율)
- 그 비율만큼 책 내용(V)을 섞어서 “요약본”을 만든다
- 그 요약본으로 내 이해(현재 토큰 표현)를 업데이트
중요 포인트:
K는 “찾기 위한 기준”, V는 “가져올 실제 내용”이라서 분리된다.
이게 어텐션이 유연해지는 핵심이다.
(같은 토큰이라도 “찾는 기준”과 “전달하는 정보”는 다르게 학습될 수 있음)
5) 어텐션 가중치(누구를 얼마나 볼지)는 “소프트한 집중”
어텐션은 보통 “딱 한 곳만 본다”가 아니라
- 대부분은 조금씩 보되
- 중요한 몇 곳에 더 많이 집중한다
그래서 “하드한 선택”이 아니라 가중치로 섞는 소프트한 선택이 된다.
이게 좋은 이유:
- 미분 가능(학습이 쉬움)
- 애매한 경우도 분산해서 참고 가능
- 여러 단서들을 동시에 조합 가능
6) Self-Attention이 토큰을 어떻게 “맥락화(contextualize)”하나
단어는 맥락에 따라 의미가 바뀌나?
- “bank” = 강둑 / 은행
- “apple” = 과일 / 회사
Self-Attention은 “bank” 토큰이 주변 토큰(“money”, “river” 등)을 참고해서
- 강둑 의미 쪽 특징을 더 섞거나
- 은행 의미 쪽 특징을 더 섞어서
같은 표면 형태라도, 문맥에 맞는 표현으로 ‘재인코딩’해버린다.
즉, “임베딩(단어 고정 벡터)”이 아니라
레이어를 거치며 문맥 기반 표현으로 나타내는것.
7) Multi-Head는 “한 사람이 아니라 여러 전문가가 동시에 읽는 것”
사람이 글을 읽을 때도:
- 문법 관계를 보는 시선
- 의미 유사성을 보는 시선
- 지시어/대명사 연결을 보는 시선
- 문장 구조를 보는 시선
이런 게 동시에 돌아가.
멀티헤드는 그걸 흉내를 낸다.
- 헤드 1: 주어-동사 같은 문법 연결 잘 보는 “문법 전문가”
- 헤드 2: 같은 주제 단어끼리 묶는 “의미 전문가”
- 헤드 3: 대명사/지시어 연결 보는 “지시 관계 전문가”
- …
각 헤드는 “누구를 볼지”를 서로 다르게 학습하고,
마지막에 결과를 합쳐서 더 풍부한 업데이트를 만든다.
핵심 효과:
한 가지 기준으로만 섞으면 놓치는 관계가 생기는데,
여러 기준을 병렬로 돌려서 관계를 분업한다.
8) 마스크(mask)는 “규칙상 보면 안 되는 건 가림막”
어텐션은 기본적으로 “모든 위치를 볼 수” 있다.
하지만 상황에 따라 규칙이 필요하다.
(1) 패딩 마스크
배치 때문에 들어간 빈 토큰(패딩)은 의미가 없으니
→ 절대 참고하지 않게 가린다.
(2) 미래 가리기(캐주얼 마스크)
언어 모델은 “다음 토큰”을 예측해야 하는데
미래 단어를 보면 정답을 미리 본 것이다. 따라서...
→ i번째 토큰이 i+1, i+2 …를 보지 못하게 막는다.
이게 GPT류에서 “자기회귀(autoreg)”가 성립하는 장치이다.
9) 포지션(순서) 정보가 왜 필요한가?
Self-Attention만 있으면 토큰들은 “순서 없는 모음”처럼 보일 수 있다.
- “개가 사람을 물었다” vs “사람이 개를 물었다”
토큰 구성은 거의 같은데 의미는 완전히 다르다.
그래서 모델은 토큰에 위치 정보를 같이 줘서:
- “이 단어는 3번째다”
- “저 단어는 7번째다”
- “둘 사이는 4칸 떨어져 있다”
같은 정보를 표현에 포함시킨다.
그래야 어텐션이
- “가까운 단어는 더 자주 함께 묶인다”
- “특정 거리 패턴(예: 수식어-피수식어)을 학습한다”
같은 걸 할 수 있다.
10) 레이어를 여러 번 쌓는 이유: “한 번의 회의로는 부족”
한 층의 어텐션은 대략 이런 일을 한다.
- “현재 기준으로 중요한 곳에서 정보 가져온다”
그런데 진짜 언어 이해는 단계가 필요하다.
- 1층: 대충 의미 비슷한 단어 연결
- 2층: 구문 구조, 역할(주어/목적어) 조합
- 3층: 장거리 의존, 지시어 해결
- 4층: 문장 전체 의미 요약…
그래서 어텐션 블록을 층층이 쌓아
단순한 연결 → 복합적인 의미 구조로 올라가게 만드는 것.
11) “어텐션은 왜 잘 학습되나?” (개념적 학습 직관)
모델은 학습 중에 계속 이런 피드백을 받는다
- “정답을 맞추려면, 지금 이 토큰은 저 토큰 정보를 더 봐야 했네”
- “이 헤드는 문법 연결을 잡는 게 유리하네”
- “이 상황에선 가까운 토큰보다 멀리 있는 원인절을 봐야 했네”
그 결과:
- Q/K 변환이 “어떤 걸 관련성으로 볼지”를 배우고
- V 변환이 “가져올 유용한 내용이 뭔지”를 배우면서
- 가중치가 점점 ‘그럴듯한 참조’로 정교해진다
즉, 어텐션 자체를 사람이 규칙으로 지정하는 게 아니라
정답을 맞추는 과정에서 관련성 기준이 자동으로 발달하는 구조이다.
12) 마지막으로: 어텐션이 “그냥 참고표”가 아니라 “새 표현 생성기”라는 점
많이들 “어텐션 = 어디를 봤는지 표시하는 히트맵” 정도로 생각하는데,
더 중요한 건 아래이다
어텐션은 “보는 것”이 아니라
보고 섞어서 ‘새로운 표현’을 만든다.
즉, 토큰 벡터 자체가 바뀌고,
그 바뀐 벡터가 다음 레이어에서 또 다른 관계를 만들며,
결국 모델의 추론 능력이 생긴다.