본문 바로가기
머신러닝 & 딥러닝

18. 비선형 활성화 함수

by 곽정우 2024. 6. 13.

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)

# 가운데 점선 추가
# x,y (0,0) 위치에 y 선으로 0 ~ 1 까지 점선을 그리라는 의미
plt.plot([0,0],[1.0,0.0],':')
plt.title('Sigmoid Function')
plt.show()

# 시그모이드 구조를 확인하기 위해 임의의 값을 생성하여 그래프를 확인해봅니다.
# 시각화된 그래프를 통해 시그모이드 함수가 0과 1 사이의 값을 출력하며, 이를 이진 분류 문제에서 사용된다는 것을 알 수 있습니다.

 

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

  • 하이퍼볼릭 사인 함수(shin)와 하이퍼볼릭 코사인 함수 (cosh)로 정의
  • 신경망의 활성화 함수로 자주 사용됨
  • 출력값이 -1에서 1사이로 조정되어 학습 과정에서 중심화된 데이터 분포를 유지
  • 기울기 소실 문제를 완화하는데 도움
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과 0 사이의 결과를 반환합니다.
# 또한, 시그모이드 함수에 비해 기울기가 작아지지 않는 구간이 넓어 학습 효율성이 뛰어납니다.
# 따라서, 하이퍼볼릭 탄젠트 함수는 시그모이드 함수의 대안으로 사용할 수 있습니다.

 

1-3. 렐루

  • 신경망에서 널리 사용되는 활성화 함수
  • 입력이 양수일 때는 그대로 출력하고, 음수일 때는 0을 출력하는 형태
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],':')   # x,y (0,0) 위치에 y 선으로 0 ~ 1 까지 점선을 그리라는 의미
plt.title('Relu Function')
plt.show()

# ReLU 함수는 입력이 양수일 때는 입력 값과 비례하여 출력을 생성하고, 음수일 때는 0을 출력하는 특성을 지니고 있습니다.
# 이는 다중 선택지 중 하나를 선택해야 하는 상황에서 유용하게 사용될 수 있습니다.
# 그러나 입력이 음수일 경우, 그래디언트가 0이 되어 가중치 업데이트가 이루어지지 않는 문제가 발생합니다.
# 이러한 이유로 모델을 구성할 때, 단일 레이어들의 출력을 증폭시키는 역할로 사용되며, 학습 과정에서는 주로 소프트맥스(softmax) 함수를 사용합니다.

 

1-4. 소프트맥스

  • 신경망의 출력층에서 활성화 함수로 사용
  • 분류 문제에서 각 클래스에 대한 확률을 출력하는 데 유용
  • 함수의 출력은 0과 1사이의 값으로 변환되며, 출력값의 총합은 1이됨
  • 미분 가능하므로 역전파 알고리즘을 사용할 수 있음
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)

  • 1969년 XOR는 '지금의 기술로 풀 수 없다' 라는 것을 민스키 교수님이 수학적으로 증명함
  • 1974년 Paul Werbos에 의해 박사 논문에서 해결됨
    • W,b를 이용해 주어진 입력을 가지고 출력을 만들어 낼 수 있음 -> 출력이 우리가 가지고 있는 값과 다른 출력일 경우 W,b를 조절함
  • 1986년 Hinton에 의해 위 같은 방법을 독자적으로 만들어 냄(재발견)

  • 역전파는 인공신경망에서 학습을 수행하는 데 사용되는 알고리즘으로, 네트워크의 가중치를 업데이트하기 위해 오차를 출력층에서 입력충으로 전파하여 각 가중치의 기울기를 계산
  • 신경망이 주어진 데이터에 대해 예측을 얼마나 잘하는지 평가하고 네트워크의 가중치를 조정하여 예측 성능을 향상시키는 중요한 과정
  • 역전파 알고리즘 단계
    1. 순전파 계산
      • 입력 데이터를 각 층을 통과시키며 네트워크의 출력을 계산
      • 출력층에서 손실 함수를 사용하여 출력과 실제 값의 오차를 계산
    2. 오차 계산
      • 출력층에서 시작하여 이전 층으로 이동하며 오차를 계산
      • 출력층의 오차는 손실 함수의 미분으로 구함
    3. 기울기 계산
      • 각 층에서 가중치와 바이어스에 대한 기울기를 계산
      • 기울기는 오차와 활성화 함수의 미분을 사용하여 구함
    4. 가중치 업데이트
      • 경사 하강법을 사용하여 가중치와 바이어스를 업데이트 함

'머신러닝 & 딥러닝' 카테고리의 다른 글

20. 간단한 CNN 모델 만들기  (0) 2024.06.17
19. CNN 기초  (0) 2024.06.13
17. 딥러닝  (0) 2024.06.13
16. 데이터 로더  (0) 2024.06.13
15. 파이토치로 구현한 논리회귀  (0) 2024.06.13