한 페이지 머신러닝

logit, sigmoid, softmax의 관계

[logit, sigmoid, softmax 관계]

 

이번에는 logit, sigmoid, softmax 관계에 대해서 알아보겠습니다.

이것들이 서로 다른 개념같지만

서로 매우 밀접하게 관련이 있는데요.

그림의 가운데 부분에서  개념의 관계를 화살표로 엮어놓았습니다.
 

결론부터 일단 말씀드리면

- logit sigmoid 서로 역함수 관계이고

- 2 클래스를 대상으로 정의하던 logit K개의 클래스를 대상으로 일반화하면 softmax함수가 유도(derived)됩니다.

- softmax함수에서 K 2 놓으면 sigmoid함수로 환원이 되고,

- 반대로 sigmoid함수를 K개의 클래스를 대상으로 일반화하면 softmax함수가 유도됩니다.

 

sigmoid함수는 인공신경망에서 ReLU 등장하기 이전에 활발하게 사용되었던 activation function(활성화 함수)이고, hidden 노드 바로 뒤에 부착됩니다.

softmax함수는 인공신경망이 내놓은 K개의 클래스 구분 결과를 확률처럼 해석하도록 만들어줍니다. 보통은 output 노드 바로 뒤에 부착되고요.

코드에서 사용될때는 서로 다른 용도(sigmoid activation, softmax classification) 사용되지만

수학적으로는 서로 같은 함수입니다. 다루는 클래스가 2개냐 K개냐로 차이가 있을 뿐이에요.

 

머신러닝을 텐서플로 예제로 처음 접하신 분은

코드 안에서 logit이라는 단어를 종종 보셨겠지만

이것이 대체 무엇이고 어떤 의미인지는 자세히 보지 않고 지나쳤을 가능성이 높습니다.

이번 기회에 아주 자세히 알아보도록 하지요.

 

먼저 logit부터, 좌측 상단의 연두색 배경부터 읽어보겠습니다.

class1 class2 구분하는 이진 분류문제(binary classification)라고 하지요.

하나의 데이터 포인트 x 주어졌을 , 이것이 C_1으로 분류될 확률을 y라고 보면

같은 데이터가 C_2 분류될 확률은 1-y 이지요. 모든 가능성의 총합은 1 보는 것이 확률이니까요.

그러므로

[x 주어졌을 y 0.5보다 크다면 x C_1 배정하고,

y 0.5보다 작다면 x C_2 배정하라는 결정]

내릴 있겠습니다.

 

결정을 같은 의미로 간략하게 표현한 것이 바로

odds라는 단어입니다.

odds, 도박에서 얻을(pay off) 확률과 잃을(stake) 확률의 비율을 뜻하는 영어단어입니다.

C_1 배정될 확률을얻는다' 보고, C_2 배정될 확률을잃는다' 본다면

y 1-y보다 커서, 비율이 1보다 커질 x C_1 배정하고

y 1-y보다 작아서, 비율이 1보다 작아질 x C_2 배정하라는 뜻이죠.

 

이것과 아주 같은 의미로

log odd에다가 붙여서 logit이라는 것을 정의합니다.

logitlogistic +‎ ‘probit 합성어입니다.

probit 확률을 재는 단위라는 뜻으로, odds 의미( 확률의 비율) 그대로 가져온다고 보시면 되겠습니다.

odds 값이 1보다 큰지 아닌지로 결정의 기준을 세웠다면

logit 값이 0보다 큰지 아닌지로 결정의 기준을 세웁니다.

식은 완전히 같은 의미를 갖는데, x=1이면 log x 0이기 때문입니다.

로그의 기본 성질은 고등학교 교과서를 참고해주세요.

 

이제 오른쪽 하늘색 배경의 수식을 보시면,

결론부터 말씀드리면, logit 함수와 sigmoid 함수는 서로 역함수 관계입니다.

로그함수의 기본 성질과 분수의 약분 통분을 다룰 있다면 유도할 있습니다.

 

softmax함수는 sigmoid 일반형이라고 위에서 말씀드렸는데요,

이것을 유도하려면 약간의 산수적 테크닉이 필요합니다.

그림에서 먼저 빨간 박스로 테두리를 놓은 식이 같다는 것을 이해하고 시작해야 합니다.

오른쪽 식은 클래스가 2개일 때의  odds를 표현해놓은 것이고

