본문 바로가기
🤖AI

[신경망] 활성화 함수

by haegomm 2025. 5. 31.

딥러닝을 공부하다 보면 자주 나오는 용어 중 하나가 활성화 함수(Activation Function)입니다. 오늘은 이 활성화 함수가 무엇인지, 왜 중요한지에 대해 정리해보겠습니다.


1️⃣ 퍼셉트론과 신경망

🔍 퍼셉트론(perceptron)이란?

퍼셉트론은 인공 뉴런을 흉내 낸 가장 기본적인 모델입니다.
입력값에 가중치를 곱해 더한 후

정해진 임계값을 넘으면 1, 넘지 않으면 0을 출력하는 아주 간단한 구조입니다.

 

하지만 퍼셉트론은 비선형 문제(XOR 문제 등)를 풀지 못합니다.
그래서 이를 극복하기 위해 등장한 것이 바로 다층 퍼셉트론(MLP)입니다.

🔍 다층 퍼셉트론(MLP)이란?

다층 퍼셉트론은 가장 기본적인 신경망이라고 할 수 있습니다.

하나의 퍼셉트론만으로는 복잡한 문제를 해결하기 어려워 여러 개의 퍼셉트론을 층(layer) 단위로 쌓아 올린 구조를 말합니다.

이렇게 하면 복잡한 패턴을 학습할 수 있게 됩니다.

 

다층 퍼셉트론을 발전시키고 복잡하게 만든 것이 바로 우리가 흔히 듣는 CNN(합성곱 신경망)과 RNN(순환 신경망) 등이며 이런 구조들을 딥러닝(Deep Learning)이라고 합니다.

(CNN, RNN은 이후 포스팅 해보겠습니다!)

 

이 신경망의 각 뉴런에서 출력 값을 결정할 때 사용하는 함수가 바로 오늘 정리할 활성화 함수입니다.


2️⃣ 활성화 함수(Activation Function)란?

활성화 함수는 뉴런이 입력받은 신호를 얼마나 강하게 다음 뉴런에 전달할지 결정합니다.

이를 통해 신호의 크기와 방향을 조정해줍니다.

신경망의 뉴런을 전구💡라고 생각해볼게요!
전구는 스위치로 완전히 켜고 끌 수도 있고, 다이얼을 이용해서 밝기를 미세하게 조정할 수도 있습니다.
활성화 함수는 이렇게 전구의 밝기를 조절하는 다이얼과 같은 역할을 합니다!

 

‼️ 활성화 함수가 중요한 이유

신경망에 비선형성(nonlinearity)을 부여하기 위해서입니다.

만약 모든 뉴런이 선형 함수만 사용한다면

아무리 많은 층을 쌓아도 결국 하나의 선형 함수로만 표현될 수밖에 없습니다.

 

이를 수식으로 보면 명확해집니다:

y = A₃(A₂(A₁x + b₁) + b₂) + b₃ ➡️ y=Ax+b


여러 개의 선형 함수를 겹쳐봤자 결국엔 위와 같이 하나의 직선 공식 형태로 정리됩니다.

이렇게 되면 신경망은 단순히 직선으로 분류할 수 있는 문제만 해결 가능하고 곡선이나 복잡한 경계를 가진 문제(이미지, 음성, 자연어 등)를 해결할 수 없게 됩니다.

 

반대로 활성화 함수를 통해 비선형성을 주면 층을 더 깊게 쌓을수록 훨씬 복잡한 패턴을 학습할 수 있게 됩니다.

마치 도화지에 색연필로 그림 🎨 을 그릴 때
한 가지 색으로 겹쳐 칠한다면 결국 한 가지 색밖에 표현할 수 없지만
다양한 색연필을 쓰면 훨씬 다채로운 그림을 만들 수 있는 것과 같습니다.


3️⃣ 주요 활성화 함수들

📌 계단 함수(Step Function)

가장 기본적인 형태로 퍼셉트론에서 주로 사용됩니다.

def step(x):
    return 1 if x > 0 else 0

  • 입력이 0보다 크면 1, 아니면 0 출력
  • 갑자기 출력값이 바뀌어 미분이 불가능 → 신경망 학습에 부적합

📌 시그모이드 함수(Sigmoid Function)

출력을 부드러운 S자 형태로 0~1.0 사이의 값으로 변환합니다.

import numpy as np
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

  • 연속적이고 미분 가능해서 학습이 용이
  • 입력이 너무 크거나 작으면 기울기(gradient)가 거의 0에 가까워져 학습이 느려지거나 멈출 수 있음 (📉기울기 소실 문제)

📌 ReLU 함수(Rectified Linear Unit)

현대 딥러닝 모델에서 가장 많이 쓰이는 활성화 함수입니다.

def relu(x):
    return max(0, x)

  • 음수는 0을 출력하고, 양수는 그대로 출력
  • 간단한 계산으로 빠른 학습 가능
  • 음수 영역에서 기울기가 0 → 뉴런이 죽을 수 있는 문제 발생(Dying ReLU 문제)

❗ Dying ReLU 문제란?

입력이 계속 음수라면 그 뉴런은 항상 0을 출력하고 기울기도 0이 되어 다시는 학습되지 않습니다.

즉, 죽은 뉴런(dead neuron)이 되는 것입니다.

🙅‍♂️ 마치 아무리 말을 걸어도 반응하지 않는 사람처럼 학습 과정에서 완전히 제외됩니다.


📌 소프트맥스 함수(Softmax Function)

소프트맥스 함수는 각 뉴런의 출력을 상대적 크기에 따라 확률 분포로 바꿔줍니다.
보통 분류 문제의 출력층에서 사용됩니다.

def softmax(x):
    c = np.max(x)  # 오버플로 방지
    exp_x = np.exp(x - c)
    return exp_x / np.sum(exp_x)
  • 각 클래스에 대한 확률값(0~1.0) 출력
  • 출력값들의 총합은 항상 1
  • 각 클래스(고양이, 개, 토끼 등)의 확률을 예측하는 데 사용됩니다.
  • 오버플로(overflow) 문제: 입력이 너무 크면 지수(exp) 계산값이 무한대로 커질 수 있습니다.

 

🔍 오버플로 문제 해결하기 (최댓값 빼기)

지수 함수(exp)는 입력값이 커질수록 기하급수적으로 커지기 때문에

입력이 너무 크면 컴퓨터가 무한대(overflow)로 처리해버릴 수 있습니다.

 

그래서 입력값 전체에서 가장 큰 값을 빼주는데 이는 수치적으로 안정적인 계산을 하기 위함입니다!

예를 들어 [1010, 1005, 1000]이 있을 때
[exp(1010), exp(1005), exp(1000)]은 매우 큰 값이 나와 오버플로가 발생할 수 있지만
최대값 1010을 빼면 [exp(0), exp(-5), exp(-10)]이 되어 매우 안정적인 작은 값으로 바뀌게 됩니다.

 

이때 각 값에서 동일한 값을 뺐기 때문에 상대적인 차이는 유지되며

따라서 출력되는 확률 결과는 원래 값과 동일합니다.

즉, 결과에는 아무런 영향 없이 계산 과정만 더 안정적으로 만들어 주는 것입니다:)

 


밑바닥 부터 시작하는 딥러닝 책을 읽고 정리하였습니다.

 

 

'🤖AI' 카테고리의 다른 글

[신경망] 퍼셉트론과 다층 퍼셉트론  (0) 2025.04.01