Softmax function

2018-08-28 21-23-18

Classification Problem에서는, 확률을 구할때 단순히 (일부)/(전체)를 사용하면 음수 확률이 나올 가능성이 있다. 따라서 항상 양수로 만들어주는 exponential을 도입하여 확률을 구하는 softmax function을 사용한다. 이는 아래와 같이 표현한다.

import numpy as np

# L은 확률의 list 형태이다.
def softmax(L):
    S = np.exp(L)
    return S / sum(S)

One-hot Encoding

2018-08-28 21-33-11

Classificaiton 문제에서는 각각의 class를 1과 0의 행렬로 나타낸다.

Cross Entropy

2018-08-28 21-37-26

확률은 곱셈으로 계산된다. 하지만 곱셈은 연산량이 많이 필요하고, 확률 특성상 0-1인 값을 많이 곱할수록 0으로 수렴하는 문제가 발생한다. 따라서 log함수를 도입해 덧셈 연산으로 바꾸어준다. 이것이 Cross Entropy이다.

2018-08-28 21-39-26

어떤 모델 (직선) 의 정확도를 계산할 때, 확률의 곱셈을 이용하면 값이 무척 작아지지만 log, 즉 Cross Entropy를 이용하면 연산량과 오차가 크게 줄어든다. 그리고 확률이 클 수록 Cross Entropy는 작아지므로, 우리의 목표는 Cross Entropy를 최소화 하는 것이다.

2018-08-28 21-42-43

2018-08-28 21-42-22

문 건너편에 선물이 존재할 확률을 추정하는 모델을 생각해보자. 각각의 경우에 수에 대해 확률을 곱한 것이 Probability 행, 로그를 취해 더한 행이 -ln(Probability) 행이다. 따라서 우리는 Cross Entropy 함수를 일반화 할 수 있다.

import numpy as np

def cross_entropy(Y, P):
    Result = []
    for i in range(len(Y)):
        Result.append(np.log(Y[i]*P[i]+(1-Y[i])*(1-P[i])))

    return -sum(Result)

Comments

Eungbean Lee's Picture

About Eungbean Lee

Lee is a Student, Programmer, Engineer, Designer and a DJ

Seoul, South Korea https://eungbean.github.io