컴퓨터공학/NN

신경망에서 사용되는 활성화함수들

airoot 2024. 8. 28. 17:27

신경망에서 사용되는 활성화 함수는 신경망의 출력값을 비선형적으로 변환하여 학습과정을 도와준다. 주요 활성화 함수에는 다음과 같은 것들이 있다.

 

1. 계단 함수 (Step Function)

역치값 이상이면 1, 아니면 0

인공지능 초기에 사용하였으나 지금은 잘 사용하지 않는다.

 

2. 시그모이드 함수 (Sigmoid Function)

출력값이 0과 1 사이로 압축된다. 그러나, 시그모이드 함수는 큰 값에서 그래디언트가 매우 작아져서 학습이 느려질 수 있다 (즉, 기울기 소실 문제가 발생할 수 있음).

public static double sigmoid(double x) {
    return 1 / (1 + Math.exp(-x));
}

 

3. 하이퍼볼릭 탄젠트 함수 (Tanh Function)

는 쌍곡 탄젠트 함수, 또는 하이퍼볼릭 탄젠트 함수. 이는 쌍곡 함수(hyperbolic functions)의 하나로, 정의는 다음과 같다.

출력값이 -1과 1 사이로 변환된다. 시그모이드 함수보다 더 넓은 출력 범위를 가지며, 시그모이드 함수보다 중간 값 주변에서의 기울기 소실 문제가 덜하다.

public static double tanh(double x) {
    return Math.tanh(x);
}

 

4. 렐루 함수 (ReLU: Rectified Linear Unit)

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

음수 입력값에 대해 0을 출력하고, 양수 입력값에 대해서는 그대로 값을 반환한다. 단순하고 계산이 빠르며, 기울기 소실 문제가 덜 발생한다. 그러나 음수 입력에 대해 기울기가 0이 되어 뉴런이 죽을 수 있다 ("dying ReLU" 문제).

public static double relu(double x) {
    return Math.max(0, x);
}

 

5. 리키 렐루 (Leaky ReLU)

Leaky ReLU(x)=max⁡(αx,x) 여기서 α는 작은 양수 값 (일반적으로 0.01).

ReLU와 유사하지만 음수 영역에서도 작은 기울기를 가집니다. 따라서 "dying ReLU" 문제를 완화할 수 있다.

public static double leakyReLU(double x, double alpha) {
    return x > 0 ? x : alpha * x;
}

 

6. ELU (Exponential Linear Unit)

ReLU와 유사하지만, 음수 입력에서도 미세한 출력을 반환하여 학습이 지속되도록 한다.

public static double elu(double x, double alpha) {
    return x > 0 ? x : alpha * (Math.exp(x) - 1);
}

 

7. Swish 함수

최근에 제안된 함수로, ReLU나 Sigmoid보다 더 나은 성능을 보일 수 있다.

public static double sigmoid(double x) {
    return 1 / (1 + Math.exp(-x));
}

 

8. Softmax 함수

주로 신경망의 마지막 층에서 사용되며, 다중 클래스 분류 문제에서 각 클래스에 대한 확률을 출력하도록 한다.

public static double[] softmax(double[] input) {
    double[] output = new double[input.length];
    double sum = 0.0;

    // 입력값에 대해 지수 함수 적용
    for (int i = 0; i < input.length; i++) {
        output[i] = Math.exp(input[i]);
        sum += output[i];
    }

    // 지수 함수 결과를 합계로 나누어 정규화
    for (int i = 0; i < output.length; i++) {
        output[i] /= sum;
    }

    return output;
}

 

이 외에도 여러 변형된 활성화 함수들이 연구되고 사용되지만, 위에 나열한 함수들이 가장 널리 사용되고 있다.

'컴퓨터공학 > NN' 카테고리의 다른 글

손실함수(loss function)  (0) 2024.08.28
경사하강법(Gradient Descent)  (0) 2024.08.28
Word2Vec  (0) 2024.08.21
해석 가능한 인공지능(Explainable AI, XAI)  (0) 2024.08.20
Forward-Forward Algorithm  (0) 2024.08.16