기본을 넘어선 Softmax 기능

어서 오십시오! Softmax 기능에 대해 처음 배우는 경우 초보자 친화적 인 Understand Softmax in Minutes 를 읽어보십시오 . 머신 러닝 전문가 인 데이터 과학자라면 Softmax에 대해 자세히 알아보고 싶을 것입니다. 기본을 넘어서는 Softmax, Softmax 사용 사례, "현장에서"Softmax. 이 기사는 전문가가 말하는 기본 사항을 넘어서 다룹니다.

이 기사를 어떻게 사용해야합니까? 여기에서 면책 조항을 읽어보십시오 . 생산, 구현 또는 상업적 목적으로 사용해서는 안됩니다. 개인적인 독서를 위해서.

Softmax 공식 | Softmax 활성화 기능

Softmax는 일반적으로 마지막 계층 인 다중 클래스 분류 작업의 활성화 함수로 사용됩니다. 우리는 숫자 (로짓이라고도 함)를 합이 1이되는 확률로 변환하는 역할에 대해 이야기했습니다. 모델이 비선형 성을 달성하는 데 도움이되는 활성화 함수이기도합니다. 선형 조합의 선형 조합은 항상 선형이지만 활성화 함수를 추가하면 모델이 비선형 데이터를 처리하는 데 도움이됩니다.

시그 모이 드와 같은 다른 활성화 함수의 출력이 반드시 합산되는 것은 아닙니다. 출력의 합이 1이되면 소프트 맥스 기능이 확률 분석에 적합합니다.

중요한 가정 은 실제 클래스 레이블이 독립적이라는 것입니다. 즉, 각 데이터 샘플은 하나의 클래스에만 속할 수 있습니다. 예를 들어 이미지는 동시에 고양이와 개가 될 수 없습니다. 실제 레이블은 하나의 클래스에만 속할 수 있습니다. 다중 클래스 분류의 경우 여러 객체와 실제 클래스가있는 이미지의 경우 대신 다중 클래스 로지스틱 회귀를 사용합니다. 두 클래스 예, 0 또는 1 참 또는 거짓 긍정 또는 부정, 단지 로지스틱 회귀.

Softmax 기능을 Softmax라고하는 이유는 무엇입니까?

Softmax라는 이름은 약간 혼란스럽고 함수의 기능을 정확히 설명하지 않습니다. Softmax의 다른 이름에는 다음이 포함됩니다. Softmax가 Softmax라고 불리는 이유에 대한 인터넷상의 가장 좋은 설명은 Quora에서이 답변을 확인하십시오 . 요컨대, 그것은 ReLU처럼 보이는 max 함수의 부드럽고 부드러운 근사치입니다. 부드럽고 부드러운 부분이 핵심입니다. 이것이이 기능을 차별화 할 수있게합니다.

Mr. Abhishek Patnia (Tinder의 기계 학습 엔지니어 직원)의 Quora 게시물이 최고입니다! 그는 또한 특히 입력이 0에 가깝지 않을 때 Softmax가 max (0, input)에 근사한다는 것을 보여주는 놀라운 이미지를 제공했습니다.

Softmax를 사용하는 이유

Softmax는 로짓을 확률로 바꿉니다. 수식과 알고리즘의 동작을 이해하려면 사용할 수있는 값의 범위를 이해하는 것이 중요합니다. 로짓 값은 본질적으로 제한이 없으며 음의 무한대에서 양의 무한대로 이동합니다. Logits는 기하 급수적으로 증가하고 Softmax의 경우 증가율이 훨씬 느립니다.

교과서 Softmax

n 개의 가능한 값을 가진 이산 변수에 대한 확률 분포를 표현하고 싶을 때 언제든지 softmax 함수를 사용할 수 있습니다. — Ian Goodfellow, Yoshua Bengio 및 Aaron Courville 딥 러닝 교과서

Softmax 공식

Softmax 공식

이 기사의 기본 버전 인 Understand Softmax in Minutes에서는 Python 목록 이해를 사용하여이 공식을 구현하는 방법을 설명했습니다. 이 기본 구현은 생산 준비 코드 저장소가 아니라 교육 보조 도구입니다.

StackOverflow의 Softmax

