87. 가중치 초기화 (Weight Initialization)

⚠️ 이 문서는 딥러닝 모델 학습을 막 시작할 때, 신경망의 뇌세포들을 연결하는 수백만 개의 연결선(가중치, Weight)에 '처음 어떤 숫자(초깃값)'를 부여할 것인가의 문제로, 이 첫 단추를 잘못 끼우면 기울기가 소실되거나 폭발하여 학습이 아예 멈춰버리는 치명적 참사를 막기 위한 Xavier 및 He 초기화 기법을 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 백지상태의 인공지능에게 훈련용 첫 모의고사를 풀리기 전, 아무 값이나 막 던져주거나(랜덤) 모두 0으로 채워놓으면 역전파(Backpropagation) 시 치명적인 수학적 모순에 빠진다. 이를 막기 위해 과학적으로 정밀하게 계산된 난수를 뿌리는 작업이다.
  2. 가치: 적절한 가중치 초기화는 데이터가 수백 개의 은닉층(Layer)을 통과하더라도 신호(활성화 값)가 죽거나 미쳐 날뛰지 않고 골고루 퍼지게 만들어, 기울기 소실(Vanishing Gradient) 현상을 1차적으로 방어하고 모델이 깊어져도 안정적인 학습을 보장한다.
  3. 기술 체계: Sigmoid나 Tanh 함수를 쓸 때는 노드의 개수에 맞춰 분산을 조절하는 사비에르(Xavier/Glorot) 초기화를 쓰고, 최신 트렌드인 ReLU 함수를 쓸 때는 그 절반이 0으로 죽어버리는 특성을 보정해 주는 He 초기화를 쓰는 것이 불문율(국룰)이다.

Ⅰ. 0 초기화의 저주와 무작위 초기화의 폭발

초깃값은 아무렇게나 주면 안 된다. 잘못 주면 바보가 되거나 미쳐버린다.

  1. 가중치를 모두 0으로 초기화하면? (Symmetry 현상):
    • 모든 가중치($W$)를 0으로 주고 시작하면 왠지 깔끔할 것 같다. 하지만 최악의 짓이다.
    • 순전파 때 모든 뉴런이 똑같은 값(0)을 다음 층으로 넘겨주고, 역전파 때도 모든 가중치가 완벽하게 똑같은 크기(기울기)로 무한히 업데이트되는 '대칭성(Symmetry)'에 갇혀버린다. 결국 수백 개의 뉴런을 둔 의미가 없이 1개의 뉴런처럼 똑같이 행동하는 바보가 된다.
  2. 크거나 작은 랜덤 값 초기화의 재앙:
    • 가중치들을 작게($0.01$ 곱하기 랜덤) 주면? 층(Layer)을 지날 때마다 신호가 점점 작아져서 결국 뒤쪽 층에는 0에 수렴하는 값만 전달된다. (기울기 소실)
    • 가중치들을 크게(큰 표준편차 랜덤) 주면? 층을 지날 때마다 숫자가 눈덩이처럼 커져서 결괏값이 무한대로 터져버린다. (기울기 폭발)

📢 섹션 요약 비유: 군대에 신병 100명이 왔는데 모두한테 똑같은 교범(0 초기화)만 달달 외우게 하면, 전쟁 났을 때 100명이 똑같은 행동만 하다가 전멸합니다(대칭성). 반대로 아무렇게나 엉터리로 작전을 짜주면(랜덤 초기화), 총 한 번 못 쏴보고 겁먹어 얼어붙거나(기울기 소실) 미쳐서 아군에게 수류탄을 던지며 폭주(기울기 폭발)하게 됩니다. 각자 적절히 흩어져 다양한 생각을 하도록 초기 훈련을 잘 시키는 것이 중요합니다.


Ⅱ. 사비에르 (Xavier / Glorot) 초기화의 균형

