4장. 트랜스포머
- 트랜스포머 모델의 유형
- 인코더-디코더 기반 구조 : 기계 번역
- 인코더 기반 구조 : 분류
- 디코더 기반 구조 : 채팅 LM
- 자기회귀 언어 모델 훈련에 많이 사용하는 디코더 기반 트랜스포머 중심으로 구성
- 트랜스포머의 혁신 : 셀프 어텐션, 위치 인코딩
- 셀프 어텐션 : 각 단어가 다른 모든 단어와 얼마나 관련이 있느지 평가
- 위치 인코딩 : 단어의 순서와 순차 패턴을 포착
- 모든 토큰을 동시에 처리 ↔ RNN
- 위치 인코딩으로 순차적인 맥락을 유지
- 디코더 기반 트랜스포머(decoder only transformer)
- 디코더 블록을 여러 개 쌓아올린 형태
- 블록 구조는 동일하지만 각 블록마다 파라미터는 다름
- 입력 시퀀스 + 타겟 시퀀스(= 입력 시퀀스 한 토큰씩 이동시킨)
- 디코더 블록
- 셀프 어텐션 층 + 위치별 MLP 층
- 연산
- 셀프 어텐션 층 = 1~L 모든 토큰에 대해 입력 임베딩 벡터(x)를 새로운 벡터(g)로 변환
- MLP 층 = 토큰별 g를 독립적으로 처리.. 뭘 처리??
셀프 어텐션
- 세 개의 파라미터 텐서 W_Q, W_K, W_V를 사용(Query, Key, Value)
- 6단계의 계산
- 1단계 : Q(쿼리 벡터) = 입력 X * W_Q, K(키 벡터) = 입력 X * W_K, V(값 벡터) = 입력 X * W_V
- 2단계 : 쿼리 벡터와 키 벡터를 dot product 해서 attention score 계산
- 3단계 : attention score 스케일 조정(키 벡터 차원의 제곱근으로 나누기)
- 4단계 : 코잘 마스크(causal amsk) 적용→ masked score
- 5단계 : 소프트맥스 → attention weight
- 6단계 : 값 벡터의 가중치 합을 구해 입력 임베딩 에 대한 출력 벡터 g를 계산
- q, k, v의 의미 : 각 입력 위치는 다른 위치에 대한 정보를 찾는다..
- q와 k 사이에서 점곱 계산 → 유사도 → 밀접한 연관
위치별 MLP
- W2(ReLU(W1*g_t + b_1)) + b2
로터리 위치 임베딩
- 트랜스포머는 모든 토큰 동시에 처리 → 로터리 위치 임베딩 없으면 위치 정보 무시됨
- RoPE : 쿼리 벡터와 키 벡터를 위치에 따라 회전하여 위치 정보를 인코딩
- 회전한 두 벡터 사이의 각도가 시퀀스에 있는 두 벡터 사이의 거리를 인코딩 한다..
- 아..내 머리도 회전한다..
멀티헤드 어텐션
- 멀티헤드 어텐션 → 셀프 어텐션의 고급 버전, 여러 정보에 동시에 초점을 맞춤, 구문 관계 포착, 의미 유사성 포착, 토큰 사이 장거리 의존성 감지, …
- 최신 모델은 최대 128개의 헤드를 사용하기도
- 각각의 헤드에 QKV 가중치
잔차 연결
- 그레이디언트 소실 문제 해소
- 출력 + 입력 해주기
RMS 정규화
- RMSNorm
- 훈련 안정화
- RMS 하고 스케일 인자(r) 곱하기
- r는 파라미터
키 값 캐싱
- KV Cache?
- 추론할 때 적용, 계산 단축
디코더 기반 트랜스포머 구현
- 코드 자체는 어렵지 않네. 근데 이론 이해가 어렵다.
