모두의 AI
머신러닝AI논문
로딩 중…

배우기

🏅내 업적

Ch.01

가중치 초기화: 좋은 출발이 반이다

가중치 초기화(Weight Initialization)는 딥러닝 모델이 학습이라는 마라톤을 시작하기 전에, 출발선을 어디에 둘지 정하는 첫 단추입니다. 출발선을 잘못 잡으면 학습이 제대로 되지 않습니다. 가중치가 너무 작게 설정되면 역전파 과정에서 기울기가 점점 0에 가까워져 앞쪽 층이 거의 갱신되지 않는 기울기 소실이 생기고, 반대로 너무 크게 두면 기울기가 폭발하듯 커지는 기울기 폭발이 일어납니다. 이 챕터에서는 이런 문제를 줄이기 위해 널리 쓰이는 Xavier 초기화와 He 초기화를 쉽고 자세히 알아봅니다.

가중치 초기화: 좋은 출발이 반이다

가중치 초기화란?
딥러닝에서 각 층의 뉴런들은 가중치(WWW)와 편향(bbb)이라는 숫자들로 서로 연결되어 있습니다. 학습이 시작되기 전에는 이 값들이 비어 있는 상태이므로, 맨 처음에 어떤 숫자로 채울지 정해 주어야 합니다. 이렇게 학습 0일 차에 가중치와 편향을 처음부터 정해 두는 과정을 가중치 초기화라고 부릅니다. 비유하자면, 오케스트라에 악보를 나눠 준 뒤 "어느 크기로 연주할지" 볼륨을 정하는 것과 같습니다. 볼륨이 너무 작으면 소리가 잘 안 들리고, 너무 크면 음이 깨져서 엉망이 됩니다. 가중치 초기화도 마찬가지로, 적당한 크기로 출발하는 것이 중요합니다.
수학적으로 보면
한 층에서 이루어지는 계산은 z=Wx+bz=W\mathbf{x}+bz=Wx+b라는 식으로 나타낼 수 있습니다. 여기서 zzz는 활성화 함수를 거치기 전의 "원시 출력", WWW는 입력이 출력에 얼마나 반영될지 정하는 가중치 행렬(초기화할 때 이 크기를 조절합니다), x\mathbf{x}x는 이 층에 들어오는 입력, bbb는 편향(보통 0으로 둡니다)입니다. 만약 가중치 WWW를 모두 0으로 두면 어떻게 될까요? 그러면 같은 층 안의 모든 뉴런이 똑같은 출력을 내게 됩니다. 이 상태를 "대칭성이 깨지지 않았다"고 말합니다. 이렇게 되면 역전파 때 기울기가 골고루 나뉘지 않아서, 결국 학습이 제대로 이루어지지 않습니다. 그래서 우리는 가중치를 작은 무작위 숫자(난수)로 채우고, 그 난수들이 퍼져 나가는 크기(분산)를 층의 구조에 맞게 조절합니다.
실전에서의 의미
초기화를 대충 하면 실무에서 곧바로 문제가 나타납니다. 스팸 메일 분류기나 의료 영상 판독 모델처럼 실제로 쓰이는 시스템에서도, 초기화가 나쁘면 정답률이 잘 오르지 않거나 학습 중에 NaN(Not a Number)이 발생해 프로그램이 멈추는 일이 생깁니다. 특히 층이 많을수록 가중치가 여러 번 곱해지기 때문에, 나쁜 초기화의 영향이 더 크게 드러납니다. 그래서 실무에서는 Xavier 초기화, He 초기화처럼 층의 크기(입력·출력 뉴런 수)에 맞춰 분산을 정한 규칙을 사용합니다. PyTorch나 TensorFlow 같은 프레임워크에는 이런 방식들이 기본으로 잘 세팅되어 있어서, 원리만 알아 두면 학습이 잘 안 될 때 원인을 파악하는 데 큰 도움이 됩니다.
가중치 초기화는 학습의 첫 단계로, 층마다 WWW와 bbb를 적절한 스케일로 두어 순전파·역전파 시 분산이 유지되게 합니다.

초기화 스케일의 영향

