The Curse of Depth in Large Language Models

현업에서 모델 압축의 한계를 돌파하거나, 대규모 모델의 성능 병목을 조금이라도 더 개선하기 위해 깊이를 키워 본 분이라면 이 논문의 문제의식이 바로 와닿습니다. 논문은 "레이어를 더 쌓았는데 왜 뒤쪽은 점점 덜 일하는가?"를 이론적으로 해부하고, 깊이에 따라 1l\frac{1}{\sqrt{l}}로 LayerNorm 출력을 제어하는 단 한 줄의 규칙으로 깊은 층의 학습 기여를 되살립니다.
PDF원문 논문 PDF 보기
[초록 & 서론] 3줄 요약 + 문제 제기
3줄 요약
- 치명적 문제점: 최신 거대 언어 모델에서는 뒤쪽 레이어 중 상당수가 기대만큼 표현을 만들지 못하고, 사실상 입력을 거의 그대로 통과시키는 깊이의 저주가 나타납니다.
- 고전적 방식의 한계: 기존 Pre-LN 방식은 "먼저 정규화하고, 그다음 어텐션/FFN 출력을 잔차로 계속 더하는" 구조입니다. 이 방식은 초반 학습은 안정적이지만, 레이어를 매우 깊게 쌓으면 각 층에서 생긴 작은 흔들림(분산)이 잔차 경로를 따라 계속 누적됩니다. 그 결과 후반부 레이어로 갈수록 출력 스케일이 커지고, 자코비안 Jl=hout(l)hin(l)J_l=\frac{\partial h^{(l)}_{out}}{\partial h^{(l)}_{in}} 이 항등행렬 II에 가까워져(JlIJ_l \approx I), 결국 houthinh_{out}\approx h_{in}처럼 입력을 거의 그대로 내보내는 층이 되기 쉽습니다. 쉽게 말해 "계산은 하는데 새 특징을 거의 못 만드는 상태"입니다.
- 핵심 해결책과 장점: LayerNorm 출력에 깊이별 스케일 1l\frac{1}{\sqrt{l}}을 곱하는 LayerNorm Scaling (LNS) 을 적용하면 분산 폭주를 억제하고, 깊은 레이어가 실제로 학습에 참여하는 구조를 되살릴 수 있습니다.
맞춤 비유: 100단 직렬 앰프와 화이트 노이즈 폭발
수백 개의 앰프가 직렬로 연결된 스타디움 음향 시스템을 떠올려 봅시다. 앞단에서는 가수의 목소리가 선명하게 전달되지만, 뒤로 갈수록 각 앰프가 조금씩 더해 넣는 잡음이 쌓여 결국 마지막에는 "쏴아아" 하는 노이즈가 원음을 덮어버립니다. 기존 Pre-LN이 바로 이런 구조입니다.
LNS는 각 앰프마다 자기 순번에 맞춰 볼륨을 자동으로 내려 주는 스마트 리미터를 달아준 셈입니다. 100번째 앰프는 1100=110\frac{1}{\sqrt{100}} = \frac{1}{10} 수준으로 출력을 눌러 주고, 이 덕분에 마지막 단까지도 원음이 살아남아 모든 앰프가 제 역할을 하게 됩니다.
[배경 지식] 꼭 필요한 기초 개념
수식의 숲으로 들어가기 전에, 아래 5가지를 정확히 잡고 가면 이후 내용이 훨씬 쉽게 읽힙니다.
- Residual Connection (잔차 연결)
Transformer 한 블록은 대략 hl+1=hl+F(hl)h_{l+1}=h_l+F(h_l) 꼴로 동작합니다. 이 구조는 정보 손실을 줄이고 학습을 쉽게 만들지만, 동시에 각 블록에서 생기는 작은 변동이 "덧셈"으로 계속 누적되는 통로가 됩니다. 즉, 깊어질수록 안정적 전달과 분산 누적이라는 두 효과가 함께 커집니다.
- Pre-LN vs Post-LN
Pre-LN은 hl+1=hl+F(LN(hl))h_{l+1}=h_l+F(\mathrm{LN}(h_l))처럼 정규화를 먼저 하고 연산합니다. 덕분에 초반 최적화가 안정적이라 대형 LLM에서 널리 쓰입니다. 반면 Post-LN은 hl+1=LN(hl+F(hl))h_{l+1}=\mathrm{LN}(h_l+F(h_l))처럼 합친 뒤 정규화합니다. 이 논문은 "Pre-LN이 실무적으로 주류이지만, 깊이 방향으로는 어떤 병목이 생기는가"를 파고듭니다.
- Variance Explosion (분산 폭발)
분산은 값이 얼마나 넓게 퍼져 있는지 나타내는 지표입니다. 레이어를 지날 때마다 잔차 덧셈이 반복되면 분산이 점점 커질 수 있고, 뒤층에서는 작은 입력 차이도 크게 출렁이는 상태가 됩니다. 이때 학습 신호는 불안정해지고, 특정 층은 "안전하게 통과만 하는" 쪽으로 기울기 쉽습니다.
- Identity Collapse (항등화)
자코비안 Jl=hout(l)hin(l)J_l=\frac{\partial h^{(l)}_{out}}{\partial h^{(l)}_{in}}가 항등행렬 II에 가까워지면(JlIJ_l\approx I), 층의 동작은 houthinh_{out}\approx h_{in}에 가까워집니다. 즉, 계산은 하지만 새 표현을 거의 만들지 못해 깊은 레이어가 사실상 "복사기"처럼 동작합니다.
- Depth Utilization (깊이 활용도)
레이어 수를 늘린 비용(메모리/연산/GPU 시간) 대비 성능 향상이 실제로 얼마나 나오느냐를 의미합니다. 깊이 활용도가 낮으면 모델은 깊지만, 성능은 얕은 모델과 큰 차이가 없을 수 있습니다. 이 논문의 목표는 바로 이 비효율을 줄이는 것입니다.
[제안 방법] 핵심 제안 및 수식 완벽 해부
핵심 아이디어는 생각보다 매우 단순합니다.
h~(l)=LN(h(l))1l\tilde{h}^{(l)} = \mathrm{LN}(h^{(l)}) \cdot \frac{1}{\sqrt{l}}
이 식은 "LayerNorm 출력에 깊이별 제동을 건다"는 의미입니다. 표면적으로는 스케일 하나를 곱한 형태지만, 실제로는 깊은 레이어에서 생기는 분산 누적과 항등화를 동시에 겨냥합니다.
수식의 각 항을 순서대로 읽어보면,
- 입력 h(l)h^{(l)}: ll번째 레이어에서의 활성값(아직 제어 전 신호)
- LN(h(l))\mathrm{LN}(h^{(l)}): 평균/분산을 맞춰 신호 기준선을 정리하는 단계
- 1l\frac{1}{\sqrt{l}}: 레이어 깊이에 따라 달라지는 제동 계수
- 출력 h~(l)\tilde{h}^{(l)}: 제동까지 반영된 최종 전달 신호
핵심은 마지막 항 1l\frac{1}{\sqrt{l}}입니다. ll이 커질수록 값이 작아지므로, 깊은 층일수록 더 강한 제동이 자동으로 적용됩니다.
- l=1l=1: 11=1\frac{1}{\sqrt{1}}=1 (거의 그대로 통과)
- l=4l=4: 14=0.5\frac{1}{\sqrt{4}}=0.5 (절반으로 제동)
- l=100l=100: 1100=0.1\frac{1}{\sqrt{100}}=0.1 (매우 강한 제동)
따라서 앞단은 표현을 만들 자유를 유지하고, 뒤단은 과증폭을 억제해 안정성을 확보합니다.
분산 관점에서는 아래 보조식으로 이해할 수 있습니다.
Var[h~(l)]1lVar[LN(h(l))]\mathrm{Var}\left[\tilde{h}^{(l)}\right] \approx \frac{1}{l}\,\mathrm{Var}\left[\mathrm{LN}(h^{(l)})\right]
여기서 1l\frac{1}{l}가 핵심입니다. 깊이가 깊어질수록 유효 분산을 더 강하게 누르기 때문에, 뒤층으로 갈수록 값이 폭주하는 현상을 완화합니다.
자코비안 관점으로 연결하면,
- 기존 Pre-LN 심층부: JlIJ_l \to I 경향(항등화)
- LNS 적용 후: JlJ_l가 극단적으로 항등행렬로 붙는 현상을 늦춤
결과적으로 깊은 층이 "복사기"로 굳는 현상을 줄이고, 실제 특징 변환에 계속 참여할 수 있게 만듭니다.
즉, 이 수식의 목적은 "깊은 레이어를 약화"하는 것이 아니라, "깊은 레이어를 끝까지 유효하게 일하게 만드는 안정화 제어"입니다.

