신경망의 교차 엔트로피 오류 함수


115

에서 ML 초보자를위한 MNIST 그들은 같은 교차 엔트로피를 정의

Hy(y):=iyilog(yi)

i y iyi 는 클래스 대한 예측 확률 값 이고 는 해당 클래스에 대한 실제 확률입니다.iyi

질문 1

( )가 0이 될 수 있는 문제가 ? 이것은 물론 우리가 정말 나쁜 분류기를 가지고 있음을 의미합니다. 그러나 데이터 셋의 오류 (예 :로 표시된 '명백한')를 생각해보십시오 . 단순히 충돌합니까? 우리가 선택한 모델 (최종 소프트 맥스 활성화)은 기본적으로 올바른 클래스에 대한 확률 0을 제공하지 않습니까?yilog(yi)13

질문 2

교차 엔트로피는 다음과 같이 정의됩니다.

Hy(y):=i(yilog(yi)+(1yi)log(1yi))

맞습니까? 두 버전 모두에 대한 교과서 참조가 있습니까? 이러한 기능은 신경망의 오류 기능과 같은 속성에서 어떻게 다릅니 까?



Kullback-Leibler Divergence 설명 블로그 게시물 도 참조하십시오 .
Piotr Migdal

답변:


101

교차 엔트로피를 해석하는 한 가지 방법 은 모델 에서 데이터 의 (-) 로그 우도로 입니다.yiyi

즉, 클래스 대해 가정 된 발생 확률 을 예측하는 고정 모델 (일명 "가설")이 있다고 가정합니다 . 당신은 지금 (현실에서) 관찰한다고 가정 클래스의 인스턴스 , 클래스의 인스턴스 , 클래스의 인스턴스 모델이 일어날 가능성에 따르면 등입니다 : 로그를 취하고 부호 변경 : n{1,2,,n}y1,y2,,ynk11k22knn

P[data|model]:=y1k1y2k2ynkn.
logP[data|model]=k1logy1k2logy2knlogyn=ikilogyi
N = k 1 + k 2 + + k n y i = k i / N 1 오른쪽 합계를 관측치 으로 경험적 확률을 으로 표시하면 교차 엔트로피를 얻을 수 있습니다 : N=k1+k2++knyi=ki/N
1NlogP[data|model]=1Nikilogyi=iyilogyi=:H(y,y)

또한, 모델이 주어진 데이터 세트의 로그 가능성은 "인코딩 길이"의 측정치로 해석 될 수 있습니다. 인코딩 체계가 가설을 기반으로하는 경우이 정보를 인코딩하는 데 소비 할 비트 수입니다.

이것은 확률 를 갖는 독립적 인 이벤트가 그것을 인코딩하기 위해 적어도 비트를 필요로 하고 (효율적인 코딩을 가정 할 때), 결과적으로 는 말 그대로 인코딩의 예상 길이 이벤트에 대한 인코딩 길이는 "가설 화 된"분포를 사용하여 계산되는 반면, 예상은 실제 길이를 대신합니다.yilog2yi

iyilog2yi,

마지막으로, "예상 인코딩 길이의 측정"이라고 말하는 대신, 나는 비공식 용어 인 "놀람의 측정"을 사용하고 싶습니다. 분배에서 예상되는 이벤트를 인코딩하기 위해 많은 비트가 필요한 경우 분배는 "정말 놀랍습니다".

이러한 직감을 염두에두고 질문에 대한 답변을 다음과 같이 볼 수 있습니다.

  • 질문 1 . 예. 해당 가 동시에 0이 아닌yi 경우 문제 가됩니다 . 모델이 어떤 클래스가 발생 확률이 0이라고 생각하지만 클래스가 실제로 팝업되는 상황에 해당합니다. 결과적으로, 모델의 "놀람"은 무한대로 훌륭합니다. 모델이 해당 이벤트를 설명하지 않았으므로 이제 인코딩을 위해 무한히 많은 비트가 필요합니다. 그래서 당신은 당신의 교차 엔트로피로 무한대를 얻는 것입니다.

    이 문제를 피하려면 모델이 발생할 수있는 동안 불가능한 것에 대해 뾰족한 가정을하지 않아야합니다. 실제로 사람들은 시그 모이 드 또는 "소프트 맥스"기능을 가설 모델로 사용하는 경향이 있으며, 이는 모든 옵션에 대해 최소한 약간의 기회를 남기기에 충분히 보수적입니다.

    다른 가설 모델을 사용하는 경우 정규화 (일명 "부드럽게")하여 0으로 가정해서는 안되는 가설을 세우지 않도록해야합니다.

  • 질문 2 . 이 공식에서, 일반적으로 는 또는 이라고 가정 하고 는 해당 입력에 대한 모형의 확률 가설입니다. 자세히 보면 이진 데이터의 경우 단순히 이며이 답변의 두 번째 방정식과 같습니다.yi01yilogP[data|model]

    따라서 엄밀히 말하면 여전히 로그 가능성이지만 이것은 구문 적으로 엔트로피와 동일하지 않습니다. 교차 엔트로피 와 같은 표현을 언급 할 때 일부 사람들이 의미 하는 것은 실제로 데이터 집합의 개별 지점에 대한 이진 교차 엔트로피에 대한 합입니다 . 여기서 및 는 해당 이진 분포 및 .

    iH(yi,yi),
    yiyi(yi,1yi)(yi,1yi)


