Search

활성화 함수 시그모이드, 왜 주연이 아닐까?

생성일
2025/08/25 14:43
태그
파이쌤
신경망
인공지능 수학
시그모이드
안녕하세요. 파이쌤 입니다.
오늘은 인공지능 수학과 관련있는 활성화 함수에 대해서 이야기 해 보려고 합니다.
신경망의 기본을 이루는 활성화 함수, 그중에서도 가장 먼저 배우게 되는 것이 시그모이드 함수인데요. 한때 신경망의 '짝꿍'이였던 시그모이드 함수에 대해 알아보면서 지금은 왜 은닉층에서 잘 쓰이지 않는지, 그 이유인 기울기 소실(Gradient Vanishing) 문제와 함께 그 대안으로 사용되는 함수까지 흥미롭게 이야기 해 보겠습니다.

신경망

신경망(Neural Network)은 사람의 뇌에서 영감을 얻은 계산 구조입니다.
우리 뇌 속에는 수많은 뉴런(Neuron)이 연결되어 정보를 주고받으며 학습과 사고를 합니다. 인공신경망도 비슷하게, 입력(Input) → 은닉층(Hidden Layer) → 출력(Output) 으로 이어지는 여러 층(layer)과 노드(node)들이 연결되어 데이터를 처리합니다.
입력층(Input Layer) : 우리가 집어넣는 데이터가 들어오는 곳입니다.
은닉층(Hidden Layer) : 입력을 가중치와 편향을 통해 가공하고, 활성화 함수를 거쳐 더 복잡한 특징을 뽑아내는 곳입니다. 신경망의 “머리” 역할을 하는 부분입니다.
출력층(Output Layer) : 최종적으로 문제의 답을 내놓는 곳입니다.
이때 중요한 역할을 하는 것이 바로 활성화 함수(Activation Function)입니다.
활성화 함수는 뉴런이 받은 값을 단순히 전달하는 대신, 비선형적인 변환을 해 주어 신경망이 단순한 선형 계산을 넘어 훨씬 복잡한 문제도 풀 수 있도록 도와줍니다.
신경망을 처음 공부할 때, 우리는 종종 시그모이드(sigmoid) 함수를 활성화 함수로 사용합니다. 출력이 부드럽고 0과 1 사이로 깔끔하게 정리되기 때문에 직관적으로 "딱 좋아 보이는" 함수죠.
오늘은 실제 신경망에서 시그모이드를 활성화 함수로 사용할 때, 입력 값들이 어떻게 변화하고, 왜 문제가 생기는지, 그리고 그 원인이 어디에 있는지를 살펴보겠습니다.

시그모이드 함수란?

먼저 시그모이드는 아래와 같은 함수입니다.
σ(x)=11+ex\sigma(x) = \frac{1}{1 + e^{-x}}
이 함수는 다음과 같은 특징을 갖습니다.
출력 범위는 (0,1)
입력이 0일 때는 σ(0)=0.5\sigma(0) = 0.5
입력이 매우 크거나 작으면, 출력은 각각 1 또는 0에 가까워짐

신경망에서 시그모이드를 쓸 때 어떤 일이 일어날까?

1. 출력이 극단으로 밀려나게 된다.

신경망에서는 입력값에 가중치를 곱하고, 편향을 더한 다음, 활성화 함수를 통과시킵니다.
만약 입력값이 커져서 x0x≫0 또는 x0x≪0 이라면,
출력은 거의 다음처럼 됩니다.
σ(5)0.993,σ(5)0.0067\sigma(5) \approx 0.993,\quad \sigma(-5) \approx 0.0067
대부분의 뉴런 출력이 거의 0 또는 거의 1로 몰리는 극단화 현상이 발생합니다.

첫 번째 은닉층 (그림의 가중치 반영)