↓●↑입력층1층2층3출력소실유지폭발
층을 지날 때 분산이 유지되도록 W, b 스케일을 정하는 것이 좋은 초기화입니다.
좋은 출발이 반이다적당한 초기화 → 빠른 수렴 · 안정 학습
  • ① 초기화: 각 층의 WWW, bbb를 (Xavier/He 등) 규칙에 따라 설정
  • ② 순전파: 입력 → 선형 합 zzz → 활성화 aaa → 다음 층
  • ③ 손실 계산 후 역전파: 기울기가 층을 따라 전달
  • ④ 갱신: 기울기에 따라 WWW, bbb 업데이트. 좋은 초기화면 기울기 크기가 적당히 유지됨

왜 중요한지

기울기 소실과 폭발 방지
딥러닝에서는 손실 함수의 오차를 역전파라는 과정으로 뒤쪽 층에서 앞쪽 층까지 전달하면서 가중치를 조금씩 수정합니다. 이때 연쇄 법칙에 따라 기울기가 층을 지날 때마다 가중치와 곱해지기 때문에, 가중치의 크기가 조금만 어긋나도 결과가 크게 달라집니다. 가중치가 너무 작게 설정되어 있으면, 기울기가 층을 지날수록 계속 작은 수와 곱해져 0에 가까워집니다. 그러면 앞쪽에 있는 층들은 기울기를 거의 받지 못해 학습이 멈춘 것처럼 보입니다. 이를 기울기 소실(Vanishing Gradient)이라고 합니다. 반대로 가중치가 너무 크면 기울기가 층을 지날 때마다 커져서 숫자가 폭발하는 기울기 폭발(Exploding Gradient)이 일어납니다. 좋은 초기화는 층을 지나갈 때 활성화나 기울기의 분산이 지나치게 커지거나 작아지지 않도록 맞춰 주는 역할을 합니다.
빠르고 안정적인 학습(수렴)
학습을 산에서 계곡(최적점)을 찾아 내려가는 과정에 비유할 수 있습니다. 이때 초기화는 "헬기로 어디에 내려앉을지" 정하는 것과 같습니다. 나쁜 위치에 내려앉으면 골짜기를 오래 헤매야 하고, 좋은 위치에서 출발하면 빠르고 안전하게 목표 지점에 도달할 수 있습니다. 올바른 초기화를 하면 기울기 소실과 폭발이 줄어들 뿐 아니라, 학습 속도 자체가 빨라지고 수렴이 안정적으로 이루어지는 효과를 얻을 수 있습니다.

어떻게 쓰이는지

① Xavier (Glorot) 초기화
Xavier 초기화는 이전 층의 노드 수(ninn_{in}nin​, 입력 쪽 연결 개수)와 다음 층의 노드 수(noutn_{out}nout​, 출력 쪽 연결 개수)를 둘 다 고려해서 가중치를 뽑을 때의 분산(스케일)을 정하는 방법입니다. 수식으로는 분산을 σ2=2nin+nout\sigma^2=\frac{2}{n_{in}+n_{out}}σ2=nin​+nout​2​으로 두는데, nin+noutn_{in}+n_{out}nin​+nout​이 커질수록 분모가 커져 분산이 작아지므로 노드가 많은 층일수록 가중치를 더 작게 뽑아 값이 넘치지 않게 됩니다. 직관적으로 말하면, 노드가 많은 층일수록 더 많은 수가 더해지기 때문에 값이 넘치지 않도록 분산을 작게 잡아 주는 것입니다. Xavier 초기화는 tanh나 시그모이드(Sigmoid)처럼 출력이 대략 -1에서 1 근처로 모이는 대칭적인 활성화 함수와 잘 맞습니다. 이런 활성화들은 층을 지날 때 분산이 유지되도록 수학적으로 맞춰져 있어서, Xavier와 짝을 이루어 널리 쓰입니다.
② He 초기화
He 초기화는 ReLU 활성화 함수에 맞춘 초기화 방식입니다. ReLU는 입력이 양수면 그대로 두고, 음수면 0으로 만들어 버리기 때문에, 평균적으로 보면 출력이 입력보다 약 절반 정도로 줄어드는 효과가 있습니다. He 초기화는 이 "줄어든 절반"을 보상하기 위해 분산을 σ2=2nin\sigma^2=\frac{2}{n_{in}}σ2=nin​2​으로 둡니다. 여기서는 ninn_{in}nin​만 쓰고 noutn_{out}nout​은 쓰지 않습니다. 직관적으로는 Xavier에서 쓰는 분산보다 2배 느낌으로 키워서, ReLU가 잘라 버린 절반만큼을 다시 채워 주는 것이라고 생각하면 됩니다.
③ 실무에서 어떻게 선택할까?
실무에서는 사용하는 활성화 함수에 따라 초기화를 골라 쓰면 됩니다. ReLU나 Leaky ReLU 같은 ReLU 계열을 쓰는 층이라면 He 초기화를 쓰는 것이 일반적입니다. 반대로 tanh나 시그모이드를 쓰는 층이라면 Xavier 초기화가 잘 맞습니다. PyTorch나 TensorFlow에서는 Linear(완전연결) 층을 만들 때 활성화에 맞춰 위 두 방식 중 하나가 기본으로 적용되어 있는 경우가 많습니다. 원리를 알아 두면 학습이 잘 되지 않을 때 초기화부터 점검하는 데 도움이 됩니다.

