ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 가중치 초기화와 기울기 소실(Gradient Vanishing)
    AI 2026. 2. 1. 18:20

    딥러닝 모델을 설계할 때 우리가 가장 먼저 마주하는 난관 중 하나는 바로 가중치 초기화(Weight Initialization)입니다. "그냥 무작위로 숫자를 넣으면 되는 거 아냐?"라고 생각하기 쉽지만, 이 초기값이 모델의 성패를 좌우한다는 사실, 알고 계셨나요?

    가중치 초기화가 왜 중요한지, 그리고 잘못된 초기화가 어떻게 모델 학습을 망치는지 시각적, 수학적으로 파헤쳐 보겠습니다.

    가장 쉬운 선택의 비극: 모든 가중치를 0(또는 상수)으로 한다면?

    많은 입문자가 "시작은 공평하게 0으로 하자" 혹은 "특정 상수(예: 0.5)로 통일하자"는 유혹에 빠집니다. 하지만 이는 신경망의 가장 강력한 무기인 '복잡성'을 스스로 포기하는 행위입니다.

    🚩 대칭성 파괴(Symmetry Breaking)의 실패

    모든 가중치를 동일한 값(0 포함)으로 초기화하면 다음과 같은 치명적인 문제가 발생합니다.

    • 뉴런의 복제화: 같은 층에 있는 모든 뉴런이 동일한 입력에 대해 동일한 출력값을 내뱉습니다.
    • 업데이트의 동일화: Backpropagation 시 모든 뉴런이 똑같은 기울기(Gradient)를 전달받아 똑같이 업데이트됩니다.
    • 결과: 1,000개의 뉴런을 만들어도 결국 뉴런 1개만 있는 것과 수학적으로 차이가 없게 됩니다. 이를 '대칭적 구조'라고 하며, 모델이 다양한 특징을 배울 수 없게 만듭니다.

    💡 결론: 가중치는 반드시 무작위(Random)로 설정하여 각 뉴런이 서로 다른 특징을 학습하도록 '대칭성'을 깨뜨려야 합니다.

     

    무작위 초기화의 함정: 왜 양극단으로 치우칠까?(Gradient Exploding)

    우리가 가중치를 표준정규분포($N(0, 1)$)로 초기화한다고 가정해 봅시다. 층이 깊어질수록 어떤 일이 벌어질까요?

    "합산의 마법"이 일어납니다.

    뉴런 하나가 받는 입력이 512개($N=512$)라고 하면, 가중합 $z$는 다음과 같이 계산됩니다.

    $$z = w_1x_1 + w_2x_2 + \dots + w_{512}x_{512} + b$$

    가중치 $w$ 하나의 표준편차는 1이지만, 이런 값들을 512번이나 더하면 합계인 $z$의 표준편차는 통계학적으로 $\sqrt{N}$배인 약 22.6까지 커집니다.

    시그모이드의 "기울기 0"의 늪

    이렇게 커진 $z$값이 활성화 함수인 시그모이드($\sigma$)를 통과하면 어떻게 될까요?

    • $z$가 매우 크면(예: 20) $\sigma(z) \approx 1$
    • $z$가 매우 작으면(예: -20) $\sigma(z) \approx 0$

    결국 데이터들이 0과 1 양극단에 처박히게 됩니다. 시그모이드 그래프의 양 끝단은 아주 평평하므로 기울기(Gradient)가 0이 됩니다. 이것이 바로 우리가 두려워하는 기울기 소실(Gradient Vanishing)의 시작입니다.

     

    직관적으로 이해하려면 '미분 = $x$를 아주 살짝 건드렸을 때 $y$가 반응하는 정도(민감도)'라고 생각해 보면 훨씬 쉽습니다.. 시

    • 중간 지점 ($x$가 0 근처일 때): 시그모이드 그래프의 경사가 가장 가파른 구간이야. 이때는 $x$를 살짝만 툭 쳐도 $y$값이 위아래로 확 변해. 반응성이 아주 좋으니까 민감도(미분값)가 큽니다..
    • 값이 아주 클 때 ($x$가 매우 큰 양수): 이미 $y$값이 1에 거의 도달해서 천장에 꽉 막혀 있는 평평한 상태야. 여기서 $x$를 아무리 더 큰 수로 팍팍 밀어붙인다고 해도, $y$는 1을 넘을 수 없기 때문에 더 이상 올라갈 데가 없어. $x$를 건드려도 $y$가 완전히 무반응이니까, 변화율(미분값)이 0이 됩니다..
    • 값이 아주 작을 때 ($x$가 매우 작은 음수): 반대로 바닥(0)에 껌딱지처럼 딱 붙어 있는 상태지. $x$를 더 작게 만들어봤자 이미 0이라 더 내려갈 데가 없으니, 역시나 반응이 없어서 미분값이 0이 됩니다..

    요약하자면, 시그모이드 양 끝단에서는 값이 '포화 상태(Saturated)'가 되기 때문에 입력값을 아무리 바꿔도 출력값이 꿈쩍하지 않아서 기울기가 0으로 죽어버린다고 보면 됩니다.

     

    가중치를 작게(0.01) 하면 해결될까?

    "값이 커지는 게 문제라면 아주 작게 초기화하자!"라고 생각할 수 있습니다. 하지만 여기엔 또 다른 비극이 숨어 있습니다.

    가중치를 너무 작게 하면 $z$값은 0 근처를 벗어나지 못합니다. 시그모이드에 0 근처의 값을 넣으면 출력은 모두 0.5 근처가 됩니다.

    • 표현력 상실: 모든 뉴런이 "0.5쯤인 것 같아"라고 똑같은 대답만 하니, 개와 고양이를 구분할 수 있는 특징(개성)이 사라집니다.
    • 기하급수적 소멸: 시그모이드의 최대 기울기는 0.25입니다. 층이 10개만 되어도 $0.25^{10}$이라는 사실상 0에 가까운 기울기가 되어버립니다.

    분포가 좁을 때 (예: 평균 1000, $std=0.01$)

    • 현상: $w$값들이 $1000.01, 999.99$처럼 아주 큰 값에 빽빽하게 모여 있습니다.
    • 결과: $z$값은 매우 큰 양수(또는 음수)가 됩니다. 시그모이드는 $1$(또는 $0$)에 처박히게 됩니다.
    • 진짜 위험: $z$값이 0이 아니더라도, 모든 뉴런의 $z$값이 거의 똑같이 크다는 게 문제입니다, 즉 상수초기화와 같은 문제가 나타납니다.

    수학으로 증명하는 시그모이드의 한계

     

    왜 0과 1에서 기울기가 사라지는지, 시그모이드 미분 공식을 유도해 보면 명확해집니다.

    시그모이드 함수 정의:

    $$\sigma(z) = \frac{1}{1 + e^{-z}} = (1 + e^{-z})^{-1}$$

    미분 유도 과정:

    1. 연쇄 법칙 적용: $\sigma'(z) = -1 \cdot (1 + e^{-z})^{-2} \cdot (-e^{-z})$
    2. 정리: $\sigma'(z) = \frac{e^{-z}}{(1 + e^{-z})^2}$
    3. $\sigma(z)$ 형태로 분리: $\sigma'(z) = \frac{1}{1 + e^{-z}} \cdot \frac{e^{-z}}{1 + e^{-z}}$
    4. 최종 공식:$$\sigma'(z) = \sigma(z)(1 - \sigma(z))$$

    이 수식의 의미: 출력값($\sigma(z)$)이 0이나 1에 가까워지는 순간, 미분값 $\sigma'(z)$는 무조건 0이 됩니다. 컴퓨터 계산상으로는 소수점 아래로 내려가다 결국 0으로 처리되어 학습이 멈추게 됩니다.

    0.5 근처의 역설 (The 0.5 Paradox)

    수식상으로 $\sigma(z) = 0.5$일 때 기울기는 $0.25$로 최대입니다. 하지만 딥러닝에서는 이조차 충분하지 않습니다.

    1. 연쇄 법칙의 함정: $0.25$는 $1$보다 작습니다. 깊은 신경망에서 $0.25$를 10번, 20번 곱하면 결국 $0$에 수렴합니다.
    2. 데이터의 뭉침: 모든 데이터가 중앙에만 몰려 있으면 모델이 복잡한 패턴을 학습할 변별력을 잃게 됩니다.

     

    결론: 어떻게 해결해야 할까?

    우리의 목표는 데이터를  양극단(기울기 0)으로 보내지 않으면서도, 중앙(0.5)에만 너무 뭉치지 않게 하여 0~1 사이 전체 구간에 고르게 퍼뜨리는 것입니다.

    이를 위해 탄생한 것이 바로 Xavier 초기화입니다

     

    각 노드의 츨력분산이 입력 분산과 동일하도록 가중치를 초기화하는방법입니다. 즉 가중치($W$)를 정할 때, 입력 노드의 개수($n_{in}$)에 맞춰서 크기를 조절합니다.

    $$W \sim \mathcal{N}\left(0, \sigma^2\right) \quad \rightarrow \quad W \sim \mathcal{N}\left(0, \frac{1}{n_{in}}\right)$$

    간단한 숫자 예시 (입력 노드 3개일 때)

    • 설정: 입력 노드 수($n_{in}$) = 3개
    • 가중치($W$) 계산: $\sqrt{\frac{1}{3}} \approx \mathbf{0.57}$
    • Xavier는 가중치들을 약 0.57 정도의 크기로 준비합니다.
    • 예시 속 0.57: "입력이 3개면 가중치는 0.57 정도의 힘을 가져야 균형이 맞아!" (개념 설명용)
    • 실제 딥러닝: "가중치들아, -0.57부터 0.57 사이에서 각자 아무 숫자나 골라잡아!" (실제 작동 방식)
    1. Layer 1
      • 입력 ($x$): $[1, 0, -1]$ (적당히 퍼진 데이터)
      • 합산 ($z_1$): $(1 \times 0.57) + (0 \times 0.57) + (-1 \times 0.57) = \mathbf{0}$
      • 활성화 ($a_1$): $\text{Sigmoid}(0) = \mathbf{0.5}$
        • 참고: 시그모이드는 0.5가 중심이므로, 다음 층 계산을 위해 중심을 0으로 맞추는 보정(Bias)이 있다고 가정하거나 Tanh 함수(중심이 0)라고 생각하면 이해가 더 빠릅니다.
    2. Layer 2 (1층의 결과가 2층의 입력이 됨)
      Xavier의 마법은 여기서 나옵니다. 1층에서 나온 결과값들이 여전히 0 근처(0.5)에 골고루 퍼져 있기 때문에, 2층의 계산 결과도 1층과 비슷하게 나옵니다.
      1. 2층 입력 ($a_1$에서 나온 값들): $[0.85, 0.5, 0.15]$ (1층에서 골고루 퍼진 값들)
      2. 2층 합산 ($z_2$): 중심을 0으로 맞추어 계산해보면: $(0.35 \times 0.57) + (0 \times 0.57) + (-0.35 \times 0.57) \approx \mathbf{0}$
      3. 2층 활성화 ($a_2$): $\text{Sigmoid}(0) = \mathbf{0.5}$

    만약 Xavier가 아니었다면? (가중치 $W=10$ 일 때)

    • Layer 1 통과 후: 결과값이 전부 0.999... 아니면 0.000...이 됩니다.
    • Layer 2 입력: 이제 2층에는 0.999... 같은 극단적인 숫자들만 들어옵니다.
    • Layer 2 결과: $z$값은 더 커지고($0.999 \times 10 + \dots$), 시그모이드는 완전히 벽에 달라붙어 버립니다.
    • 결과: 2층만 지나도 모든 데이터가 똑같이 1 아니면 0이 되어버려서, 데이터 간의 차이가 사라지고 학습이 멈춥니다.

     


    수학적 유도

    수학적으로 이 식이 왜 "분산 보존"을 의미하는지, 복잡한 증명 대신 직관적인 산수로 풀어드릴게요.

    우리가 구하고 싶은 출력($z$)은 입력($x$)과 가중치($w$)를 곱해서 다 더한 값입니다.

    $$z = w_1x_1 + w_2x_2 + \dots + w_{n_{in}}x_{n_{in}}$$

    분산의 성질을 이용한 계산

    통계학에서 두 변수를 곱하거나 더할 때 분산($Var$)은 다음과 같은 성질을 갖습니다. (평균이 0이라고 가정할 때)

    1. 곱셈의 분산: $Var(wx) = Var(w) \times Var(x)$
    2. 덧셈의 분산: $Var(A + B) = Var(A) + Var(B)$

    이 성질을 우리 식($z = \sum wx$)에 그대로 대입해 볼까요?

    $$Var(z) = Var(w_1x_1) + Var(w_2x_2) + \dots + Var(w_{n_{in}}x_{n_{in}})$$
    $$Var(z) = n_{in} \times \left( Var(w) \times Var(x) \right)$$

     

    여기서 Xavier의 마법 (분수 채워넣기)

    우리의 목표는 출력 분산($Var(z)$)을 입력 분산($Var(x)$)과 똑같이 만드는 것입니다.

    즉, $Var(z) = Var(x)$가 되어야 하죠.

    위의 식을 다시 보세요.

    $$Var(z) = \mathbf{n_{in} \times Var(w)} \times Var(x)$$

    자, 왼쪽의 $Var(z)$와 오른쪽의 $Var(x)$가 같아지려면, 가운데 있는 $n_{in} \times Var(w)$1이 되어야만 합니다!

    결론: 왜 가중치 분산이 $1/n_{in}$인가?

    $$n_{in} \times Var(w) = 1$$

    이 식이 성립하려면?

    $$Var(w) = \frac{1}{n_{in}}$$

    이 되어야 합니다.

    그래서 Xavier 공식에서 가중치를 뽑을 때 분산을 $\frac{1}{n_{in}}$ (또는 표준편차를 $\frac{1}{\sqrt{n_{in}}}$)로 설정하는 것입니다.

    요약하자면

    • 입력 노드($n_{in}$)가 많아지면 더해지는 값이 많아져서 전체 에너지가 커지는데,
    • 가중치의 에너지를 딱 노드 개수만큼($1/n_{in}$) 미리 깎아 놓으면,
    • 다 더했을 때 다시 원래의 입력 에너지(분산)와 정확히 1:1이 되는 원리입니다.
Designed by Tistory.