NVIDIA NCA-GENL 시험 노트개념 정리17 MIN
어텐션과 트랜스포머 구조
RNN·LSTM이 막힌 자리에서 시작해 Query·Key·Value로 계산하는 셀프 어텐션, 멀티헤드와 위치 인코딩, 잔차 연결과 층 정규화까지 트랜스포머 블록 한 장을 뜯어봅니다.
지금 쓰는 LLM은 거의 전부 트랜스포머입니다. NCA-GENL이 이 구조를 묻는 방식은 「어텐션 수식을 유도하라」가 아니라 어느 부품이 무엇을 해결하려고 들어갔는가입니다. 그래서 이 노트는 순서를 그렇게 잡습니다 — 먼저 RNN이 막힌 자리를 보고, 그 자리를 메우는 부품을 하나씩 얹어 블록 한 장을 완성합니다.
RNN이 막힌 자리
순차 계산과 병렬화
RNN(순환 신경망)은 토큰을 하나씩 읽으며 상태를 갱신하는 구조입니다. 번째 계산이 번째 결과를 필요로 하므로 문장 길이만큼 순차로 돌아야 합니다. GPU는 수천 개 연산을 동시에 하는 장치인데 순차 의존이 그 힘을 못 쓰게 막습니다.
트랜스포머가 이긴 결정적 이유가 여기 있습니다. 어텐션은 모든 위치가 모든 위치를 한 번에 보므로 문장 전체를 한 번의 행렬 곱으로 처리합니다. 학습을 GPU 수천 장으로 키울 수 있게 된 것이 이 성질 덕분입니다.
장기 의존성과 LSTM
두 번째 한계는 거리입니다. RNN은 정보를 상태 벡터 하나에 눌러 담아 옮기므로, 문장이 길어지면 앞쪽 내용이 뒤에 닿기 전에 희석됩니다. 역전파 쪽에서 보면 같은 행렬을 시간 단계마다 곱하는 탓에 기울기가 소실되거나 폭발하는 문제이기도 합니다.
LSTM과 GRU는 정보를 얼마나 흘리고 얼마나 지울지 정하는 게이트를 두어 이 문제를 완화한 구조입니다. 완화지 해결은 아니었습니다 — 순차 계산이라는 병목은 그대로였고, 아주 먼 거리의 의존은 여전히 약했습니다. 어텐션은 두 위치를 한 걸음으로 잇습니다.
셀프 어텐션의 계산
Query·Key·Value 세 벡터
셀프 어텐션(self-attention)은 한 문장 안의 각 토큰이 같은 문장의 다른 토큰들을 얼마나 참고할지 정하고, 그 비율로 정보를 섞는 계산입니다.
토큰 임베딩 하나에서 서로 다른 가중치 행렬로 벡터 셋을 만듭니다. Query는 「내가 찾는 것」, Key는 「내가 가진 것의 이름표」, Value는 「실제로 건네줄 내용」입니다. 도서관에 비유하면 검색어가 Query, 책등의 제목이 Key, 책 내용이 Value입니다.
「그 동물은 길을 건너지 않았다, 너무 지쳤기 때문이다」에서 「지쳤다」의 Query가 「동물」의 Key와 높은 점수를 내면, 「지쳤다」의 표현에 「동물」의 Value가 많이 섞입니다. 대명사와 지시어를 푸는 일이 이 계산 안에서 일어납니다.
점수·스케일링·소프트맥스
계산은 네 걸음입니다.
- 점수: Query와 Key를 내적해 두 토큰이 얼마나 맞는지 잽니다.
- 스케일링: 로 나눕니다. 차원이 커지면 내적 값의 분산도 커지는데, 그대로 소프트맥스에 넣으면 한 자리에 확률이 몰려 기울기가 거의 0이 됩니다. 이고 이면 로 눌러 넣습니다.
- 소프트맥스: 점수를 합이 1인 가중치로 바꿉니다.
- 가중합: 그 가중치로 Value를 섞습니다.
여기서 비용이 나옵니다. 점수 행렬이 (길이 × 길이) 라 시퀀스가 이면 계산과 메모리가 로 늡니다. 컨텍스트 길이를 늘리는 일이 비싼 이유이고, FlashAttention 같은 기법이 이 행렬을 통째로 저장하지 않는 방식으로 그 벽을 미룹니다.
멀티헤드 어텐션
어텐션을 한 벌만 쓰면 한 가지 관계만 봅니다. 멀티헤드 어텐션은 같은 계산을 여러 벌로 나눠 각각 다른 관계를 보게 하고 결과를 이어 붙입니다 — 한 헤드는 문법적 주어를, 다른 헤드는 앞뒤 인접 관계를 보는 식입니다.
차원을 늘리는 것이 아니라 나누는 것이 핵심입니다. 에 헤드가 8개면 헤드마다 차원을 맡습니다. 전체 계산량은 단일 헤드와 거의 같고, 보는 관점만 여덟 갈래가 됩니다.
순서를 넣는 위치 인코딩
어텐션이 순서를 모르는 이유
어텐션은 모든 위치를 동시에 보는 대신 순서 정보를 전혀 갖지 않습니다. 토큰을 뒤섞어 넣어도 각 토큰이 받는 값은 그대로입니다. 「개가 사람을 물었다」와 「사람이 개를 물었다」를 구분하지 못한다는 뜻이라 그대로 두면 언어 모델이 될 수 없습니다.
그래서 위치를 나타내는 신호를 입력에 더해 넣습니다. 이것이 위치 인코딩(positional encoding)입니다.
절대 위치와 회전 위치
원 논문은 위치마다 다른 주기의 사인·코사인 값을 만들어 임베딩에 더했습니다. 학습 없이 계산되고, 학습 때 본 적 없는 길이에도 값이 정의된다는 장점이 있습니다. 이후 위치 임베딩을 아예 학습시키는 방식도 널리 쓰였습니다.
지금 LLM이 많이 쓰는 것은 RoPE(회전 위치 인코딩)입니다. 값을 더하는 대신 Query와 Key 벡터를 위치에 따라 회전시켜, 두 토큰의 내적에 상대 거리가 자연스럽게 반영되게 합니다. 컨텍스트 길이를 나중에 늘리기 쉬운 성질이 있어 긴 컨텍스트 모델이 이 방식을 택합니다.
블록의 뼈대
어텐션만으로 블록이 되지는 않습니다. 어텐션은 토큰들 사이에서 정보를 섞는 부품이고, 그 뒤에는 섞어 온 정보를 토큰 하나 안에서 가공하는 피드포워드 신경망이 붙습니다. 완전연결층 둘 사이에 비선형 활성화를 끼운 단순한 구조인데, 가운데 차원을 의 네 배쯤으로 넓혔다가 다시 줄이는 것이 관례입니다. 파라미터로 세면 블록의 3분의 2가량이 이쪽에 있어, 「지식이 저장되는 자리」로 이야기되는 부품이기도 합니다.
그리고 두 부품 각각을 감싸는 배선이 둘 더 있습니다. 이 넷이 블록 한 장의 전부입니다.
잔차 연결
잔차 연결(residual connection)은 부품의 출력에 그 부품의 입력을 그대로 더하는 배선입니다. 수식으로 이고, 어텐션 뒤와 피드포워드 뒤에 각각 하나씩 붙습니다.
효과는 둘입니다. 역전파에서 기울기가 부품을 우회해 곧장 앞쪽 층으로 흐를 통로가 생겨 기울기 소실이 크게 줄고, 부품은 값을 처음부터 만들 필요 없이 「입력에서 얼마나 바꿀지」만 배우면 됩니다. 수십~수백 층을 쌓을 수 있는 것이 이 배선 덕분입니다.
층 정규화
층 정규화(layer normalization)는 한 토큰의 벡터 안에서 평균과 분산을 맞춰 값의 크기를 고르게 만드는 연산입니다. 배치 정규화가 배치 안의 여러 샘플을 가로질러 통계를 내는 것과 달리, 층 정규화는 샘플 하나 안에서 계산합니다. 그래서 배치 크기에 영향을 받지 않고 문장 길이가 제각각이어도 잘 동작해 트랜스포머의 기본이 되었습니다.
붙는 자리가 두 갈래입니다. 원 논문은 잔차를 더한 뒤에 정규화했고(post-LN), 지금 큰 모델은 대개 부품에 들어가기 전에 정규화합니다(pre-LN). pre-LN 쪽이 깊게 쌓아도 학습이 안정적이어서입니다.
인코더·디코더 배치
블록 한 장은 어텐션 → 잔차·정규화 → 피드포워드 → 잔차·정규화입니다. 이 블록을 어떻게 배치하느냐로 계열이 갈립니다.
| 배치 | 어텐션의 시야 | 잘 맞는 일 |
|---|---|---|
| 인코더 전용 | 앞뒤를 모두 본다 | 문장 이해, 분류, 임베딩 |
| 디코더 전용 | 자기보다 앞만 본다 | 텍스트 생성 |
| 인코더-디코더 | 인코더가 입력을 읽고 디코더가 참조 | 번역, 요약 |
디코더가 뒤를 못 보게 막는 장치를 인과 마스크(causal mask)라 하고, 아직 안 나온 토큰의 점수를 소프트맥스 전에 로 만들어 확률을 0으로 죽입니다. 마스크가 없으면 모델이 정답을 미리 보고 학습하게 되어, 학습 손실은 낮은데 생성은 못 하는 모델이 나옵니다. 어느 계열이 어느 일에 맞는지는 05편에서 사전학습 방식과 함께 다시 봅니다.
연습 문제
Query와 Key의 내적이 이고 일 때, 소프트맥스에 들어가는 스케일링된 점수는?
①
②
③
④②. 이므로 입니다. 차원의 제곱근으로 나누어 소프트맥스가 한쪽으로 쏠리는 것을 막습니다.이고 헤드가 8개인 멀티헤드 어텐션에서 헤드 하나가 맡는 차원은?
①
②
③
④②. 차원을 헤드 수로 나눠 씁니다. 이고, 결과를 이어 붙이면 다시 512가 됩니다.시퀀스 길이를 512에서 1,024로 늘렸습니다. 셀프 어텐션 점수 행렬의 원소 수는 몇 배가 되나?
① 그대로
② 2배
③ 4배
④ 8배③. 점수 행렬이 (길이 × 길이)이므로 입니다. 컨텍스트를 늘리는 비용이 제곱으로 붙는 이유입니다.트랜스포머에서 위치 인코딩을 빼면 생기는 일은?
① 어텐션 점수가 항상 0이 된다
② 토큰 순서를 바꿔도 같은 표현이 나온다
③ 소프트맥스의 합이 1이 되지 않는다
④ 잔차 연결이 동작하지 않는다②. 셀프 어텐션 자체는 순서를 보지 않습니다. 위치 신호가 없으면 「개가 사람을 물었다」와 「사람이 개를 물었다」가 구분되지 않습니다.텍스트를 생성하는 디코더에서 인과 마스크가 하는 일은?
① 패딩 토큰을 무시한다
② 현재 위치보다 뒤의 토큰을 못 보게 막는다
③ 어텐션 헤드 수를 줄인다
④ 값의 분산을 1로 맞춘다②. 뒤 토큰의 점수를 소프트맥스 전에 로 만들어 확률을 0으로 죽입니다. 없으면 정답을 미리 보고 학습하게 됩니다.트랜스포머의 잔차 연결이 주는 이득으로 알맞은 것은?
① 파라미터 수를 줄인다
② 기울기가 층을 우회해 흘러 깊은 학습이 가능해진다
③ 어텐션의 계산 복잡도를 으로 낮춘다
④ 토큰의 순서 정보를 넣어 준다②. 배선이 기울기의 지름길이 됩니다. ③은 어텐션 근사 기법의 몫이고 ④는 위치 인코딩의 일입니다.문서를 「긍정·부정」으로 분류하는 모델의 인코더를 고르려 합니다. 문장 전체를 앞뒤로 함께 보는 것이 유리할 때 알맞은 배치는?
① 디코더 전용
② 인코더 전용
③ 인과 마스크를 씌운 디코더
④ 위치 인코딩을 뺀 디코더②. 분류는 문장이 이미 다 주어져 있으므로 뒤를 가릴 이유가 없습니다. 인코더 전용 구조가 앞뒤를 모두 보고 문장 표현을 만듭니다.층 정규화가 배치 정규화보다 트랜스포머에 잘 맞는 이유는?
① 배치 안의 여러 샘플을 가로질러 통계를 낸다
② 샘플 하나 안에서 계산해 배치 크기와 문장 길이에 흔들리지 않는다
③ 학습 파라미터가 없다
④ 기울기를 곱셈이 아니라 덧셈으로 전달한다②. ①은 배치 정규화의 설명이고, 문장 길이가 제각각인 시퀀스에서는 그 통계가 불안정합니다. ④는 잔차 연결의 성질입니다.