출처 : wikipedia Softmax 정의 및 공식

Softmax 전후 Wikipedia의 Softmax

Softmax는 종종 신경망에서 사용되어 네트워크의 정규화되지 않은 출력을 예측 된 출력 클래스에 대한 확률 분포에 매핑합니다. — 위키 백과

Wikipedia의 Softmax

Softmax 일명 softargmax, 문자 그대로 그것이하는 일을 설명하는 정규화 된 지수 함수는 벡터를 입력으로 받아 입력 벡터와 동일한 차원으로 구성된 확률 분포로 정규화하는 함수입니다. 소프트 맥스를 적용하기 전에 일부 벡터 성분은 음수이거나 1보다 클 수 있으며 합이 1이 아닐 수 있습니다. 소프트 맥스를 적용한 후 각 성분은 0과 1 사이의 범위에 있으며 모든 성분의 합은 1이됩니다. 확률로 해석 될 수 있습니다. 더 큰 구성 요소는 더 큰 확률에 해당합니다. 종종 softmax는 네트워크의 정규화되지 않은 출력을 예측 된 출력 클래스에 대한 확률 분포로 매핑하는 신경망에서 사용됩니다. (출처 : wikipedia. 의역)

초보자 친화적 인 기사 인 Understand Softmax in Minutes에 설명 된대로 Softmax 함수에 대한 비정규 화 된 입력을 로짓이라고합니다. 이 입력은 일반적으로 신경망의 출력입니다. Softmax 함수는 로짓을 받아 1이되는 확률을 출력합니다. 왜? 각로 짓은 로짓과 같은 거듭 제곱으로 e까지 올랐기 때문에 e 지수는 모든 e 지수의 합으로 정규화됩니다. 따라서 전체 출력 컬렉션의 합계는 항상 1입니다.

https://stats.stackexchange.com/questions/242738/logistic-regression-as-a-special-case-of-softmax-regression

교차 엔트로피 손실 Softmax의 베스트 버디

자습서에서 교차 엔트로피 손실에 대해 자세히 알아보십시오.

Softmax 함수 그래프

곧 출시

Softmax는 딥 러닝 워크 플로우에서 어디에 적합합니까?

종종 Softmax는 다중 클래스 분류 아키텍처의 마지막 계층입니다. 좋은 예는 VGG16컴퓨터 비전 이미지 분류 작업에 사용되는 인기있는 모델 입니다.

프로덕션에서 Softmax 구현

Softmax에는 몇 가지 맛이 있습니다. 최상의 옵션을 선택하는 것은 계산 효율성과 정확성의 문제입니다. 여기서는 Pytorch와 Tensorflow의 API 코드와 소스 코드를 살펴보고 Facebook과 Google이 프로덕션 및 연구용 기능을 어떻게 구현하는지 살펴 봅니다.

Softmax의 Pytorch 구현

곧 출시

아래는 Pytorch에서 Softmax의 기능 시그니처입니다.

Pytorch가 함수 시그니처를 정의하는 방법을 확인하면 도움이됩니다. 다음은 몇 가지 중요한 하이라이트입니다. 1 rescaling them so that the elements of the n-dimensional output Tensor lie in the range [0,1] and sum to 1.. 2. Softmax의 LaTeX 공식은 \text{Softmax}(x_{i}) = \frac{\exp(x_i)}{\sum_j \exp(x_j)}아래 스크린 샷을 제공합니다.

class Softmax(Module):
    r"""Applies the Softmax function to an n-dimensional input Tensor
    rescaling them so that the elements of the n-dimensional output Tensor
    lie in the range [0,1] and sum to 1.
    Softmax is defined as:
    .. math::
        \text{Softmax}(x_{i}) = \frac{\exp(x_i)}{\sum_j \exp(x_j)}
    Shape:
        - Input: :math:`(*)` where `*` means, any number of additional
          dimensions
        - Output: :math:`(*)`, same shape as the input
    Returns:
        a Tensor of the same dimension and shape as the input with
        values in the range [0, 1]
    Arguments:
        dim (int): A dimension along which Softmax will be computed (so every slice
            along dim will sum to 1).
    .. note::
        This module doesn't work directly with NLLLoss,
        which expects the Log to be computed between the Softmax and itself.
        Use `LogSoftmax` instead (it's faster and has better numerical properties).
    Examples::
        >>> m = nn.Softmax(dim=1)
        >>> input = torch.randn(2, 3)
        >>> output = m(input)
    """
    __constants__ = ['dim']
