이번에 알아볼 것은 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에 더해주는 과정을 반복하는 방법으로 업데이트가 진행됩니다.
'딥러닝 with Python' 카테고리의 다른 글
[딥러닝 with Python] SRGAN이란? / Super Resolution GAN (1/2) / SRGAN의 개념 (1) | 2023.10.05 |
---|---|
[딥러닝 with 파이썬] 픽셀셔플 / Pixel Shuffle (0) | 2023.10.04 |
[딥러닝 with 파이썬] ResNet(잔차신경망)의 개념 (2/2) / CIFAR-10 활용해서 이미지 분류모델 구현 (0) | 2023.10.01 |
[딥러닝 with 파이썬] RESNET(잔차신경망)의 개념 (1/2) (1) | 2023.10.01 |
[딥러닝 with 파이썬] 분류(Classification) / MNIST 데이터 사용 (0) | 2023.09.29 |
댓글