컴퓨터과학/딥러닝

Softmax with Loss 계층의 특징과 구현 방법

InfHo 2023. 2. 11. 23:53

softmax 함수는 딥 러닝, 특히 분류 작업을 위한 신경망의 출력 계층에서 널리 사용되는 활성화 함수로, softmax 함수는 입력 값을 출력 클래스에 대한 확률 분포에 매핑하므로 네트워크의 출력을 각 클래스의 확률로 쉽게 해석할 수 있습니다. 이 글에서는 소프트맥스의 특징과 softmax wiht loss 계층을 구현하는 방법을 상세하게 설명합니다.

목차

     

    소프트맥스-함수
    소프트맥스 함수

    소프트맥스 계층의 특성

    softmax 함수는 임의의 실수 값의 입력 벡터를 가져와 K 클래스에 대한 확률 분포로 매핑합니다. 여기서 K는 클래스 수입니다.

    softmax 함수는 다음과 같이 정의됩니다.

    y_i = exp(x_i) / sum_j(exp(x_j))

    여기서 y_i는 i번째 클래스의 확률이고 x_i는 i번째 클래스의 입력 값입니다.

    softmax 함수에는 두 가지 주요 속성이 있습니다. 미분 가능하고 출력 확률의 합이 1이 되도록 보장하여 적절한 확률 분포를 만듭니다.

    소프트맥스 함수는 종종 음의 로그 우도 손실이라고도 하는 교차 엔트로피 손실 함수와 함께 사용됩니다. 교차 엔트로피 손실 함수는 분류 작업에 널리 사용되는 손실 함수입니다. 예측된 확률 분포와 실제 확률 분포 간의 차이를 측정합니다. 교차 엔트로피 손실은 다음과 같이 정의됩니다.

    L = -sum_i(t_i * log(y_i))

    여기서 t_i는 i번째 클래스의 실제 확률이고 y_i는 i번째 클래스의 예측 확률입니다.

    소프트맥스 함수와 교차 엔트로피 손실 함수를 결합하면 분류 작업을 위해 신경망을 쉽게 훈련할 수 있습니다. softmax 함수는 네트워크의 출력을 확률 분포에 매핑하고 교차 엔트로피 손실 함수는 예측 확률 분포와 실제 확률 분포 사이의 차이점을 측정합니다.

    요약하면 소프트맥스 함수는 딥 러닝, 특히 분류 작업을 위한 신경망의 출력 계층에서 널리 사용되는 활성화 함수입니다. softmax 함수는 입력 값을 출력 클래스에 대한 확률 분포에 매핑합니다. 교차 엔트로피 손실 함수는 분류 작업에 널리 사용되는 손실 함수로, 예측된 확률 분포와 실제 확률 분포 간의 차이를 측정합니다. 소프트맥스 함수와 교차 엔트로피 손실 함수를 결합하면 분류 작업을 위해 신경망을 쉽게 훈련할 수 있습니다.

     

    [컴퓨터과학/딥러닝] - 소프트맥스 함수란 무엇인가? softmax 함수 특징부터 구현까지

    softmax with loss 계층 구현

    import numpy as np
    
    class SoftmaxWithLoss:
        def __init__(self):
            self.loss = None
            self.y = None # softmax output
            self.t = None # target
    
        def forward(self, x, t):
            self.t = t
            self.y = softmax(x)
            self.loss = cross_entropy_error(self.y, self.t)
    
            return self.loss
    
        def backward(self, dout=1):
            batch_size = self.t.shape[0]
            dx = (self.y - self.t) / batch_size
    
            return dx
    
    def softmax(x):
        if x.ndim == 2:
            x = x.T
            x = x - np.max(x, axis=0)
            y = np.exp(x) / np.sum(np.exp(x), axis=0)
            return y.T 
    
        x = x - np.max(x) # prevent overflow
        return np.exp(x) / np.sum(np.exp(x))
    
    def cross_entropy_error(y, t):
        if y.ndim == 1:
            t = t.reshape(1, t.size)
            y = y.reshape(1, y.size)
            
        # prevent division by zero
        y = np.clip(y, 1e-15, 1 - 1e-15)
    
        return -np.sum(t * np.log(y))

    이 예제에서 SoftmaxWithLoss 클래스는 조작식 인터페이스로 진행됩니다. 순방향 방법은 입력 벡터 x와 목표 벡터 t를 취하여 입력의 최대와 예상 가능성이 있는 확률과 실제로 가능한 간헐적 연결 엔트로피 손실을 계산합니다. 역방향 방법은 손실에 대한 입력의 회전을 측정합니다. softmax는 바로, cross_entropy_error 및 역방향 메서드는 아래쪽으로 됩니다.

    신경망에서 SoftmaxWithLoss 클래스를 사용하려면 클래스의 차단을 방해하여 네트워크의 순방향 및 역방향 전달 중 적절하게 순방향 및 역방향 방법을 호출해야 합니다. 다음은 신경망에서 SoftmaxWithLoss 클래스를 사용하는 방법에 대한 예입니다.

    # Create an instance of the SoftmaxWithLoss class
    loss_layer = SoftmaxWithLoss()
    
    # Input data
    x = np.random.randn(3, 2)
    t = np.array([0, 1]) # target labels
    
    # Forward pass
    loss = loss_layer.forward(x, t)
    
    # Backward pass
    dx = loss_layer.backward()

    이것이 매우 기본적인 구현이라는 점을 언급하는 것이 중요하며, 실제로는 손실 계층이 있는 소프트맥스와 네트워크의 기타 작업을 효율적인 방식으로 처리하기 위해 미리 빌드된 함수 및 최적화 프로그램이 있는 Pytorch 또는 Tensorflow와 같은 라이브러리를 사용하는 것이 좋습니다. , 또한 일반적으로 역전파를 자동으로 처리합니다.

     

    https://jkcb.tistory.com/category/%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B3%BC%ED%95%99/%EB%94%A5%EB%9F%AC%EB%8B%9D?page=2 

     

    '컴퓨터과학/딥러닝' 카테고리의 글 목록 (2 Page)

    모든 분야의 정보를 담고 있는 정보의 호텔입니다. 주로 컴전기입니다.

    jkcb.tistory.com