a1(1)=0.11+0.1x1+0.2x2,a2(1)=0.31+0.2x1+0.4x2,a3(1)=0.21+0.3x1+0.6x2\begin{aligned}a_1^{(1)} &= 0.1 \cdot 1 + 0.1x_1 + 0.2x_2, \\a_2^{(1)} &= 0.3 \cdot 1 + 0.2x_1 + 0.4x_2, \\a_3^{(1)} &= 0.2 \cdot 1 + 0.3x_1 + 0.6x_2\end{aligned}
z1(1)=σ ⁣(a1(1)),z2(1)=σ ⁣(a2(1)),z3(1)=σ ⁣(a3(1)).\begin{aligned}z_1^{(1)} &= \sigma\!\left(a_1^{(1)}\right), \\z_2^{(1)} &= \sigma\!\left(a_2^{(1)}\right), \\z_3^{(1)} &= \sigma\!\left(a_3^{(1)}\right).\end{aligned}

두 번째 은닉층 (그림의 가중치 반영)

a1(2)=0.11+0.1z1(1)+0.2z2(1)+0.3z3(1),a2(2)=0.21+0.4z1(1)+0.5z2(1)+0.6z3(1),\begin{aligned}a_1^{(2)} &= 0.1 \cdot 1 + 0.1 z_1^{(1)} + 0.2 z_2^{(1)} + 0.3 z_3^{(1)}, \\a_2^{(2)} &= 0.2 \cdot 1 + 0.4 z_1^{(1)} + 0.5 z_2^{(1)} + 0.6 z_3^{(1)},\end{aligned}
z1(2)=σ ⁣(a1(2)),z2(2)=σ ⁣(a2(2)).\begin{aligned}z_1^{(2)} &= \sigma\!\left(a_1^{(2)}\right), \\z_2^{(2)} &= \sigma\!\left(a_2^{(2)}\right).\end{aligned}

층이 거듭 될 수록 은닉층 출력이 포화되며 정보가 사라진다

신경망에서는 각 층에서 나온 값이 다음 층의 입력으로 들어갑니다.
이때 활성화 함수로 시그모이드를 쓰면, 값이 항상 0과 1 사이로 바뀌어 나와요.
처음엔 좋아 보이지만, 층이 거듭되면서 이런 현상이 일어나게 됩니다.

1. 값이 비슷해진다

시그모이드의 출력은 대부분 0에 가깝거나, 1에 가깝거나, 아니면 0.5 근처에 몰리게 됩니다.
이 말은, 입력이 조금 달라도 결과는 거의 비슷해진다는 거고
→ 결국 입력의 차이가 잘 살아남지 못하고, 정보가 점점 사라짐 현상이 일어납니다.

2. 학습이 잘 안 된다

신경망을 학습시킬 때는 "기울기(gradient)"라는 걸 거꾸로 전해주면서 가중치를 고치게 되어요.
(이건 다음 글 주제로 작성할께요~^^)
그런데 시그모이드는 입력이 크거나 작을 때 기울기가 거의 0이 돼 버려,
층이 여러 개 쌓이면 기울기가 계속 줄어들어서, 앞쪽 층까지 학습 신호가 도달하지 못합니다.
이걸 기울기 소실(gradient vanishing)이라고 부릅니다.

3. 한쪽으로 치우친 출력

시그모이드는 출력이 항상 0보다 크니까, 어떤 층의 결과가 항상 양수 쪽으로만 쏠려 있습니다.
이러면 가중치를 바꿀 때 균형 있게 조정하기 어렵고, 학습이 더 느려질 수 있어요.

4. 결과적으로 생기는 문제

은닉층 출력이 다 비슷해져서, 입력 간 차이가 사라지고, 층이 깊어질수록 표현력이 줄어들어 딥러닝의 장점을 못 살리게 됩니다. 결국 기울기가 사라져서 학습이 멈추게 되는 것입니다.

5. 그래서 요즘은?

은닉층에는 ReLU, LeakyReLU, GELU 같은 다른 활성화 함수들을 더 많이 쓰고 시그모이드는 주로 출력층에서, 예를 들어 이진 분류(맞다/아니다) 같은 문제에만 사용되고 있습니다.
전통적으로 사용하던 건, 기술이 발전하면서 새로운 방법으로 대체되고, 한때는 걸림돌이었던 문제들도 하드웨어와 알고리즘의 성장 덕분에 조금씩 사라져 가고 있습니다.
결국 딥러닝의 발전사는 끊임없이 벽에 부딪히고, 또 그것을 넘어서는 사람들의 이야기라고 할 수 있습니다.
그래서 계속 공부해야 하는게 아닌가 합니다.