이전 층의 노드 수가 많으면 초깃값을 작게 쪼개어 준다.

  1. 기본 철학 (분산 유지):
    • 2010년 자비에 글로롯(Xavier Glorot)이 제안한 기법. 핵심은 "입력으로 들어오는 신호의 데이터 크기(분산)와, 출력으로 나가는 신호의 크기(분산)가 층을 지나도 똑같이 일정하게 유지되어야 한다"는 것이다.
  2. 수학적 보정 (노드 수의 루트로 나누기):
    • 앞 층에서 내게 신호를 쏴주는 뉴런(노드)이 100개라면, 100개의 값이 더해져서 내게 오므로 값이 확 커질 위험이 있다.
    • 그래서 가중치의 난수(Random)를 생성할 때, $\frac{1}{\sqrt{n_{in}}}$ (앞 층의 노드 개수 루트값)만큼 곱해서(나누어서) 팩폭을 줄여버린다.
    • (경우에 따라 앞 층 노드 수와 뒤 층 노드 수를 더해서 루트를 씌우기도 함)
  3. 적합한 활성화 함수 (Sigmoid, Tanh):
    • Xavier 초기화는 0을 기준으로 대칭적인 S자 모양을 그리는 Sigmoid나 Tanh 함수를 썼을 때, 신호가 0이나 1로 쏠리지 않고 예쁜 종 모양(정규분포)으로 끝까지 잘 전달되는 마법을 보여주었다.

📢 섹션 요약 비유: 파티에 10명(노드 10개)이 음료수를 부어 큰 통(다음 층)을 채울 때와 100명(노드 100개)이 부을 때는 기준이 달라야 합니다. 100명이 부을 때는 컵의 크기(가중치 초깃값)를 $\frac{1}{10}$로 아주 작게 강제로 줄여버려야(루트 연산) 큰 통이 넘쳐서 터지는 것(분산 폭발)을 막을 수 있는 과학적 계량법입니다.


Ⅲ. He 초기화 (Kaiming He) - ReLU 전용 무기

시대가 바뀌어 ReLU를 쓰자 사비에르도 한계를 드러냈다.

  1. Xavier와 ReLU의 불협화음:
    • 딥러닝 트렌드가 Sigmoid를 버리고 ReLU(음수는 무조건 0으로 차단) 함수로 넘어가면서 문제가 터졌다.
    • Xavier 초깃값을 넣고 ReLU를 통과시키면, 음수 값 절반이 0으로 죽어버리기 때문에 신호의 전체 크기(분산)가 반토막이 나버린다. 층이 100개 깊어지면 결국 신호가 0으로 다 소멸해 버리는(기울기 소실) 현상이 다시 발생했다.
  2. He 초기화 (2배의 펌핑):
    • 카이밍 허(Kaiming He)는 "ReLU가 음수를 반토막 내니까, 처음 가중치를 줄 때 분산을 Xavier보다 딱 2배 더 크게 주면 밸런스가 맞지 않겠나?"라는 심플하고 천재적인 제안을 했다.
    • 난수를 생성할 때 $\sqrt{\frac{2}{n_{in}}}$ 를 곱해준다 (Xavier보다 $\sqrt{2}$배 크다).
  3. 최신 딥러닝의 절대 룰 (Rule of Thumb):
    • 이 2배 펌핑 덕분에 깊은 CNN(ResNet 등) 아키텍처에서 ReLU를 쓸 때 신호가 끝까지 살아남게 되었다.
    • 결론 공식: Sigmoid/Tanh를 쓸 때는 Xavier 초기화를 써라. ReLU(또는 그 변형)를 쓸 때는 He 초기화를 써라. 이것은 바꿀 수 없는 딥러닝의 진리다.

📢 섹션 요약 비유: ReLU라는 깐깐한 문지기는 나쁜 말(음수)을 하는 사람을 절반이나 쫓아내 버립니다(신호 반토막). 그래서 사비에르(Xavier)가 보낸 병사들은 문을 거치며 숫자가 확 줄어 전멸해 버렸습니다. 허(He) 장군은 애초에 파견할 때부터 "저 문지기가 반을 죽일 테니, 처음부터 병력을 2배(루트 2배)로 왕창 많이 보내라!"라고 지시하여 도착지에 항상 일정한 병력을 유지시키는 지독한 맞춤형 전략가입니다.