[밑바닥부터 시작하는 딥러닝] #3 손실함수, 엔트로피

Clay Ryu's sound lab·2022년 3월 2일
1

Note for 2022

목록 보기
13/47

이번 시간부터는 학습을 다룬다.

머신러닝이란


데이터를 기반으로 스스로 규칙을 학습하는 것이 머신러닝이다.

손실함수

평균 제곱 오차mean squared error

분류의 문제라면 one-hot encoding된 라벨을 이용해야 한다.
두 확률 분포 사이의 거리를 계산하는 직관적인 방법이다.

def mean_squared_error(y, t):
    return 0.5 * np.sum((y-t) ** 2)

문제풀이

흥미로운 것은 라벨이 정해지지 않은 경우의 예측값의 손실함수를 구하는 경우에
각각의 라벨에 대해서 mse를 구해준 다음에 그것을 라벨의 개수로 평균해주어야 한다는 것이다.

교차 엔트로피 오차cross entropy error

log는 자연상수를 밑으로 하는 로그이며 모델이 1이라고 정확한 예측을 하는 경우
손실함수의 값은 0이 되는 구조가 된다.

# y 행렬의 슬라이싱 테크닉이 조금 어렵다
# 리스트 두개면 각 값이 매칭되는 위치를 가져온다고 생각하면 된다.
def cross_entropy_error(y, t):
    if y.dim == 1:
        t = t.reshape(1, t.size)
        y = y.reshape(1, y.size)
                               
    if t.size == y.size:
        t = t.argmax(axis=1)

    batch_size = y.shape[0]
    return -np.sum(np.log(y[np.arange(batch_size), t])) / batch_size

문제풀이

# 브로드캐스팅을 이용해서 normalize를 해준다.
# 행렬과 벡터의 브로드캐스팅은 행에 대해서만 성립하기 때문에
# Transpose를 해준다.
def softmax(x):
    if x.ndim == 2:
        x = x.T
        x = x - np.max(x, axis=0)
        y = np.exp(x) / np.sum(np.sum(np.exp(x), axis = 0)
        return y.T                 
    
    x = x - np.max(x)
    return np.exp(x) / np.sum(np.exp(x))

엔트로피

로그 밑은 2이다.

동전을 던지는 확률변수의 엔트로피

0log0 = 0인 이유, 로피탈의 정리

사기꾼이 쓰는 동전의 엔트로피
동전의 확률이 1/2일 경우 가장 혼란스럽다.

좀더 복잡한 확률분포의 엔트로피

질문의 개수의 기대값

8마리 경주마의 승률과 엔트로피

Entropy measures the Uncertainty


엔트로피는 확률변수가 취하는 개수의 로그의 절대값을 넘지 못한다.

conditional entropy



직관적으로 어떤 가정은 불확실성을 떨어트릴 것이다.

주사위를 던지는 경우의 conditional entropy

X의 값을 아는 경우에 홀짝의 불확실성은 해소가 된다.

y가 X에 의해서 결정이 된다 = 함수이다

The reduction of entropies measures the amount of information

I(X:Y) 상호 정보량

profile
chords & code // harmony with structure

0개의 댓글