topic난이도 · 약 30

Self-Attention 직접 구현

6단계로 셀프 어텐션을 처음부터 구현하고 행렬 크기 변화를 추적한다.

#셀프 어텐션#NumPy#구현#차원 추적
왜 배우는가

'나는 고양이를 좋아한다' — 3개 토큰이 서로에게 얼마나 주목하는지 직접 계산해본다. 행렬 곱셈이 이렇게 많은데 차원이 안 꼬일까?

6단계로 어텐션을 처음부터 구현합니다

셀�� 어텐션 구현 6단계: Step 0: 입력 임베딩 (3 토큰 × 4 차원) Step 1: 가중치 행렬 W_Q, W_K, W_V 생성 Step 2: Q, K, V 계산 (행렬 곱) Step 3: 어텐션 스코어 = Q × Kᵀ Step 4: 스케일링 (÷ √d_k) Step 5: 소프트맥스 → 확률 가중치 Step 6: 가중 합 = Weights × V

셀프 어텐션 — 각 토큰이 다른 모든 토큰에 얼마나 주목하는지 계산
멀티헤드 어텐션 — 여러 관점(문법·의미·위치)으로 동시에 집중

'나는 고양이를 좋아한다'로 셀프 어텐션을 계산합니다

셀프 어텐션 6단계 전체 구현: 입력 → Q,K,V → 스코어 → 스케일 → Softmax → 가중합.

구현 6단계설명
Step 0입력 임베딩 — (토큰 수 × 차원) 행렬 준비
Step 1~2W_Q, W_K, W_V 생성 → 행렬 곱으로 Q, K, V 계산
Step 3어텐션 스코어 = Q × Kᵀ → (토큰 수 × 토큰 수)
Step 4÷ √d_k 스케일링으로 값 안정화
Step 5Softmax → 각 행의 합 = 1인 확률 가중치
Step 6가중 합 = Weights × V → 문맥이 섞인 출력
차원 추적크기
Q, K, V(토큰 수, d_k) — 입력과 동일한 크기
스코어 행렬(토큰 수, 토큰 수) — 모든 쌍의 유사도
최종 출력(토큰 수, d_k) — 문맥 정보가 반영된 벡터

Softmax 적용 후 각 행의 합은 항상 1 — 총 100%의 주의를 배분한다

실기 드릴 5문항
edit실기 드릴 · 단답형

입력이 (3, 4)이고 W_Q가 (4, 4)일 때 Q = X × W_Q의 행렬 크기는?

check_circle실기 드릴 · OX

어텐션 가중치 행렬의 각 행의 합은 항상 1이다 (소프트맥스를 적용했으므로).

edit실기 드릴 · 단답형

3개 토큰, 4차원 임베딩일 때 어텐션 스코어 행렬(Q × Kᵀ)의 크기는?

edit실기 드릴 · 단답형

셀프 어텐션 코드의 빈칸: scores = Q @ K.T / np.sqrt(___)

check_circle실기 드릴 · OX

셀프 어텐션에서 마스킹(masking)은 미래 토큰 정보의 유출을 방지하기 위해 사용한다.