요약

가중치 초기화는 학습을 시작하기 전에 각 층의 가중치(WWW)와 편향(bbb)을 어떤 값으로 둘지 정하는 과정입니다. 가중치를 모두 0으로 두면 같은 층의 뉴런들이 같은 출력을 내어 대칭성이 깨지지 않고, 역전파 시 기울기가 골고루 나뉘지 않아 학습이 제대로 이루어지지 않습니다. 반대로 무작위로 뽑되 크기를 너무 크게 또는 너무 작게 두면 기울기 폭발이나 기울기 소실이 생깁니다. 그래서 Xavier 초기화와 He 초기화처럼 층의 크기(입력·출력 노드 수)에 맞춰 분산을 조절한 방법이 널리 쓰입니다. Xavier는 tanh·시그모이드 같은 활성화에, He는 ReLU 계열에 적합합니다. 이렇게 적절한 초기화를 하면 기울기 소실과 폭발을 줄이고, 수렴을 더 빠르고 안정적으로 만들 수 있습니다.

문제 풀이를 위한 설명

가중치 초기화는 학습이 시작되기 전에 각 층의 가중치(WWW)와 편향(bbb)을 어떤 값으로 설정할지 정하는 단계입니다. 0으로 두면 대칭성 때문에 학습이 제대로 되지 않으므로, 보통 작은 무작위 숫자(난수)로 채우되, 그 난수들이 퍼지는 크기인 분산(스케일)을 층에 맞게 조절합니다. Xavier 초기화는 분산을 σ2=2/(nin+nout)\sigma^2 = 2/(n_{in}+n_{out})σ2=2/(nin​+nout​)으로 두어 tanh·시그모이드 같은 활성화와 잘 맞추고, He 초기화는 σ2=2/nin\sigma^2 = 2/n_{in}σ2=2/nin​으로 두어 ReLU 계열에 맞춥니다. 좋은 초기화를 하면 기울기 소실과 기울기 폭발이 줄어들고 수렴 속도와 안정성이 좋아집니다. Xavier 식의 ninn_{in}nin​, noutn_{out}nout​은 각각 입력·출력 쪽 연결 개수이고, He 식 2/nin2/n_{in}2/nin​은 ReLU가 출력을 약 절반으로 줄이므로 그만큼 분산을 키워 보정한 것입니다.
키워드별 풀이 요약
  • 유형가중치 초기화 정의
  • 풀이·예시 (키워드 → 정답)학습 전 WWW, bbb를 정하는 것. 0 초기화는 비추천. → 개념 선택 시 1
  • 유형Xavier
  • 풀이·예시 (키워드 → 정답)σ2=2/(nin+nout)\sigma^2 = 2/(n_{in}+n_{out})σ2=2/(nin​+nout​), tanh·시그모이드. → 1
  • 유형He
  • 풀이·예시 (키워드 → 정답)σ2=2/nin\sigma^2 = 2/n_{in}σ2=2/nin​, ReLU 계열. → 2
  • 유형기울기 소실
  • 풀이·예시 (키워드 → 정답)가중치가 너무 작을 때 기울기가 0에 가까워짐. → 1
  • 유형기울기 폭발
  • 풀이·예시 (키워드 → 정답)가중치가 너무 클 때 기울기가 폭발. → 2
  • 유형균일 분포 Xavier
  • 풀이·예시 (키워드 → 정답)범위 [−6/(nin+nout), 6/(nin+nout)][-\sqrt{6/(n_{in}+n_{out})},\ \sqrt{6/(n_{in}+n_{out})}][−6/(nin​+nout​)​, 6/(nin​+nout​)​]. 계산 시 정수로.
  • 유형층 크기 계산
  • 풀이·예시 (키워드 → 정답)nin=4n_{in}=4nin​=4, nout=6n_{out}=6nout​=6 → nin+nout=10n_{in}+n_{out}=10nin​+nout​=10.
