이 문서는 자라는 중인 질문입니다. 아직 증거를 모으고 있으며, 내용이 바뀔 수 있습니다.
한 줄로 말하면
RMSNorm은 벡터의 평균을 빼지 않고, 값들의 제곱평균제곱근으로 크기만 맞추는 정규화야. LLM 블록 안에서 표현값이 너무 커지거나 작아지는 것을 눌러 주되, LayerNorm보다 계산 구조가 단순한 편이야.
비유로 이해하기
여러 사람이 같은 마이크에 대고 말한다고 생각해 보자. 어떤 사람은 너무 크게 말하고, 어떤 사람은 작게 말해. 이때 RMSNorm은 목소리의 중심을 새로 잡기보다, 전체 음량이 일정한 크기에 오도록 볼륨 손잡이를 돌리는 쪽에 가까워.
여기까지가 이해를 돕는 비유야. 실제로 RMSNorm은 소리의 크기를 다루는 기술이 아니라, 모델 내부 벡터의 각 숫자를 한 줄로 놓고 그 줄의 제곱평균제곱근을 구한 뒤 같은 비율로 나누는 연산이야. 그래서 한 행 안의 모든 값에 같은 보정값이 걸린다.
정확한 정의
RMSNorm은 한 벡터 x에 대해 각 원소의 제곱 평균을 구하고, 그 제곱근으로 x를 나누는 방식이야. PyTorch 글은 affine 항을 뺀 RMSNorm을 rmsnorm(A) = A * rstd(A)[:, None]로 적고, rstd를 행마다의 제곱합에서 계산한다고 설명해.1
LayerNorm과의 차이는 평균을 빼는 단계야. LayerNorm은 한 벡터에서 평균과 분산을 함께 보고 값을 다시 맞춘다. RMSNorm은 평균 제거 없이 크기만 맞춘다. 이 차이 때문에 RMSNorm은 모든 문제에서 더 좋은 정규화라는 뜻이 아니라, LLM 구현에서 더 단순한 계산 경로와 최적화 여지를 줄 수 있는 정규화로 읽어야 해.
왜 중요한가
LLM의 큰 비용은 행렬 곱에 몰려 있지만, 정규화도 블록마다 반복돼. PyTorch 글은 LayerNorm과 RMSNorm 같은 정규화가 Tensor Core를 바쁘게 쓰기보다 메모리에서 값을 읽고 쓰는 시간이 커서, Meta의 추천 모델 학습에서는 지연의 약 20%, 일반적인 LLM에서도 약 10% 수준을 차지할 수 있다고 설명해.1
이 지점은 추론 비용을 볼 때 중요해. 모델을 빠르게 만드는 일은 연산량만 줄이는 문제가 아니야. 행렬 곱 사이의 작은 연산이 매번 메모리를 왕복하게 만들면, 전체 실행 경로가 그 대기 시간에 묶일 수 있어.
실제 예시
PyTorch 팀이 설명한 Lazy Pre-Norm은 RMSNorm의 구조를 이용한 예야. 보정값이 한 행 전체에 같은 스칼라로 걸리면 RMSNorm(A) @ B를 먼저 하지 않고, A @ B를 계산한 뒤 마지막에 행별 보정값을 곱해도 같은 모양의 결과를 얻을 수 있어.1
이렇게 하면 커널은 행렬 곱을 하는 동안 A의 제곱합을 같이 모으고, 마지막에 보정값을 곱할 수 있다. 정규화가 사라지는 건 아니야. 이미 돌아가는 행렬 곱 뒤에 정규화 시간을 최대한 숨기는 쪽에 가깝다.
헷갈리지 말아야 할 점
- RMSNorm은 모델 품질을 보장하는 마법이 아니야. 어떤 모델 구조에서 쓰였는지, LayerNorm과 바꿨을 때 학습 안정성과 성능이 어떻게 달라지는지는 별도 근거가 필요해.
- 모든 정규화 fusion에 같은 요령이 통하지 않아. PyTorch 글은 affine 항이 있으면 열마다 다른 곱셈이 생기고, LayerNorm은 평균을 빼야 해서 Lazy Pre-Norm의 전제가 깨진다고 적었어.1
- 커널 속도 향상이 곧 서비스 비용 절감률은 아니야. 정규화가 실제 병목인 모델 형상과 하드웨어에서 이득이 커지고, 행렬 곱이 거의 전부를 차지하는 큰 형상에서는 숨길 시간이 줄어들 수 있어.
관련 문서
남은 질문들
- RMSNorm을 처음 제안한 논문은 평균 제거를 어떤 가정으로 정당화했을까?
- 주요 LLM 아키텍처는 RMSNorm을 attention 앞, MLP 앞, 출력 직전 중 어디에 두고 있을까?
- Lazy Pre-Norm 같은 RMSNorm fusion은 학습과 추론, NVIDIA와 다른 가속기에서 얼마나 재현될까?
댓글