심층 학습/크로스 엔트로피
1. 소개
이번은, 크로스 엔트로피(교차 엔트로피)에 대해 공부한 것을 정리합니다.
2. 최대 우도 추정에서 도출
시그모이드 함수를 $\sigma 로 하고, $y = $\sigma$(W·x + b)로 하면, 뉴런이 발화(1을 출력)할 확률은 이하와 같이 나타낼 수 있습니다.
P(C = 1|x) = $\sigma$(W·x + b)
반대로 발화하지 않을 확률은 다음과 같이 나타낼 수 있습니다.
P(C = 0|x) = 1 - $\sigma$(W·x + b)
이 2개를 1개의 식으로 나타내면, 1개의 뉴런의 발화 확률은 이하와 같이 나타낼 수 있습니다(단, t=0 or t=1).
P(C = t|x) = $y^t(1 -y)^{1-t}$
네트워크 전체의 우도 L은 모든 뉴런의 발화 확률의 곱셈이므로,
$L =\prod_{n=1}^N y_n^{t_n}(1-y_n)^{1-t_n}$
최우도는, 이 식을 최대화하는 것으로 구해집니다만, 최소화하는 것이 최적화하기 쉽기 때문에 마이너스를 곱합니다. 확률의 곱셈은, 값이 점점 작아져 취급하기 어렵기 때문에, 로그(log)를 취합니다. 그리고, N이 변화해도 비교할 수 있도록, N로 나누면,
$L = -\frac{1}{N}\sum_{n=1}^N t_nlogy_n+(1-t_n)log(1-y_n)$
이것이, 크로스 엔트로피(교차 엔트로피)의 식입니다.
3. 구체적인 오차 계산
지금 정답 라벨 $t_1$~$t_3$과 예측 확률 $y_1$~$y_3$가 다음과 같습니다.
이전의 크로스 엔트로피의 식에 값을 대입하면
4. 코드
크로스 엔트로피를 요구하는 코드를 python으로 쓰면,
import numpy as np
def calc_cross_entropy(y_true, y_pred):
loss = np.mean( -1 * (y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)), axis=0)
return loss
y_true =np.array([[1], [0], [0]])
y_pred = np.array([[0.8], [0.1], [0.1]])
answer = calc_cross_entropy(y_true, y_pred)
print(answer)
# 出力
# [0.14462153]
Reference
이 문제에 관하여(심층 학습/크로스 엔트로피), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jun40vn/items/6546f06f9a1a623198fd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
시그모이드 함수를 $\sigma 로 하고, $y = $\sigma$(W·x + b)로 하면, 뉴런이 발화(1을 출력)할 확률은 이하와 같이 나타낼 수 있습니다.
P(C = 1|x) = $\sigma$(W·x + b)
반대로 발화하지 않을 확률은 다음과 같이 나타낼 수 있습니다.
P(C = 0|x) = 1 - $\sigma$(W·x + b)
이 2개를 1개의 식으로 나타내면, 1개의 뉴런의 발화 확률은 이하와 같이 나타낼 수 있습니다(단, t=0 or t=1).
P(C = t|x) = $y^t(1 -y)^{1-t}$
네트워크 전체의 우도 L은 모든 뉴런의 발화 확률의 곱셈이므로,
$L =\prod_{n=1}^N y_n^{t_n}(1-y_n)^{1-t_n}$
최우도는, 이 식을 최대화하는 것으로 구해집니다만, 최소화하는 것이 최적화하기 쉽기 때문에 마이너스를 곱합니다. 확률의 곱셈은, 값이 점점 작아져 취급하기 어렵기 때문에, 로그(log)를 취합니다. 그리고, N이 변화해도 비교할 수 있도록, N로 나누면,
$L = -\frac{1}{N}\sum_{n=1}^N t_nlogy_n+(1-t_n)log(1-y_n)$
이것이, 크로스 엔트로피(교차 엔트로피)의 식입니다.
3. 구체적인 오차 계산
지금 정답 라벨 $t_1$~$t_3$과 예측 확률 $y_1$~$y_3$가 다음과 같습니다.
이전의 크로스 엔트로피의 식에 값을 대입하면
4. 코드
크로스 엔트로피를 요구하는 코드를 python으로 쓰면,
import numpy as np
def calc_cross_entropy(y_true, y_pred):
loss = np.mean( -1 * (y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)), axis=0)
return loss
y_true =np.array([[1], [0], [0]])
y_pred = np.array([[0.8], [0.1], [0.1]])
answer = calc_cross_entropy(y_true, y_pred)
print(answer)
# 出力
# [0.14462153]
Reference
이 문제에 관하여(심층 학습/크로스 엔트로피), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jun40vn/items/6546f06f9a1a623198fd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
크로스 엔트로피를 요구하는 코드를 python으로 쓰면,
import numpy as np
def calc_cross_entropy(y_true, y_pred):
loss = np.mean( -1 * (y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)), axis=0)
return loss
y_true =np.array([[1], [0], [0]])
y_pred = np.array([[0.8], [0.1], [0.1]])
answer = calc_cross_entropy(y_true, y_pred)
print(answer)
# 出力
# [0.14462153]
Reference
이 문제에 관하여(심층 학습/크로스 엔트로피), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/jun40vn/items/6546f06f9a1a623198fd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)