유형풀이·예시 (키워드 → 정답)
가중치 초기화 정의학습 전 WWW, bbb를 정하는 것. 0 초기화는 비추천. → 개념 선택 시 1
Xavierσ2=2/(nin+nout)\sigma^2 = 2/(n_{in}+n_{out})σ2=2/(nin​+nout​), tanh·시그모이드. → 1
Heσ2=2/nin\sigma^2 = 2/n_{in}σ2=2/nin​, ReLU 계열. → 2
기울기 소실가중치가 너무 작을 때 기울기가 0에 가까워짐. → 1
기울기 폭발가중치가 너무 클 때 기울기가 폭발. → 2
균일 분포 Xavier범위 [−6/(nin+nout), 6/(nin+nout)][-\sqrt{6/(n_{in}+n_{out})},\ \sqrt{6/(n_{in}+n_{out})}][−6/(nin​+nout​)​, 6/(nin​+nout​)​]. 계산 시 정수로.
층 크기 계산nin=4n_{in}=4nin​=4, nout=6n_{out}=6nout​=6 → nin+nout=10n_{in}+n_{out}=10nin​+nout​=10.
예시 (정의)
"가중치 초기화의 주된 목적은?
① 학습 전 층의 스케일을 적절히 맞추기
② 학습률을 키우기
③ 데이터 증강"
가중치 초기화는 층을 지날 때 활성화·기울기의 스케일이 유지되도록 하는 것이 목적이다. → 정답 1

예시 (Xavier vs He)
"ReLU를 쓰는 층에서 흔히 쓰는 초기화는?
① Xavier
② He
③ 0"
ReLU 계열에서는 He 초기화를 쓴다. → 정답 2

예시 (계산)
nin=4n_{in}=4nin​=4, nout=6n_{out}=6nout​=6일 때 Xavier에서 nin+noutn_{in}+n_{out}nin​+nout​의 값(정수)은?
4+6=104+6=104+6=10. → 정답 10
정의 예시 — "가중치 초기화의 주된 목적은?
① 학습 전 층의 스케일 맞추기
② 학습률 키우기
③ 데이터 증강" → 목적은 층을 지날 때 스케일이 유지되게 하는 것. 정답 1
참/거짓 예시 — "가중치 초기화는 학습 전에 WWW, bbb를 정하는 과정이다." → 맞음. 정답 1
시나리오 예시 — "스팸 분류 모델에서 손실이 거의 줄지 않을 때 먼저 의심하는 것은?
① 초기화·학습률
② 데이터 개수만
③ 배치 크기만" → 초기화·학습률 점검이 우선. 정답 1
선택 예시 — "He 초기화에서 σ2\sigma^2σ2는?
① 2/nin2/n_{in}2/nin​
② 2/(nin+nout)2/(n_{in}+n_{out})2/(nin​+nout​)
③ 1/nin1/n_{in}1/nin​" → He는 σ2=2/nin\sigma^2=2/n_{in}σ2=2/nin​. 정답 1
개념 예시 — "Xavier에서 nin+nout=6n_{in}+n_{out}=6nin​+nout​=6이면 6/(nin+nout)6/(n_{in}+n_{out})6/(nin​+nout​)의 값(정수)은?
① 1
② 2
③ 3" → 6/6=16/6=16/6=1. 정답 1
계산 예시 — "nin=4n_{in}=4nin​=4, nout=6n_{out}=6nout​=6일 때 Xavier에서 nin+noutn_{in}+n_{out}nin​+nout​의 값(정수)은?" → 4+6=104+6=104+6=10. 정답 10