1
을 정의하는 소스를 제공 할 수 있습니까 ? 여기서는 현재 클래스 레이블에 대한 일회성 분배로 정의합니다. 차이점은 무엇입니까? yi=kiN
Lenar Hoyt

1
MNIST TensorFlow 튜토리얼에서는 원-핫 벡터로 정의합니다.
Lenar Hoyt

@LenarHoyt 경우 k_i 은 one-hot과 같습니다. one-hot은 경험적 (실제) 범주 확률을 기반으로 한 항목의 인코딩으로 생각할 수 있습니다. N=1ki/N
THN

'독립적 인 사건은 그것을 인코딩하기 위해 필요하다.'-이 비트를 설명해 주시겠습니까?
Alex

@Alex 이것은 Shannon-Fano 코드와 최적의 코딩과 Shannon 엔트로피 방정식의 관계를 올바르게 이해하기 위해 더 긴 설명이 필요할 수 있습니다. 사건을 바보로 만들려면 이벤트에 1/2 확률이 있다면 가장 좋은 방법은 단일 비트를 사용하여 코딩하는 것입니다. 확률이 1/4 인 경우 2 비트를 사용하여 인코딩해야합니다. 일반적으로 이벤트 세트의 확률이 1 / 2 ^ k 형식 인 경우 길이를 k로 지정해야합니다. 이렇게하면 코드가 Shannon 최적의 길이에 접근하십시오.
KT.

22

사용하는 첫 번째 logloss 공식은 멀티 클래스 로그 손실을위한 것이며, 여기서 첨자는 다른 클래스를 열거합니다. 공식 각 예에서 단일 가 1이고 나머지는 모두 0이라고 가정합니다.iyi

즉, 수식은 대상 클래스의 오류 만 캡처합니다. "거짓 긍정"으로 간주 될 수있는 오류 개념을 버리고 실제 클래스의 예상 확률 이외의 예상 확률이 어떻게 분포되어 있는지 상관하지 않습니다.

또 다른 가정은 각 예제의 예측에 대해 이라고 가정 합니다. softmax 레이어는이를 자동으로 수행합니다. 다른 것을 사용하는 경우 해당 제약 조건에 맞게 출력을 스케일링해야합니다.iyi=1

질문 1

( )가 0 일 수 있는 문제가 아니 십니까?yilog(yi)

예, 문제가 될 수 있지만 일반적으로 실용적이지 않습니다. 임의로 초기화 된 softmax 레이어는 0어떤 클래스에서도 정확하게 출력 할 가능성이 거의 없습니다 . 그러나 가능하기 때문에 가능합니다. 음수 클래스는 항상 0에 오류를 기여하므로 대해 를 평가하지 마십시오 . 둘째, 실제 코드 에서는 수치 안정성 과 같은 값으로 값을 제한 할 수 있습니다 . 많은 경우에 필요하지는 않지만 합리적인 방어 프로그래밍입니다.log(yi)yi=0log( max( y_predict, 1e-15 ) )

질문 2

교차 엔트로피가Hy(y):=i(yilog(yi)+(1yi)log(1yi))

이 공식은 종종 두 개의 클래스를 예측하는 하나의 출력 (보통 1의 경우 긍정적 인 클래스 멤버쉽과 0의 출력의 경우 부정적인)을 갖는 네트워크에 사용됩니다. 이 경우 하나 개의 값을 가질 수 - 당신이 이상 합을 잃을 수 .ii

이러한 네트워크를 수정하여 두 개의 반대 출력을 갖고 softmax와 첫 번째 logloss 정의를 사용하면 실제로 는 동일한 오류 측정 이지만 두 클래스의 오류 메트릭을 단일 출력으로 접는 것을 알 수 있습니다 .