Symbol Breakdown + 수식 쉽게 읽기

l{1,2,,L}l \in \{1,2,\dots,L\}: 현재 레이어 인덱스입니다. 레이어 번호가 깊어질수록 제동이 강해집니다.
LL: 전체 레이어 수입니다. 모델이 얼마나 깊게 쌓였는지를 뜻합니다.
h(l)Rdh^{(l)} \in \mathbb{R}^{d}: ll번째 레이어에서 LayerNorm에 들어가기 직전의 활성값입니다. dd는 hidden dimension입니다.
LN(h(l))\mathrm{LN}(h^{(l)}): LayerNorm 출력입니다. 신호의 평균과 스케일을 정렬해 다음 연산이 안정적으로 진행되게 합니다.
h~(l)Rd\tilde{h}^{(l)} \in \mathbb{R}^{d}: 깊이 스케일링까지 적용한 최종 출력입니다. 실제로 다음 블록에 전달되는 제어된 신호라고 보면 됩니다.
1l\frac{1}{\sqrt{l}}: 이 논문의 알파이자 오메가인 깊이별 스케일링 계수입니다. 레이어가 깊어질수록 더 강한 브레이크를 겁니다.
Var[h~(l)]1lVar[LN(h(l))]\mathrm{Var}[\tilde{h}^{(l)}] \approx \frac{1}{l}\,\mathrm{Var}[\mathrm{LN}(h^{(l)})]: 깊이가 깊어질수록 유효 분산이 단계적으로 눌린다는 직관을 보여 주는 보조 해석입니다.
Residual/Attention/FFN은 표현력을 키우는 가속 페달, 1l\frac{1}{\sqrt{l}}은 폭주를 막는 브레이크로 읽으면 수식의 역할 분담이 훨씬 쉽게 보입니다.
핵심은 "깊은 레이어를 죽이는 것"이 아니라 "깊은 레이어가 망가지지 않게 진폭을 관리하는 것"입니다. 그래서 LNS는 억제가 아니라 정밀 제어에 가깝습니다.
[제안 방법: 수식 쉽게 읽기] Step-by-step Intuition
같은 식을 "알고리즘 동작 문장"으로 바꿔 읽어보면 더 쉽습니다.
- 1단계: 입력 정리
현재 레이어 출력 후보 h(l)h^{(l)}를 LayerNorm으로 먼저 정리합니다. 이 단계의 목적은 "값의 기준선을 맞추는 것"입니다.
- 2단계: 깊이 확인
지금이 몇 번째 레이어인지 확인합니다. 얕은 층인지 깊은 층인지에 따라 제동 강도가 달라집니다.
- 3단계: 깊이별 제동 적용
1l\frac{1}{\sqrt{l}}를 곱합니다. 얕은 층에서는 제동이 약하고, 깊은 층에서는 제동이 강합니다.
- 4단계: 다음 블록으로 전달
제어된 출력 h~(l)\tilde{h}^{(l)}를 다음 블록으로 보냅니다. 이렇게 하면 깊은 층에서도 값이 튀지 않아 학습이 안정됩니다.
항목별 역할을 다시 묶으면,
- LN(h(l))\mathrm{LN}(h^{(l)}): 기본 정렬 장치
- 1l\frac{1}{\sqrt{l}}: 깊이 기반 안정화 장치
- h~(l)\tilde{h}^{(l)}: 안정화가 끝난 전달 신호
자동차 비유로 보면,
- Residual/Attention/FFN은 가속 페달
- LNS 스케일은 브레이크
입니다. 가속만 있으면 뒤로 갈수록 흔들리고, 브레이크만 있으면 앞으로 못 갑니다. 이 식은 둘의 균형을 깊이별로 자동 조절합니다.
결론적으로 LNS는 "깊어서 망가지는 모델"을 "깊어도 끝까지 일하는 모델"로 바꾸는 최소 개입 규칙입니다.
[수식 작동 시뮬레이션] Toy Data Walkthrough
어려운 수식은 잠깐 내려놓고, "신호 볼륨"이 레이어를 지날 때 어떻게 변하는지만 보겠습니다.
- 시작값을 1.00으로 둡니다. (입력 신호 크기)
- LNS 규칙은 간단합니다: 뒤 레이어일수록 볼륨을 더 눌러준다.
1. 1층
거의 그대로 통과합니다. 아직은 정보를 충분히 키워도 되는 구간입니다.
2. 2층
볼륨이 조금 줄어듭니다. "과하게 커질 뻔한 값"만 살짝 눌러 줍니다.
3. 3층
한 번 더 눌러 줍니다. 앞에서 쌓인 작은 노이즈가 커지는 속도가 눈에 띄게 느려집니다.
4. 4층
이제부터는 제동이 꽤 확실해집니다. 값이 갑자기 튀는 현상이 줄어듭니다.
5. 5층
뒤층 특유의 과증폭을 더 강하게 막습니다. 그렇다고 학습이 멈추지는 않습니다.
6. 6층
끝단에서도 신호가 무너지지 않고 안정적으로 유지됩니다. "그냥 복사 통과"가 아니라 의미 있는 변환이 남습니다.
핵심 직관 한 줄: LNS는 초반엔 학습력을 살리고, 후반엔 폭주를 막아 줍니다. 그래서 깊은 모델이 끝까지 일하게 만듭니다.
[실험 및 결과]
논문은 130M급 모델부터 7B급 스케일까지 LNS를 적용해, 이론이 실제 대규모 학습에서도 통하는지 점검합니다.
- 핵심 지표 1: 하이퍼파라미터 프리 적용성
Mix-LN류 기법은 추가 하이퍼파라미터를 조정해야 했고, 큰 모델이나 긴 학습에서 불안정성이 나타났습니다. 반면 LNS는 깊이에 따른 고정 규칙 1l\frac{1}{\sqrt{l}}만 넣으면 되는 구조라 구현 리스크가 매우 낮습니다.
- 핵심 지표 2: 스케일이 커질수록 더 선명해지는 효과
OLMo 계열 실험에서는 기존 Pre-LN의 최종 loss가 2.69 수준에 머문 반면, LNS는 2.50까지 내려가며 더 나은 수렴 경향을 보였습니다. 즉, 깊이를 더 쌓았을 때 그 깊이가 실제 성능으로 돌아오기 시작한 것입니다.
- 핵심 지표 3: 깊은 층 표현 다양성 유지
기존 Pre-LN은 깊은 층으로 갈수록 각도 거리(angular distance)가 0에 가까워지며 표현이 뭉개지는 반면, LNS는 더 넓은 각도 거리를 유지해 뒤쪽 레이어도 서로 다른 특징을 학습함을 보여줍니다.
실무 해석
- 하이퍼파라미터 튜닝 지옥을 줄이고, 깊이 확장 실험의 재현성을 높입니다.
- "레이어 수만 늘렸는데 성능은 제자리"인 병목을 완화해 GPU 시간당 성능 효율을 개선합니다.
- 프리트레인 이후 SFT 단계에서 더 다양한 심층 표현을 활용할 여지를 만듭니다.
[결론 및 한계점]
최종 의의 및 실무 활용 가치
1. 모델 압축과 경량화의 출발점 개선
깊은 층이 실제로 일을 하게 되면, 이후 가지치기나 양자화를 하더라도 "원래부터 죽어 있던 레이어"를 다루는 것이 아니라 밀도 있게 학습된 표현을 기반으로 최적화할 수 있습니다.
2. SFT 및 다운스트림 일반화 잠재력 확대
뒤쪽 레이어가 살아 있으면 태스크 적응 시 활용할 표현 공간이 넓어집니다. 즉, 파인튜닝에서 쓸 수 있는 카드가 더 많아집니다.
3. GPU 자원 효율 향상
수천 GPU를 들여 깊이를 늘렸는데 뒤층이 놀고 있다면 낭비입니다. LNS는 그 낭비를 줄여, 같은 자원으로 더 똑똑한 깊이를 얻도록 돕습니다.
한계점 (Future Work)
- 분석 초점이 Pre-LN 중심이므로, Post-LN이나 Normalization-free 구조에 대한 일반화는 후속 연구가 필요합니다.
- 멀티모달 환경에서는 텍스트와 비전 브랜치의 깊이 활용 패턴이 다를 수 있어, 모달리티별 제어 법칙 확장이 필요합니다.
- 1l\frac{1}{\sqrt{l}} 외의 다른 함수형 스케일이 더 나은지에 대한 이론·실증 비교도 아직 열려 있습니다.