def __init__(self, dim=None):
        super(Softmax, self).__init__()
        self.dim = dim
def __setstate__(self, state):
        self.__dict__.update(state)
        if not hasattr(self, 'dim'):
            self.dim = None
@weak_script_method
    def forward(self, input):
        return F.softmax(input, self.dim, _stacklevel=5)
def extra_repr(self):
        return 'dim={dim}'.format(dim=self.dim)

Pytorch에서 Softmax 결과 사용에 대한 팁 :

최상의 Softmax 결과 선택 : 다중 클래스 분류에서 활성화 Softmax 기능이 자주 사용됩니다. Pytorch에는 Softmax 출력에서 ​​가장 가능성이 높은 클래스 인 최상위 결과를 추출하는 전용 기능이 있습니다. torch.topk(input, k, dim)최고 확률을 반환합니다. pytorch.topk 문서.

torch.topk(input, k, dim=None, largest=True, sorted=True, out=None) -> (Tensor, LongTensor)
Returns the k largest elements of the given input tensor along a given dimension.
If dim is not given, the last dimension of the input is chosen.
If largest is False then the k smallest elements are returned.

def softmax(x):
    return torch.exp(x)/torch.sum(torch.exp(x), dim=1).view(-1,1)

Softmax의 Tensorflow 구현

공사중 게시물

공식 문서 TensorFlow Core 1.13, tf.nn.softmax에 따르면이 함수는 softmax = tf.exp (logits) / tf.reduce_sum (tf.exp (logits), axis)와 동일한 기능을 수행합니다.

마찬가지로 개발자는 keras API에 해당하는 tf.keras.activations.softmax를 사용할 수 있습니다.

tf.sparse.softmax는 일괄 처리 된 ND SparseTensor에 softmax를 적용합니다.

로짓과 레이블 사이의 소프트 맥스 교차 엔트로피를 계산하는 tf.nn.softmax_cross_entropy_with_logits_v2도 있습니다. (사용되지 않는 인수). 경고 :이 작업은 효율성을 위해 내부적으로 로짓에 대해 소프트 맥스를 수행하므로 스케일되지 않은 로짓을 예상합니다. 잘못된 결과를 생성하므로 softmax의 출력으로이 작업을 호출하지 마십시오. 이전 tensorflow에서 해당하는 교차 엔트로피 API는 softmax_cross_entropy_with_logits_v2입니다.

처음부터 Softmax 구현

@ Kaggle @ Rachael Tatman은 처음부터 라이브 소프트 맥스 구현을 수행합니다.

최대 Softmax 출력 선택

Softmax 레이어 이후, Pytorch에서는 여전히 최상위 레이블로 최대 값 인덱스를 선택해야합니다. 처음부터 시작하는 방법 중 하나는pytorch.argmax

다음은 시연하는 예입니다.

x = torch.FloatTensor([[0.2, 0.1, 0.7],[0.6, 0.2, 0.2],[0.1, 0.8, 0.1]])
y = torch.argmax(x, dim=1)
y
# tensor([2, 0, 1])
y = torch.argmax(x, dim=0)
y
# tensor([1, 2, 0])

Softmax 대 Sigmoid

소프트 맥스 회귀 (또는 다항 로지스틱 회귀)는 여러 클래스를 처리하려는 경우에 로지스틱 회귀를 일반화 한 것입니다. 로지스틱 회귀에서는 레이블이 이진이라고 가정했습니다 : y (i) ∈ {0,1}. 이러한 분류기를 사용하여 두 종류의 손으로 쓴 숫자를 구분했습니다. 소프트 맥스 회귀를 사용하면 y (i) ∈ {1,…, K}를 처리 할 수 ​​있습니다. 여기서 K는 클래스 수입니다. — Stanford 딥 러닝 튜토리얼

