본문 바로가기
딥러닝 with Python

[딥러닝 with 파이썬] PReLU란? Parametric ReLu란? (활성화함수, Activation Function)

by CodeCrafter 2023. 10. 3.
반응형

이번에 알아볼 것은 PReLU입니다.

 

활성화 함수의 한 종류로서, ReLU의 변형 형태인데요.

 

PReLU가 어떤 특징과 장점이 있길래 사용되는지 한번 알아보겠습니다.

 

 

1. ReLU란?

- PReLU에 대해서 알아보기 전에 먼저 ReLU에 대해서 알아보겠습니다. 앞서 설명드렸던 PReLU는 ReLU의 변형함수 형태이기 때문이죠

 

- ReLU란, Rectified Linear Unit으로 딥러닝에서 가장 많이 사용되는 활성화 함수 중 하나입니다.

 

- 이는, 입력이 0보다 크면 입력을 그대로 출력하고, 0보다 작으면 0을 출력하는 함수인데요. 이를 수식으로 정의하면 아래와 같습니다.

 

* ReLU(x) = max(0,x)

 

- 그래프로 표현해보면 아래와 같습니다.

 

 

- ReLU의 함수는 다음과 같은 특징을 가지고 있는데요

 1) 비선형성 : ReLu함수는 선형 함수가 아니기에, 딥러닝 모델에서 활성화 함수로 사용되면서 비선형성을 추가할 수 있습니다.

 2) 빠른 학습 : ReLu함수는 미분 가능하고, 미분값이 0이 아닌 구간이 많기 때문에 빠르게 학습이 가능합니다.

 3) Dying ReLU 문제 : ReLU 함수는 학습 도중 특정 뉴런이 항상 0을 출력하는 상태에 이르는 문제를 가지고 있습니다.

 

2. PReLU란?

- 앞서 설명 드렸던 PReLU는 ReLU앞에 Parametric이 붙은 단어입니다.

 

- 여기서 parametric은, 모델 또는 시스템이 조절 가능한 매개변수를 사용하여 성능을 측정하거나 개선하는 방법을 의미합니다. 이는 PReLU의 식을 보면 알 수 있는데요

 

* PReLU(x) = x             (if x>0)

                      alpha * x (if x<=0)

 

- 이러한 PReLU의 특징을 정리하면 아래와 같습니다

 * 학습 가능한 매개변수 (alpha) : PReLU는 ReLU와 다르게 입력이 음수인 경우에 0을 출력하는 것이 아닌, 학습 가능한 매개변수 alpha를 사용해서 음수 영역의 기울기를 조절할 수 있습니다. 이로 인해 음수 영역에서의 비선형성을 증가시킬 수 있습니다.

 * Overcome Dying ReLU 문제 해결 : ReLU의 주요 문제 중 하는 Dying ReLU입니다. 이는 학습 도중 특정 뉴런이 항상 0을 출력하는 상태에 빠지면 해당 뉴런이 더이상 업데이트 되지 않는 문제가 생기는데, PReLU는 이러한 문제를 완화할 수 있습니다.

 

- 이는, 비정형 데이터인 이미지 데이터를 처리하는데 많이 사용되면 Inception V3나 ResNet 등의 모델에서 많이 활용되고 있습니다.

 

- 파이썬 코딩을 통해 PReLU 함수에 대해 그려보면 아래와 같습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import numpy as np
import matplotlib.pyplot as plt
 
# PReLU 활성화 함수 정의
def prelu(x, alpha):
    return np.where(x > 0, x, alpha * x)
 
# 입력 데이터 생성
x = np.linspace(-5, 5, 1000)  # -5부터 5까지의 범위에서 1000개의 점 생성
 
# alpha 값을 다르게 설정하여 PReLU 그래프 그리기
alphas = [0.1, 0.5, 1.0]  # 다양한 alpha 값 설정
plt.figure(figsize=(10, 6))
 
for alpha in alphas:
    y = prelu(x, alpha)
    plt.plot(x, y, label=f'alpha = {alpha}')
 
plt.xlabel('Input')
plt.ylabel('Output')
plt.title('Parametric ReLU (PReLU) Activation Function')
plt.legend()
plt.grid(True)
plt.show()
 
cs

 

 

* 설정된 alpha 값에 의해서 음수 입력값에 따른 출력값이 달라짐을 알 수 있습니다.

 

 

- PReLU에서 alpha값이 업데이트 되는 과정은 경사하강법을 통해서 진행되는데요

* Squared Error로 정의된 손실함수를 미분하여 Learning rate를 곱해 alpha에 더해주는 과정을 반복하는 방법으로 업데이트가 진행됩니다.

반응형

댓글