왼쪽 식은 클래스가 K개일 때의 odds를 표현해놓은 것입니다.

 

양 변을 i=1부터 K-1까지 더해주세요

 

분모에 있는 C_K는 i의 영향을 받지 않으므로, 분자의 P(C_i | x)만 더해지는데요,
확률의 합은 1이기 때문에,  1부터 K-1번째 클래스의 확률을 더한 값은 1-에서 K번째 클래스의 확률을 뺀 것과 같죠.

 

분모분자를 뒤집어서 P(C_K | x)를 기준으로 정리해줍니다.

 

우리 맨 처음에 봤던 (빨간 박스쳐진) 식을 다르게 표현한 것이고요.

 

P(C_K | x)를 위 식에 대입해주고, 
분모에 있는 1이 exp(t_K)로 바뀐 것을 볼 수 있는데요

 

왜냐하면 아까 봤던 식에서 i 대신에 K가 들어가면 1이기 때문입니다.
점 세개를 찍어놓은 것은 '왜냐하면(because)'이라는 수학 기호입니다.

 

 

 

마지막으로 exp(t_K)를 시그마 기호 안으로 집어넣으면, softmax함수가 완성됩니다.

 

댓글

댓글 본문
  1. Woneui Hong
    tf.add(tf.matmul(H, W2), B2)는 그림에서 설명한 logit값과 수리적으로 같은 값이라고 이해하시기보다는 개념적으로 같은 개념이라고 이해하시는 편이 좋을듯 합니다.
    logit은 '분류'를 위한 기준을 주는데,
    tf.add(tf.matmul(H, W2), B2) <- 이 값도 분류를 위한 기준을 주지요. 이걸 softmax function에 집어넣어 확률 표현으로 이해를 하든, 그냥 날것의 logit으로 이해하든지 간에요. 분류기준입니다. tf.add(tf.matmul(H, W2), B2) <- 이 값보다 크면 A로 분류하고, 작으면 B로 분류하겠다는 분류 기준으로써 말이지요.

    softmax는 sigmoid의 파생 (확장) 버전이라고 말씀을 올린 바 있습니다. softmax는 logit의 파생버전이 아님을 이해해주시면 좋을듯 합니다.
    이 글에 적은 것처럼, softmax는 logit을 입력으로 받아 그 logit을 확률 모양으로 해석하도록 도와주는 기능을 합니다. '비슷한 종류의 연산을 두 번' 하는 것이 아닙니다.
  2. 황혜진
    안녕하세요 좋은 글 감사합니다.

    궁금한 것이 있는데, 위 식에 나온 (binary)확률값의 logit과
    실제 신경망 계산시에 나오는 tf.add(tf.matmul(H, W2), B2) 값이 어떻게 같은지 잘 이해가 안가는데요ㅜ
    추가로 설명해주실 수 있을까요?

    그리고 결론적으로, prediction을 위해 logit에 softmax를 취한다는 것이, 앞선 설명에 적용해봤을 때 (softmax가 logit의 파생버전이라면) 비슷한 종류의 연산을 두번 하는것으로 느껴지는데요 어떤 다른 인사이트가 있을까요?

    감사합니다 :)
  3. Woneui Hong
    답이 늦었습니다. 말씀 주신대로, 위 본문에서는 tK가 항상 0이라는 뜻이 자연스럽습니다. K는 수식 전개를 위한 가상의 reference class라고 보고, 그래서 본문에서 '실존하는' class는 K-1개 입니다.

    계산을 약간 지저분하게 해도 된다면, K개의 '실존하는' class를 두고, K+1번째의 '가상'class를 두어 계산을 할 수도 있습니다.

    말씀주신대로, 'odds ratio에서 출발한다면 i class를 제외한 값으로 odds비를 만들어서 logit으로 해야 하는 것' 이므로

    수식의 가장 초반에서, '어떤 i가 들어오든지 i를 제외한 모든 class들을 묶어 K-class' 라고 읽도록 써 놓은 것입니다. class i와 class K, 이렇게 두 개의 class가 있다고 적은 것이지요.
    대화보기
    • 김한샘
      예전 댓글에서...

      질문 :
      sigmoid에서 softmax derive 부분에 있어 헷갈려서 여쭙고자 합니다.
      왜 y/(1-y) 를 odds로 두고 logit을 구했는데 softmax에선 1-P(Ci|x)가 아닌 P(Ck|x)를 쓴건지 궁금합니다

      답 :
      (1-y)과 P(C_K|x)는 식을 유도하는 과정에서 일종의 reference가 되는 클래스 입니다.
      분자에서 의미하는 클래스와 다른 클래스를 분모에 두고 고정하겠다는 의미입니다.

      sigmoid에서는 클래스가 둘 뿐이니 둘 중의 하나를 1-y로 쓴 것이고
      softmax에서는 클래스가 여럿이니 여럿 중의 하나를 P(C_K|x)로 쓴 것입니다.

      질문은 이해가 되었는데, 답이 이해가 안되어서 다시 한번 질문 드려도 될까요?
      질문은 odds ratio에서 출발한다면 i class를 제외한 값으로 odds비를 만들어서 logit으로 해야 하는 것 아닌가 하는 질문인데, 답을 주신 것은 P(C_K|x)도 i를 포함한 모든 확률을 의미하는 것이지 여럿중에 하나를 의미하는 것이 아닌가 하는 질문을 하고 싶습니다. 그러니까, class i / class i가 아님 으로 odds비를 만들어야 하는 질문 1개와
      그러니까 1=P(CK|x)/P(CK|x) = exp(tK)도 정의가 이렇다면 exp(tK)는 언제나 1이라는 뜻인데, tK가 항상 0라는 뜻과 같으니, 조금 안맞는 것 같아서 질문 드릴 수 밖에 없습니다.

      꼭 알고 싶습니다!
    • Woneui Hong
      통계 라는것은 퉁쳐서 셈(계) 한다는 뜻입니다. 인구 5000만명의 우리나라에서 무작위로 1000명을 뽑아서 설문조사를 해서 그 결과를 5000만명을 대표하는 결과로 보는 식이지요.
      그러면 1000명을 어떻게 뽑느냐, 뽑아서 무엇을 물어볼 것이냐, 물어본 결과를 어떻게 해석할 것이냐 등등의 문제가 생깁니다.
      neural network는 통계모델입니다. 개/고양이를 구분하는 모델에 이미지를 50000장 넣는다고 하면, 그 50000장 이미지가 전 세계 개/고양이 사진의 전부는 아니지요. 아주아주 극소수 일부입니다. 그 소수의 이미지를 가지고 일반화해서 '~~하면 개', '~~하면 고양이' 하고 답을 내놓으니 neural network는 통계 모델이라고 말합니다.

      logit은 neural network의 최종 레이어가 내놓는 결과값이고요. logit은 -무한부터 +무한까지 값이 나올 수 있고, 양수인지 음수인지에 따라서 이쪽 class인지 저쪽 class인지를 구분하는데 사용합니다. sigmoid는 logit을 입력으로 받는 함수인데, 입력된 logit (-무한~+무한 까지 값을 가질 수 있음)을 0 부터 1사이의 확률값으로 해석하도록 만들어줍니다.

      softmax는 sigmoid의 일반형입니다. sigmoid는 two class classification을 하는데 사용되고, softmax는 multiclass classification을 하는데 사용됩니다.
      대화보기
      • Neural network에서는 sigmoid 함수가 모델에 비선형성을 부여하기 위해 activation 함수로 활용되는걸로 알고 있는데 혹시 통계학과 어떤 밀접한 관계가 있을까요?
        그 외에도 logit 및 softmax가 머신러닝에서 어떻게 적용되는지 알 수 있을까요?
      • Woneui Hong
        (1-y)과 P(C_K|x)는 식을 유도하는 과정에서 일종의 reference가 되는 클래스 입니다.
        분자에서 의미하는 클래스와 다른 클래스를 분모에 두고 고정하겠다는 의미입니다.

        sigmoid에서는 클래스가 둘 뿐이니 둘 중의 하나를 1-y로 쓴 것이고
        softmax에서는 클래스가 여럿이니 여럿 중의 하나를 P(C_K|x)로 쓴 것입니다.
        대화보기
        • wcdyg
          sigmoid에서 softmax derive 부분에 있어 헷갈려서 여쭙고자 합니다.
          왜 y/(1-y) 를 odds로 두고 logit을 구했는데 softmax에선 1-P(Ci|x)가 아닌 P(Ck|x)를 쓴건지 궁금합니다.
        버전 관리
        Woneui Hong
        현재 버전
        선택 버전
        graphittie 자세히 보기