Softmax는 Multi-Class Logistical Regression이라고도합니다 (인용 필요). 분류 작업에 시그 모이 드 활성화를 사용하여 모든 로짓을 2 개의 클래스 (0,1)로 바꾸려고합니다. 출력은 0 또는 1로 반올림되어야합니다. 클래스 수 k = 2.

Sigmoid는 가능한 결과가 0 또는 1 인 Softmax의 특별한 경우입니다.

(공사 중) 두 기능이 동일하다는 것을 이해하려면 이진 분류의 Ground Truth가 0 또는 1의 두 가지 형식 만 취할 수 있고 예측 된 레이블이 0에서 1 사이임을 생각하는 것이 중요합니다. Softmax는 P(class = c | logits)상세하게 설명합니다. 클래스는 입력으로 로짓 배열이 주어지면 c입니다. 로 짓은 신경망의 거의 마지막 계층이므로 의사 코드에 있음을 기억하십시오 matrix_mulitplication_of (inputs , weights). 가중치가 학습됩니다. 이진 분류에서 가중치는 0 또는 1 만 될 수 있습니다. 예를 들어 P (class = 1 | logits), 우리는 class = 1의 확률을 계산하려고한다는 것을 알고 있습니다 (class = 0의 경우 우리는 1 빼기 P (class = 1 | logits). Softmax 함수는 다른 모든 클래스의 e 지수의 합으로 나눈 현재 클래스의 e 지수를 계산합니다. np.exp(logit given that weight is 1)의 합으로 나눈 값입니다 np.exp(logit given that weight is 0) + np.exp(logit given the weight is 1). 가중치가 0 인로 짓은 (입력 및 0) 이는 0입니다. e 지수는 1입니다. 따라서 공식은로 단순화됩니다 np.exp(logit given weight is 1) / (1 + np.exp(logit given weight is 1). 명백한 대체가 아닌 증거에 가깝습니다. 직원 작가에게 Softmax와 Sigmoid가 두 클래스 분류에 대해 동일한 이유를 이해하려고 몇 번 시도했습니다. Udacity의 Luis Serrano가 언급했습니다. 공식 읽기를 좋아한다면 이 quora 게시물에서 가장 잘 설명했습니다 .

기술 인터뷰의 Softmax

추가 읽기

Pytorch에서 LogSoftmax와 Softmax의 차이점

class Softmax (Module) :…이 모듈은 NLLLoss와 직접 작동하지 않습니다.이 모듈은 Softmax와 자체 사이에서 Log가 계산 될 것으로 예상합니다. 대신`LogSoftmax`를 사용하십시오 (더 빠르고 더 나은 수치 속성을 가짐) — .Pytorch Softmax 문서

Softmax의 다른 맛

전체 소프트 맥스 대 후보 샘플링 소프트 맥스.

Suggested posts

중요하지만 종종 간과되는 데이터 과학 및 분석 기술

중요하지만 종종 간과되는 데이터 과학 및 분석 기술

이제 데이터 과학 및 분석에 들어가는 데 필요한 기술 기술을 배울 수있는 방법이 그 어느 때보 다 많았습니다. 온라인 과정, Kaggle 대회, YouTube 자습서, 스택 오버플로가있는 금광 등이 있습니다. 현장에 침입하려는 사람들은 종종 "X 데이터 작업을 수행하려면 어떤 프로그래밍 기술이 필요한가요?", "어떤 기계 학습 기술을 배워야합니까?", "기술을 구축하려면 어떤 프로젝트를 수행해야합니까?"와 같은 질문을 자주합니다. / 포트폴리오?”.

데이터 포인트가 얼마나 극단적입니까?

특이 치 및 모델 선택

데이터 포인트가 얼마나 극단적입니까?

이상치 및 모델 선택 회귀를 실행할 수있는 것은 하나이지만 올바른 모델과 올바른 데이터를 선택할 수 있다는 것은 또 다른 문제입니다. 곡선의 맨 끝에있는 데이터 포인트가 실수로 여분의 제로 (인간 오류)를 기록한 사람 또는 블랙 스완 이벤트 (드물지만 중요한 이벤트)에서 가져온 것임을 어떻게 알 수 있습니까? 회귀 모델에 유지하면서 여전히 작동하는 예측을 가질 수 있습니까? 이 기사에서 알아 보자.