멤버십을 예측할 클래스가 둘 이상 있고 클래스가 배타적이지 않은 경우 (예를 들어, 클래스가 동시에 또는 일부일 수있는 경우)이 두 번째 공식을 사용해야합니다. 사실이 아닌 숫자 인식의 경우 (기록 된 숫자에는 "true"클래스가 하나만 있어야 함)


두 번째 식의 표현에 일부 모호함이 주 - 이론적으로 하나 개의 클래스를 가정 할 수 있고 다음의 예를 열거한다. i
Neil Slater

죄송합니다. 알고 싶은 것과 다른 것을 요청했습니다. 나는에 문제가 표시되지 않습니다 ,하지만에서 때문에, . 그것에 대한 답변을 조정 해 주시겠습니까? y i = 0 로그 ( y i )log(yi)=0yi=0log(yi)
Martin Thoma

@NeilSlater 클래스가 상호 배타적이지 않은 경우 각 입력의 출력 벡터에 둘 이상의 1이 포함될 수 있습니다. 두 번째 수식을 사용해야합니까?
미디어

1
@ 미디어 : 그렇지 않습니다. 하지만 계층 적 분류와 같은 것을보고 싶을 것입니다. . .
Neil Slater

1
@Javi : OP의 질문에서 는 기본 진리이므로 일반적으로 0 또는 1입니다. 는 softmax 출력입니다. 그러나 부동 소수점 반올림으로 인해 는 실제로 0으로 끝날 수 있습니다. 실제로 발생합니다. y i y iyiyiyi
닐 슬레이터

11

주어지면 기계 학습 방법을 최적화하여 를 가능한 한 가깝게 만들 수 있습니다 . y p r e d i c t y t r u eytrueypredictytrue

첫 번째 질문 :

위의 답변은 첫 번째 공식의 배경, 정보 이론에 정의 된 교차 엔트로피를 설명했습니다.

정보 이론 이외의 의견에서 :

첫 번째 공식에는 위양성에 대한 페널티가 없으며 (진실은 거짓이지만 모델이 옳다고 예측 함) 두 번째 공식에는 위양성에 대한 페널티가 있음을 스스로 확인할 수 있습니다. 따라서 첫 번째 수식 또는 두 번째 수식을 선택하면 메트릭 (일명 모델을 평가하는 데 사용하려는 통계량)에 영향을 미칩니다.

평신도의 말로 :

당신은 거의 모든 좋은 사람들을 당신의 친구로 받아들이고 싶지만 어떤 나쁜 사람들은 당신의 친구가되기를 기꺼이 받아들이고 싶다면, 첫 번째 공식을 기준으로 사용하십시오.

나쁜 사람을 친구로 받아들이는 것을 스스로 처벌하고 싶지만 동시에 좋은 사람이 비율을 받아들이는 것이 첫 번째 조건보다 낮을 수 있다면 두 번째 공식을 사용하십시오.

우리 대부분은 비판적이며 두 번째 것을 선택하고 싶습니다 (많은 ML 패키지가 교차 엔트로피를 가정합니다).

두 번째 질문 :

클래스 당 샘플 당 교차 엔트로피 :

ytruelog(ypredict)

전체 데이터 세트 전체 클래스에 대한 교차 엔트로피 :

inkKytrue(k)log(ypredict(k))

따라서 두 개의 클래스 (K = 2) 만있는 경우 두 번째 수식이 있습니다.


5

이러한 문제는 튜토리얼에서 softmax를 사용하여 처리됩니다.

1) softmax는 입력을 지수화하기 때문에 0이 아닌 출력을 보장하는 것이 맞습니다. relu와 같은 이러한 보증을 제공하지 않는 활성화의 경우, 해당 출력을 피하기 위해 모든 출력에 아주 작은 양의 항을 추가하는 것이 간단합니다.

2)에 관해서는, 그것들은 똑같지는 않지만, 그들이 준 softmax 공식은 문제를 처리합니다. softmax를 사용하지 않으면 모든 입력에 대해 모든 클래스에 대해 1을 추측하는 거대한 바이어스 용어를 배우게됩니다. 그러나 모든 클래스에서 소프트 맥스를 정규화하기 때문에 올바른 클래스의 출력을 최대화하는 유일한 방법은 잘못된 클래스에 비해 크게하는 것입니다.


"softmax가 0이 아닌 출력을 보장한다는 것이 맞습니다."-이것이 이론적으로 사실이라는 것을 알고 있습니다. 실제로, (숫자 문제로 인해) 이것이 0이 될 수 있습니까?
Martin Thoma

