- 앞서 살펴본 두 가지 방식은 모두 쿼리와 키의 관련도를 계산하지 않고, 모두 동등하게 반영한다거나
거리에 따라 차등을 둔다는 적당한 가정을 세워 맥락을 반영했다.
그 결과 원하던 형태의 결과를 얻지 못했고, 이렇게 규칙에 기반한 방법은 입력 데이터가
"나는 최근 파리 여행을 다녀왔다"가 아니라, "나는 최근 파리 박물관을 다녀왔다"로 바뀌더라도
동일한 계산을 하기 때문에 유연성이 떨어진다.
입력 데이터에 따라 다른 결과를 얻기 위해서는 관련도를 규칙이 아니라 데이터 자체에서 계산할 수 있어야 한다.
- 그렇다면 이제 '파리'와 ['나는', '최근', '파리', '여행을', '다녀왔다']라는 키 집합의 관계를 계산해보자.
한 가지 문제는 문자열은 그 자체로 계산할 수 없다는 점이다.
하지만 앞에서 토큰을 의미를 담아 숫자형 데이터로 변환하는 토큰 임베딩에 대해 다뤘다.
- 따라서 쿼리와 키 토큰을 토큰 임베딩으로 변환하면 계산이 가능하다.
쿼리를 '파리'의 임베딩으로, 키를 각 토큰의 임베딩으로 두고 각각의 관계를 계산해서 관련도를 계산한다.
이 때 토큰 자체가 아니라 임베딩임을 나타내기 위해 토큰을 사각형 박스로 감싼 형태로 표현했다.
벡터와 벡터를 곱해 관계를 계산하면 그 관련도에 따라 주변 맥락을 반영할 수 있고,
문자열이 일치하지 않더라도 유사한 의미의 키로 저장된 정보를 검색할 수 있다.
- 하지만 임베딩을 직접 활용해 관련도를 계산하는 방식을 두 가지 문제가 발생할 수 있다.
먼저, 같은 단어(ex) 쿼리의 '파리'와 키의 '파리')끼리는 임베딩이 동일하므로
관련도가 크게 계산되면서 주변 맥락을 충분히 반영하지 못하는 경우가 발생할 수 있다.
- 또한, 토큰의 의미가 유사하거나 반대되는 경우처럼 직접적인 관련성을 띨때는 잘 작동하지만,
문법에 의거해 토큰이 이어지는 경우처럼 간접적인 관련성은 반영되기 어려울 수 있다.
예를 들어 우리의 예시 문장에서 '나는' 토큰과 '최근'토큰은 '다녀왔다' 토큰에 누가, 언제를 나타내는
문법 관계로 연결되지만 토큰 자체로 봤을 때는 서로 유사하거나 반대되는 경우가 아니므로
직접 계산해서는 관련성을 찾기 어렵다.
- 트랜스포머 아키텍처에서는 이와 같은 문제를 피하기 위해 토큰 임베딩을 변환하는 가중치
Wq, Wk를 도입했다.
딥러닝에서는 어떤 기능을 잘하게 하고 싶을 때, 가중치를 도입하고 학습 단계에서 업데이트되게 한다.
트랜스포머에서는 Wq, Wk 가중치를 통해 토큰과 토큰 사이의 관계를 계산하는 능력을 학습시킨 것이다.
가중치를 통해 토큰 임베딩을 변환한 쿼리와 키를 각각 q, k 로 표현할 수 있다.
-지금까지 트랜스포머에서 쿼리와 키를 통해 관계를 계산하는 과정을 '검색'이라는 관점에서 이해해봤다.
트랜스포머에서는 값(value)도 토큰 임베딩을 가중치(Wv)를 통해 변환한다.
이렇게 세 가지 가중치를 통해 내부적으로 토큰과 토큰 사이의 관계를 계산해서 적절히 주변 맥락을 반영하는 방법을
학습한다.
- 쿼리와 키의 관계를 계산한 관련도 값과 토큰 임베딩을 값 가중치(Wv)로 변환한 값(value)을 가중합 하면
우리가 구하고자 했던 '파리'를 재해석한 결과를 얻을 수 있다.
'LLM을 활용한 실전 AI 애플리케이션 개발' 카테고리의 다른 글
[LLM을 활용한 실전 AI 애플리케이션 개발] 쿼리, 키, 값 이해하기 (0) | 2025.06.03 |
---|---|
[LLM을 활용한 실전 어플리케이션 개발] 어텐션 이해하기 (0) | 2025.06.03 |
[LLM을 활용한 실전 AI 애플리케이션 개발] 텍스트를 임베딩으로 변환하기 (0) | 2025.06.02 |
[LLM을 활용한 실전 AI 애플리케이션 개발] 트랜스포머 아키텍처란 (0) | 2025.05.15 |