Python의 NumPy Softmax

Muhammad Waiz Khan 2023년1월30일
  1. Python의 1D 배열을위한 NumPy Softmax 함수
  2. Python의 2D 배열을위한 NumPy Softmax 함수
Python의 NumPy Softmax

이 튜토리얼은 Python에서 NumPy 라이브러리를 사용하여 softmax 함수를 구현하는 방법을 설명합니다. softmax 함수는 로지스틱 함수의 일반화 된 다차원 형식입니다. 다항 로지스틱 회귀 분석 및 인공 신경망의 활성화 함수로 사용됩니다.

softmax 함수는(0,1)간격에서 배열의 모든 요소를 정규화하여 확률로 처리 할 수 있도록합니다. softmax 함수는 다음 공식으로 정의됩니다.

소프트 맥스 공식

NumPy 라이브러리를 사용하여 Python의 1 차원 및 2 차원 배열에서 softmax 함수를 구현하는 방법을 살펴 보겠습니다.

Python의 1D 배열을위한 NumPy Softmax 함수

1D 배열을 입력으로 받아 정규화 된 필수 배열을 반환하는 softmax 함수를 정의해야한다고 가정 해 보겠습니다.

소프트 맥스를 적용 할 때 발생할 수있는 일반적인 문제는 수치 안정성 문제인데, 이는 발생할 수있는 지수 및 오버플로 오류로 인해∑j e^(z_j)가 매우 커질 수 있음을 의미합니다. 이 오버플로 오류는 배열의 각 값을 최대 값으로 빼서 해결할 수 있습니다.

아래 코드 예제는 softmax 함수의 원래 구현과 Python의 NumPy 라이브러리를 사용한 최대 빼기 구현을 보여줍니다.

  • 오리지널 소프트 맥스 :
import numpy as np


def softmax(x):

    f_x = np.exp(x) / np.sum(np.exp(x))
    return f_x
  • 수치 적으로 안정적인 소프트 맥스 :
import numpy as np


def softmax(x):

    y = np.exp(x - np.max(x))
    f_x = y / np.sum(np.exp(x))
    return f_x

Python의 2D 배열을위한 NumPy Softmax 함수

2D 배열의 softmax 함수는 행을 따라 softmax 변환을 수행합니다. 즉, 최대 및 합계가 행을 따라 계산됩니다. 1D 배열의 경우 이러한 사항에 대해 걱정할 필요가 없습니다. 전체 어레이에 모든 작업을 적용하기 만하면되었습니다.

아래 코드 예제는 Python의 NumPy 라이브러리를 사용하여 소프트 맥스 변환이 2D 배열 입력에서 어떻게 변환되는지 보여줍니다.

import numpy as np


def softmax(x):

    max = np.max(
        x, axis=1, keepdims=True
    )  # returns max of each row and keeps same dims
    e_x = np.exp(x - max)  # subtracts each row with its max value
    sum = np.sum(
        e_x, axis=1, keepdims=True
    )  # returns sum of each row and keeps same dims
    f_x = e_x / sum
    return f_x

2D 배열의 열을 따라 소프트 맥스 변환을 수행해야한다고 가정합니다. 위에서 설명한softmax()메서드의 입력과 출력을 전송하면됩니다.

예제 코드:

softmax(x.T).T