임베딩은 함수가 아닙니다
토크나이저 이후의 첫 번째 레이어
모델에 정수 ID를 제공하는 토크나이저는: [256, 1842, 7301, ...]입니다. 전사기는 각 ID를 d_model개의 실수로 변환하는 첫 번째 일을 수행합니다. 해당 벡터는 d_model차원 공간에 존재합니다(ANDREA-120M의 경우 768차원).
임베딩 레이어는 조회 테이블이며, 함수가 아닙니다. 거대한 행렬을 상상해 보세요:
shape: (V, d_model)
row 0: [e_0_0, e_0_1, ..., e_0_767]
row 1: [e_1_0, e_1_1, ..., e_1_767]
...
row 8448: [e_8448_0, e_8448_1, ..., e_8448_767]
토큰 ID i는 행 i를 선택합니다. 직접 배열 액세스입니다. 어떠한 산술도, 활성화도 없습니다. 단순히 인덱스입니다.
학습 가능한 실수
그 테이블의 각 행은 일반적으로 d_model의 제곱근에 비례하는 정규 분포에서 작은 난수로 시작합니다. 배치에서 해당 토큰 ID가 나타나면 역전파가 각 행을 업데이트합니다. 훈련 후, 유사한 토큰 (cat, dog, pet)는 유사한 벡터로 끝나고, 관련이 없는 토큰 (cat, Tuesday, xylophone)는 벡터 공간에서 멀리 떨어져 있습니다.
ANDREA-120M 토큰 임베딩 비용
| Quantity | Value |
|---|---|
| V | 8,449 |
| d_model | 768 |
| Parameters | 6,488,832 |
ANDREA-120M의 전체 6.5만 개의 매개변수 중 약 5.4%가 토큰 임베딩 테이블에 있습니다. 각 어휘 슬롯은 이러한 768개의 실수를 얻습니다.
임베딩 테이블 크기 계산
Dot Products Measure Similarity
벡터는 화살표입니다
768차원 벡터는 인간이 그림으로 표현할 수 없는 공간에 존재하지만, 같은 대수학은 모든 차원에서 작동합니다. 트랜스포머에서 중요한 두 가지 연산이 있습니다:
모듈러 (화살표의 길이):
||v|| = sqrt(v_0² + v_1² + ... + v_767²)
점곱 (두 화살표의 대응):
u · v = u_0 × v_0 + u_1 × v_1 + ... + u_767 × v_767
점곱이 알려주는 것
모든 차원에서 적용되는 두 가지 사실:
- u · v = ||u|| × ||v|| × cos(theta), 여기서 theta는 두 화살표 사이의 각도입니다.
- 같은 방향으로 가는 벡터는 큰 긍정적인 점곱을 제공합니다.
- 반대 방향으로 가는 벡터는 큰 부정적인 점곱을 제공합니다.
- 서로 직각인 벡터는 점곱이 0을 제공합니다.
점곱은 비정규 유사도를 제공합니다. cat과 dog의 훈련된 토큰 임베딩 두 개는 두 가지 모두 애완동물 관련 컨텍스트를 예측하는 데 사용되었기 때문에 높은 점곱을 얻게 됩니다. cat과 Tuesday는 서로 직교하는 방향으로 끝나게 되어 거의 서로 직각이 됩니다.
트랜스포머가 왜 관심을 가질까
활동 5 (grow_a_language_model_attention)은 점곱으로 주의를 집중합니다: 쿼리 벡터가 키 벡터와 점곱하면 과거 토큰이 다음 토큰을 예측하는 데 중요하다는 점을 말해주는 점수들이 나옵니다. 임베딩과 점곱은 트랜스포머 내에서 모든 상호 작용을 담고 있습니다.
유사도 예측
ANDREA가 학습된 위치 임베딩을 사용합니다
문제
토큰 임베딩은 모델이 특정 위치에 어떤 단어가 있는지 알려줍니다. 그러나 단어가 어디에 있는지에 대한 정보를 제공하지 않습니다. 위치 정보가 없으면 전자식 모델은 the cat sat on a mat과 mat a on sat cat the를 동일한 토큰 세트로 취급하고, 순서 신호가 없습니다.
전체론자에서 세 가지 해결책이 있습니다:
진자법(Sinusoidal, Vaswani 2017). 사인과 코사인 함수에 기반한 고정된 수학적 공식입니다. 위치 0은 특정 768차원 벡터를 받고, 위치 1은 다른 벡터를 받습니다. formula로 일반화됩니다.
RoPE(회전 위치 임베딩). 위치에 따라 쿼리 및 키 벡터를 회전합니다. LLaMA, Qwen에서 사용되며, 추가적인 매개변수가 없습니다. 회전은 주의에 내장되어 있습니다.
학습. 컨텍스트 길이 T와 d_model로 구성된 별도의 임베딩 테이블입니다. 각 행은 백프로파게이션을 통해 학습되며, 토큰 임베딩과 동일하게 학습됩니다.
ANDREA의 선택: 학습
ANDREA는 microGPT에서 유래하고, microGPT는 nanoGPT에서, nanoGPT는 GPT-2에서 학습된 위치 접근 방식을 상속받았습니다. 다음은 그 이유입니다:
- 단순함. 특별한 수학이 전류에 없습니다. 위치 테이블은 토큰 테이블과 동일한 구조입니다.
- custom CUDA와 호환성. ANDREA의 microgpt_cuda.cu 엔진은 두 개의 임베딩 조회를 동일하게 처리합니다. sin/cos 커널이 필요하지 않습니다.
- 고정된 컨텍스트에 충분합니다. ANDREA는 T를 1024으로 고정합니다. 고정된 길이 시퀀스에 대해 학습된 테이블이 충분합니다.
ANDREA-120M 위치 임베딩 비용
| 수량 | 값 |
|---|---|
| T (context) | 1,024 |
| d_model | 768 |
| 매개변수 | 786,432 |
ANDREA-120M에 총 0.79M개의 위치 임베딩 매개변수가 있습니다. 토큰 임베딩과 결합하면 6.49M + 0.79M = 7.27M개의 임베딩 매개변수 전체입니다.
어떻게 결합하는가
입력 시퀀스의 각 위치 t에서:
x_t = token_embedding[token_id_t] + position_embedding[t]
두 768 벡터, 원소별 합산. 결과 x_t는 첫 번째 트랜스포머 블록으로 흐른다. 모델은 그들을 다시 분리하지 않음; 결합 신호를 사용하는 것을 배운다.
학습된 대신 수성 위치 인코딩
인코딩 파라미터 위치
ANDREA-120M 전체 인코딩 레이어
| 구성 요소 | 모양 | 파라미터 |
|---|---|---|
| 토큰 인코딩 테이블 | 8,449 × 768 | 6,488,832 |
| 위치 인코딩 테이블 | 1,024 × 768 | 786,432 |
| 합계 | 7,275,264 |
약 7.3M 파라미터. ANDREA-120M의 전체 파라미터 수: ~120M. 인코딩 레이어만: 6%. 나머지 94%는 트랜스포머 블록(활동 5-7에서 다루는 attention + MLP)에서 살아있다.
묶이지 않은 vs 묶인 인코딩
많은 트랜스포머 설계(포함하여 GPT-2)는 토큰 인코딩을 최종 출력 프로젝션에 묶어: 입력 및 출력(로그이티드 오버 바다코디)에서 동일한 V × d_model 행렬을 사용합니다. 묶음으로 인해 V × d_model 파라미터가 절약되고 종종 품질이 향상됩니다.
ANDREA는 묶이지 않은 인코딩을 사용합니다: 입력 인코딩 및 출력 프로젝션은 별개의 행렬로 학습합니다. 활동 7(grow_a_language_model_transformer_block)에서는 최종 레이어를 다룹니다.
지금까지의 전방향 패스
입력: 토큰 ID [256, 1842, 7301, ...] (1024개가 있다). 각 ID는 768 벡터를 검색합니다. 각 위치는 768 벡터를 검색합니다. 원소별로 합산합니다. 결과: 토큰-+-位置 벡터의 (1024, 768) 행렬 x. x는 첫 번째 트랜스포머 블록으로 흐르며
Activity 5 (grow_a_language_model_attention)는 블록 1이 수행하는 것과 동일합니다: 스케일된 도트 곱 어텐션, 인과 마스크 및 소프트맥스 사용.