Transformer Embedding
언어 모델의 입력은 처음부터 벡터가 아니다. tokenizer를 거치면 문장은 token id의 목록이 된다.
"I like cats"
-> [40, 588, 11875]
모델은 이 정수 id를 바로 계산하지 않는다. 먼저 embedding table에서 각 id에 해당하는 벡터를 꺼낸다.
token ids: [B, T]
embedding table: [V, D]
output embeddings: [B, T, D]
여기서:
B = batch size
T = sequence length
V = vocab size
D = model dimension
Embedding 이후 Transformer가 다루는 기본 단위는 token id가 아니라 각 token 위치의 D차원 벡터다.
각 token position
-> D차원 벡터 하나
위치 정보
문장은 순서가 중요하다. 하지만 embedding table에서 token id만 꺼내면 “cat sat”과 “sat cat”의 token 벡터 집합은 순서만 다를 뿐, 위치의 의미가 따로 들어 있지 않다.
그래서 Transformer는 position 정보를 추가한다.
token embedding + position information
-> Transformer input
구현마다 absolute positional embedding, RoPE 같은 방식이 다르지만, 큰 그림은 같다. 모델이 token의 내용뿐 아니라 어느 위치에 있는 token인지도 알 수 있어야 한다.
확인
- token id 텐서
[B, T]는 embedding 후 어떤 모양이 되는가? D는 무엇을 뜻하는가?- Transformer에 position 정보가 필요한 이유는 무엇인가?