목차
개요
ReLU(Rectified Linear Unit) 함수는 신경망에서 일반적으로 사용되는 비선형 활성화 함수입니다.
다음과 같이 정의됩니다.
ReLU(x) = max(0, x)
모든 음수 입력 값을 0으로 매핑하고 음수가 아닌 모든 입력 값을 그대로 유지합니다.
이 함수는 실수에 대해서만 정의되며, 양수일 때 입력과 음수일 때 0과 같은 출력을 생성합니다.
특징
ReLU 활성화 함수는 구현이 간단하고 계산적으로 효율적이며 0에서 간단한 임계값 연산으로 정의되며 지수나 로그와 같은 복잡한 수학 연산이 없습니다.
ReLU는 시그모이드와 같은 다른 활성화 함수에서 흔히 발생하는 기울기 소실 문제를 방지하는 데 도움이 되기 때문에 심층 신경망에서 널리 사용됩니다. ReLU 함수의 그래디언트는 0 또는 1이므로 그래디언트 소실 문제를 피할 수 있습니다. 이 기능은 또한 훈련 프로세스를 가속화하고 네트워크가 더 빠르게 수렴되도록 합니다.
ReLU는 매우 인기 있는 활성화 함수이며 많은 딥 러닝 아키텍처에서 사용되며 지수나 로그와 같은 복잡한 수학 연산이 없기 때문에 계산적으로도 효율적입니다.
그러나 ReLU는 뉴런의 출력이 항상 0이고 학습을 중지할 때 발생하는 죽어가는 ReLU 문제와 같은 경우에 일부 문제를 일으킬 수 있다는 점에 주목할 가치가 있습니다. 이 문제를 피하기 위해 Leaky ReLU, PReLU 및 ELU와 같은 ReLU 함수의 일부 변형이 제안되었습니다.
구현
다음은 numpy 라이브러리를 사용하여 Python에서 ReLU 함수를 구현하는 방법의 예입니다.
import numpy as np
def relu(x):
return np.maximum(0, x)
이 함수는 단일 입력 x를 사용하고 여기에 ReLU 함수를 적용합니다.
numpy 배열을 입력으로 전달할 수도 있으며 함수는 배열의 모든 요소에 요소별로 ReLU를 적용합니다.
다음은 ReLU 기능을 구현하는 또 다른 방법입니다.
def relu(x):
return x * (x > 0)
가중치 초깃값
ReLU 함수 가중치의 초기값은 신경망의 학습과 성능에 영향을 줄 수 있는 중요한 요소입니다.
가중치의 초기값은 훈련 과정에 큰 영향을 미칠 수 있으며,
수렴 속도, 훈련의 안정성, 모델의 최종 정확도에 영향을 미칠 수 있습니다.
신경망의 가중치를 초기화하는 방법에는 여러 가지가 있지만 가장 일반적인 방법은 임의 초기화를 사용하는 것입니다.
임의 초기화의 목적은 뉴런 간의 대칭성을 깨서 각 뉴런이 서로 다른 기능을 학습하도록 하는 것입니다.
ReLU 활성화 함수의 경우 작은 양수 값으로 임의 초기화를 사용하는 것이 좋습니다.
예를 들어 평균이 0이고 작은 표준 편차가 약 0.01 또는 0.02인 정규 분포를 사용하는 것이 일반적입니다.
가중치를 양수 값으로 초기화하면 모든 뉴런이 양수 출력을 생성하기 시작하므로 죽은 ReLU 문제를 피할 수 있습니다.
다음은 numpy를 사용하여 가중치를 초기화하는 방법의 예입니다.
weights = np.random.normal(0, 0.02, (input_size, hidden_size))
이 코드는 평균이 0이고 표준 편차가 0.02인 정규 분포를 사용하여 가중치를 초기화합니다.
가중치의 모양은 (input_size, hidden_size)이며 입력 및 숨겨진 뉴런의 수에 해당합니다.
Xavier 초기화, He 초기화 등과 같은 다른 초기화 방법을 사용할 수 있다는 점은 주목할 가치가 있습니다.
이러한 방법은 다양한 유형의 활성화 기능 및 아키텍처를 처리하도록 설계되었으며 경우에 따라 더 나은 성능을 제공할 수 있습니다.
참고