본문 바로가기
AI

비선형 활성화 함수

by 코낄2 2024. 1. 10.

1. 비선형 활성화 함수(Activation Functions)

비선형 활성화 함수는 신경망에서 사용되는 함수로, 주로 입력값에 비선형성을 추가하여 신경망이 복잡한 비선형 관계를 학습할 수 있도록 도와줍니다. 이 함수들은 신경망의 각 뉴런에 적용되어 그 결과를 생성합니다.

선형 함수는 입력값과 가중치를 곱한 결과를 그대로 출력하기 때문에, 여러 층의 선형 함수를 사용하면 결국 전체 네트워크가 하나의 선형 함수로 표현될 수 있습니다. 이는 층을 여러 번 쌓아도 신경망의 복잡성이 증가하지 않는다는 의미이며, 복잡한 패턴을 학습하는 데 한계가 있습니다.

비선형 활성화 함수를 사용함으로써, 각 뉴런의 출력이 비선형 관계를 나타낼 수 있습니다. 이를 통해 신경망은 다양한 데이터의 패턴을 학습할 수 있게 됩니다. 대표적인 비선형 활성화 함수로는 시그모이드 함수, 하이퍼볼릭 탄젠트 함수, 렐루 함수 등이 있습니다.

 

1-1. 시그모이드

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

x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)

plt.plot(x, y)
plt.plot([0,0], [1.0, 0.0], ':')
plt.title('Sigmoid Function')
plt.show()

1-2. 하이퍼볼릭탄젠트

x = np.arange(-5.0, 5.0, 0.1)
y = np.tanh(x)

plt.plot(x, y)
plt.plot([0,0], [1.0, -1.0], ':')
plt.axhline(y=0, color='orange', linestyle='--')
plt.title('Tanh Function')
plt.show()

1-3. 렐루

def relu(x):
    return np.maximum(0,x)

x = np.arange(-5.0, 5.0, 0.1)
y = relu(x)

plt.plot(x, y)
plt.plot([0,0], [5.0, 0.0], ':')
plt.title('Relu Function')
plt.show()

  • ReLU의 수학적 표현은 f(x) = max(0, x)로, 입력값이 0보다 크면 그 값을 그대로 출력하고, 0 이하면 0을 출력합니다. 이 단순한 비선형성 때문에, ReLU는 신경망의 학습 속도를 개선하고, 이전에 많이 사용되던 시그모이드 함수나 하이퍼볼릭 탄젠트 함수보다 효율적으로 깊은 네트워크를 학습시킬 수 있습니다.
  • 양수만 출력하기 때문에 활성화 함수 ReLU를 거친 값들이 연속해서 0 값이 되는 경우가 있어 이를 Dead ReLU라고 부릅니다. 뉴런의 10-20%까지 이런 현상을 보이게 되면 학습에 문제가 생길 수 있습니다. 이를 개선하기 위해 Leaky ReLU, Parametric ReLU 가 탄생하였습니다. 

리키렐루

  • 입력값이 음수일 때도 완전히 0이 되지 않고 매우 작은 기울기를 가진 선형 함수를 사용한다. 이 함수의 수학적 표현은 f(x) = x if x > 0, ax if x ≤ 0로, '죽은 뉴런' 문제를 해결하려는 목적으로 제안되었다.

Swish 함수

  • Swish란 딥 러닝에서 사용되는 활성화 함수 중 하나로, Google Brain 팀에 의해 제안되었다. 
  • Swish 함수는 ReLU(Rectified Linear Unit)와 같이 비선형 함수로, 모델의 비선형 패턴을 학습하는 중요한 역할을 한다. ReLU와 달리 Swish 함수는 출력 범위가 음수가 아닌 값으로 제한되지 않는 장점을 갖는다. 또한, β를 조정함으로써 활성화 함수의 형태를 조정할 수 있어서 더욱 유연한 모델링이 가능하다.
    소프트플러스 함수 (Softplus Function)
  • 소프트플러스 함수는 입력값을 받아 로그 함수를 적용한 후 지수 함수를 취한 것입니다.
  • 수학적으로는 로 표현됩니다.
  • 주로 인공신경망에서 사용되며, 활성화 함수로 활용될 때 ReLU(Rectified Linear Unit) 함수의 부드러운 버전으로 간주됩니다.

1-4. 소프트맥스

x = np.arange(-5.0, 5.0, 0.1)
y = np.exp(x) / np.sum(np.exp(x))

plt.plot(x, y)
plt.title('Softmax Function')
plt.show()

  • 소프트맥스 함수는 여러 개의 입력값을 받아 정규화된 확률 분포로 변환하는 함수입니다. 각 클래스에 대한 확률 값을 계산합니다.
  • 주로 다중 클래스 분류 문제에서 출력층의 활성화 함수로 사용됩니다.

2. 역전파(Backpropagation)

역전파(Backpropagation)는 신경망 학습 알고리즘 중 하나로, 신경망의 가중치를 조정하여 손실 함수를 최소화하는 과정을 나타냅니다.

  1. 순전파 (Forward Pass)
    • 입력 데이터는 각 레이어를 통과하며 가중치와 활성화 함수를 적용하여 출력값이 생성됩니다.
  2. 손실 계산
    • 예측값과 실제값 간의 차이를 나타내는 손실을 계산합니다.
    • 손실은 예측값과 실제값 사이의 차이를 나타내며, 이 값이 최소화되어야 합니다.
  3. 역전파 (Backward Pass)
    • 손실 함수를 각 가중치로 미분하여 각 가중치에 대한 기울기(gradient)를 계산합니다.
    • 계산된 기울기를 사용하여 각 가중치를 업데이트합니다.
    • 이때, 학습률(learning rate)이 사용되어 얼마나 크게 업데이트할지를 조절합니다.
  4. 반복:
    • 순전파, 역전파, 가중치 업데이트의 과정을 여러 번 반복하여 신경망이 데이터를 학습하도록 합니다.

역전파는 경사 하강법의 한 형태로, 미분을 통해 손실을 최소화하는 방향으로 가중치를 조정합니다. 이 과정을 통해 신경망은 학습 데이터에서 패턴을 학습하고, 새로운 데이터에 대한 일반화 능력을 향상시킵니다.

역전파

'AI' 카테고리의 다른 글

간단한 CNN모델 만들기 실습  (1) 2024.01.11
CNN 기초  (0) 2024.01.10
딥러닝  (0) 2024.01.09
데이터 로더  (0) 2024.01.09
파이토치로 구현한 논리회귀  (0) 2024.01.08