도식화 기획: 통제 불능 증폭 vs 정밀 제어

왼쪽은 깊이가 깊어질수록 분산이 누적되어 신호가 붕괴되는 기존 Pre-LN 경로, 오른쪽은 깊이별 스케일링으로 진폭을 안정화해 깊은 레이어까지 유효 신호가 유지되는 LNS 경로를 애니메이션으로 대비합니다.

기존 Pre-LN

깊어질수록 잡음이 누적되어 뒤층이 사실상 항등 맵처럼 굳어집니다.

레이어 기여도Layer 1Layer L후반 레이어 항등화분산 폭발

제안 LNS

깊이별 제동으로 진폭을 안정화해 깊은 층도 끝까지 학습에 참여시킵니다.

레이어 기여도Layer 1Layer L깊은 레이어 기여 유지제어된 진폭
LNS의 매력은 거대한 아키텍처를 갈아엎지 않고도, 깊이의 저주를 수식 한 줄로 정면 돌파한다는 점입니다. 수학적으로는 분산 폭주와 항등화를 제어하고, 실무적으로는 깊이를 늘린 비용이 실제 성능 향상으로 돌아오게 만듭니다. 그래서 이 논문은 "더 깊게 쌓는 법"이 아니라, 깊이를 끝까지 일하게 만드는 법을 알려주는 설계서로 읽는 것이 가장 정확합니다.