좋은 질문. 입력이 플로트의 정밀도에 비해 너무 작은 경우 지수 함수가 0.0을 출력하는 것이 가능하다고 가정합니다. 그러나 대부분의 구현은 0이 아닌 입력을 보장하기 위해 작은 긍정적 인 용어를 추가한다고 생각합니다.
jamesmf

0

( )가 0이 될 수 있는 문제가 ?yilog(yi)

예, 이 정의되어 있지 않기 때문에 실제로는 을 사용하여이 문제를 피할 수 있습니다.log(0)log(yi+ϵ)

맞습니까?
(a) 또는 (b) ?Hy(y):=iyilog(yi)
Hy(y):=i(yilog(yi)+(1yi)log(1yi))

(a) 멀티 클래스 예측에 정확 (실제로 이중 합산), (b)는 2 클래스 예측에 대한 (a)와 동일합니다. 둘 다 교차 엔트로피입니다.

예:

각 학습 데이터 에 레이블 이 있고 모델이 예측 합니다.xici{0,1}ci[0,1]

5 개의 데이터 포인트의 경우, 실제 레이블 및 모델 예측 는 다음과 같습니다. cici

(ci,ci)={(0,0.1),(0,0.4),(0,0.8),(1,0.8),(1,0.2)} (1),

벡터 및 과 같이 정의하십시오.yiyi

  • yik:=1 인 경우 , 그렇지 않으면 ci=k:=0

  • yik:=p(k|xi) 는 가 클래스 속할 확률이며 , 모델별로 추정됩니다.xik

표기법의 예 (1) 은 다음과 같습니다. (yi,yi)

(yi,yi)={([1,0],[0.9,0.1]), ([1,0],[0.6,0.4]), ([1,0],[0.2,0.8]), ([0,1],[0.2,0.8]), ([0,1],[0.8,0.2])} ,

(a)와 (b)는 다음과 같이 계산됩니다.

Hy(y)=1/5([log(0.9)+log(0.6)+log(0.2)]ci=0+[log(0.8)+log(0.2)]ci=1)=0.352

유도:

클래스 에서 까지 여러 클래스가 있다고 가정하십시오 . 트레이닝 포인트 , 는 와 같 으며 위치 에서 1 이고 다른 곳에서는 0입니다. 때 , 우리는 모델의 출력 할 따라서 1에 근접하기를, 손실 로 정의 할 수 은 합니다. 모든 클래스의 손실은 다음과 같이 결합 될 수 있습니다.1K
(xi,ci)ci=kyi=[0,..,1,0,..]kthyik=1yik=p(k|xi)(xi,k)log(yik)yik1log(yik)0

L(yi,yi)=k=1Kyiklog(yik) .

경우 , 다른 모든 종류의 손실 로 비활성화 , 예를 들어, 진정한 라벨 그래서 , 손실 것 있다,이다:yik=1kk0log(yik)=0yim=1

L(yi,yi)=log(yim) 입니다.

모든 교육 포인트에 대한 최종 공식은 다음과 같습니다.

Hy(y)=(xi,yi)k=1Kyiklog(yik) .

이진 분류의 경우 (실제 레이블) 및 (모델 예측)이 있으므로 (a)는 다음과 같이 다시 작성할 수 있습니다.yi0=1yi1yi0=1yi1

Hy(y)=(xi,yi)yi1log(yi1)+yi0log(yi0)=(xi,yi)yi1log(yi1)+(1yi1)log(1yi1)

이는 (b)와 동일합니다.

클래스 간 교차 엔트로피 (a) (1 개의 요약)

클래스에 대한 교차 엔트로피 (a)는 다음과 같습니다.

Hy(y)=k=1Kyklog(yk) ,

이 버전은 분류 작업에 사용할 수 없습니다. 이전 예제의 데이터를 재사용 할 수 있습니다.

(ci,ci)={(0,0.1),(0,0.4),(0,0.8),(1,0.8),(1,0.2)}

경험적 클래스 확률은 이고 .y0=3/5=0.6y1=0.4

모형으로 추정되는 클래스 확률은 이고y0=3/5=0.6y1=0.4

(a)는 됩니다.y0logy0y1logy1=0.6log(0.6)0.4log(0.4)=0.292

두 개의 데이터 포인트 및 는 미스 분류되지만 및 은 올바르게 추정됩니다!(0,0.8)(1,0.2)y0y1

:으로 정확하게 분류 된 모든 5 점 경우 ,
(ci,ci)={(0,0.1),(0,0.4),(0,0.2),(1,0.8),(1,0.8)}

이후 (a) 여전히 동일하게 유지 다시 다음과 같이 추정된다 .y0y0=3/5

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.