A função de erro de entropia cruzada em redes neurais


115

No MNIST para iniciantes em ML, eles definem entropia cruzada como

Hy(y): =-EuyEuregistro(yEu)

yEu é o valor de probabilidade previsto para a classeEu eyEu é a verdadeira probabilidade para essa classe.

Questão 1

Não é um problema que yi (no log(yi) ) possa ser 0? Isso significa que temos um classificador muito ruim, é claro. Mas pense em um erro em nosso conjunto de dados, por exemplo, um "óbvio" 1rotulado como 3. Simplesmente falharia? O modelo que escolhemos (ativação softmax no final) basicamente nunca fornece a probabilidade 0 para a classe correta?

Questão 2

Aprendi que a entropia cruzada é definida como

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

O que é correto? Você tem alguma referência de livro para qualquer versão? Como essas funções diferem em suas propriedades (como funções de erro para redes neurais)?



Respostas:


101

Uma maneira de interpretar a entropia cruzada é vê-la como uma probabilidade de log (menos) para os dados yi , sob um modelo yi .

Ou seja, suponha que você tenha algum modelo fixo (também conhecido como "hipótese"), que prediz para n classes {1,2,,n} suas probabilidades hipotéticas de ocorrência y1,y2,,yn . Suponha que agora você observe (na realidade) k1 instâncias da classe 1 , k2 instâncias da classe 2 , kn instâncias da classe n etc. De acordo com o seu modelo, a probabilidade de isso acontecer é:

P[data|model]:=y1k1y2k2ynkn.
y 1 - k 2 log y Tomando o logaritmo e alterando o sinal:
logP[dumatuma|modeeu]=-k1registroy1-k2registroy2--knregistroyn=-EukEuregistroyEu
Se você agora divide a soma da direita pelo número de observações N=k1+k2++kn , e denota as probabilidades empíricas como yi=ki/N , você obterá a entropia cruzada:
1NlogP[data|model]=1Nikilogyi=iyilogyi=:H(y,y)

Além disso, a probabilidade de log de um conjunto de dados dado um modelo pode ser interpretada como uma medida do "comprimento da codificação" - o número de bits que você espera gastar para codificar essas informações se o seu esquema de codificação se basear em sua hipótese.

Isto resulta da observação de que um evento independente com probabilidade yi requer, pelo menos, log2yi bits para codificar ela (assumindo que a codificação eficiente), e, consequentemente, a expressão

iyilog2yi,
é literalmente o esperado comprimento da codificação, em que os comprimentos de codificação dos eventos são calculados usando a distribuição "hipotética", enquanto a expectativa é assumida sobre a real.

Finalmente, em vez de dizer "medida do comprimento esperado da codificação", gosto muito de usar o termo informal "medida de surpresa". Se você precisar de muitos bits para codificar um evento esperado de uma distribuição, a distribuição será "realmente surpreendente" para você.

Com essas intuições em mente, as respostas para suas perguntas podem ser vistas da seguinte maneira:

  • Pergunta 1 . Sim. É um problema sempre que o y ' correspondenteyifor diferente de zero ao mesmo tempo. Corresponde à situação em que seu modelo acredita que alguma classe tem probabilidade zero de ocorrência e, no entanto, a classe aparece na realidade. Como resultado, a "surpresa" do seu modelo é infinitamente grande: seu modelo não foi responsável por esse evento e agora precisa de infinitos bits para codificá-lo. É por isso que você obtém o infinito como sua entropia cruzada.

    Para evitar esse problema, você precisa se certificar de que seu modelo não faça suposições precipitadas de que algo é impossível enquanto isso pode acontecer. Na realidade, as pessoas tendem a usar funções sigmóides ou "softmax" como modelos de hipóteses, que são conservadoras o suficiente para deixar pelo menos alguma chance para cada opção.

    Se você usar algum outro modelo de hipótese, é sua responsabilidade regularizá-lo (também conhecido como "suave") para que ele não faça a hipótese de zeros onde não deveria.

  • Questão 2 . Nesta fórmula, um geralmente assume yi a ser 0 ou 1 , enquanto yi é hipótese probabilidade do modelo para a entrada correspondente. Se você olhar de perto, verá que é simplesmente log logP[data|model] para dados binários, equivalente à segunda equação nesta resposta.

    Portanto, estritamente falando, embora ainda seja uma probabilidade logarítmica, isso não é sintaticamente equivalente a entropia cruzada. O que algumas pessoas querem dizer quando se refere a uma expressão tal como cruzada entropia é que é, na verdade, uma soma sobre transversais entropias binários de pontos individuais no conjunto de dados:

    iH(yi,yi),
    onde yi e yi devem ser interpretados como as distribuições binárias correspondentes (yi,1yi) e(yi,1yi) .


1
Você pode fornecer uma fonte na qual eles definem ? Aquieles a definem como uma distribuição única para o rótulo de classe atual. Qual é a diferença? yEu=kEuN
Lenar Hoyt

1
No tutorial do MNIST TensorFlow, eles também o definem em termos de vetores quentes.
Lenar Hoyt

@LenarHoyt Quando , k i / N seria equivalente a um ponto quente. Você pode pensar em "quente" como a codificação de um item com base em sua probabilidade categórica empírica (real). N=1ki/N
THN

'evento independente requer ... para codificá-lo' - você poderia explicar este pouco, por favor?
Alex

@ Alex Isso pode precisar de mais explicações para entender corretamente - leia os códigos de Shannon-Fano e a relação da codificação ideal com a equação de entropia de Shannon. Para simplificar, se um evento tem probabilidade 1/2, sua melhor aposta é codificá-lo usando um único bit. Se tiver probabilidade 1/4, você deve gastar 2 bits para codificá-lo, etc. Em geral, se o seu conjunto de eventos tiver probabilidades do formato 1/2 ^ k, deverá fornecer comprimentos k - desta forma, seu código será aproxime-se do comprimento ideal de Shannon.
KT.

22

A primeira fórmula de perda de log que você está usando é para perda de log em várias classes, em que o subscrito enumera as diferentes classes em um exemplo. A fórmula pressupõe que um único y ' i em cada exemplo seja 1 e o restante seja 0.iyi

Isso significa que a fórmula captura apenas erros na classe de destino. Ele descarta qualquer noção de erro que você possa considerar "falso positivo" e não se importa com a distribuição das probabilidades previstas, além da probabilidade prevista da classe verdadeira.

Outra hipótese é que iyi=1 para as previsões de cada exemplo. Uma camada softmax faz isso automaticamente - se você usar algo diferente, precisará escalar as saídas para atender a essa restrição.

Questão 1

Não é um problema que o (em l o g ( y i ) ) poderia ser 0?yilog(yi)

Sim, isso pode ser um problema, mas geralmente não é prático. É extremamente improvável que uma camada softmax inicializada aleatoriamente produza uma exata 0em qualquer classe. Mas é possível, então vale a pena permitir. Em primeiro lugar, não avaliam para qualquer y ' i = 0 , porque as classes negativos sempre contribuem 0 para o erro. Segundo, no código prático, você pode limitar o valor a algo comolog(yi)yi=0log( max( y_predict, 1e-15 ) ) estabilidade numérica - em muitos casos, não é necessário, mas é uma programação defensiva sensata.

Questão 2

Aprendi que cruz-entropia é definido como Hy(y):=i(yilog(yi)+(1yi)log(1yi))

Essa formulação é freqüentemente usada para uma rede com uma saída prevendo duas classes (geralmente associação de classe positiva para 1 e negativa para saída de 0). Nesse caso, posso ter apenas um valor - você pode perder a soma de i .ii

Se você modificar essa rede para ter duas saídas opostas e usar softmax mais a primeira definição de perda de log, poderá ver que, na verdade, é a mesma medição de erro mas dobrando a métrica de erro para duas classes em uma única saída.

Se houver mais de uma classe para prever a associação, e as classes não forem exclusivas, ou seja, um exemplo pode ser uma ou todas as classes ao mesmo tempo, você precisará usar esta segunda formulação. Para o reconhecimento de dígitos, esse não é o caso (um dígito escrito deve ter apenas uma classe "verdadeira")


Note que há alguma ambiguidade na apresentação da segunda fórmula - que poderia, em teoria, assumir apenas uma classe e , então, enumerar os exemplos. i
Neil Slater

Sinto muito, perguntei algo diferente do que eu queria saber. Não vejo problema no , mas em y i = 0 , devido ao log ( y i ) . Você poderia ajustar sua resposta a isso? log(yi)=0yi=0log(yi)
Martin Thoma

@NeilSlater se as classes não forem mutuamente exclusivas, o vetor de saída para cada entrada poderá conter mais de um 1, devemos usar a segunda fórmula?
Meios

1
@ Media: Na verdade não. Você deseja observar coisas como classificação hierárquica. . .
Neil Slater

1
@Javi: No OP questão é a verdade chão, assim normalmente 0 ou 1. É y i que é a saída softmax. No entanto y i pode acabar de zero, na prática, devido ao arredondamento flutuante ponto. Isso realmente acontece. yiyiyi
Neil Slater

11

Dado , você quer otimizar o seu método de aprendizagem de máquina para obter o y p r e d i c t tão perto quanto possível y t r u e .ytrueypredictytrue

Primeira pergunta:

A resposta acima explicou o contexto de sua primeira fórmula, a entropia cruzada definida na teoria da informação.

De uma opinião diferente da teoria da informação:

você pode examinar a si mesmo que a primeira fórmula não possui penalidade na falsa positividade (a verdade é falsa, mas seu modelo prevê que ela está correta), enquanto a segunda fórmula penaliza a falsa positividade. Portanto, a escolha da primeira fórmula ou da segunda afetará suas métricas (também conhecida como quantidade estatística que você gostaria de usar para avaliar seu modelo).

Na palavra leigo:

Se você deseja aceitar quase todas as pessoas boas para ser seu amigo, mas disposto a aceitar que pessoas más se tornem suas amigas, use a primeira fórmula como critério.

Se você deseja se punir aceitando que pessoas más sejam suas amigas, mas ao mesmo tempo sua taxa de aceitação de pessoas boas pode ser menor que a primeira condição, use a segunda fórmula.

Embora, eu acho que a maioria de nós seja crítica e gostaria de escolher o segundo (assim, muitos pacotes ML assumem o que é entropia cruzada).

Segunda questão:

Entropia cruzada por amostra por classe:

ytruelog(ypredict)

Entropia cruz para conjuntos de dados inteiros classes inteiras:

inkKytrue(k)log(ypredict(k))

Assim, quando houver apenas duas classes (K = 2), você terá a segunda fórmula.


5

Esses problemas são tratados pelo uso do softmax pelo tutorial.

Para 1) você está certo de que o softmax garante uma saída diferente de zero, porque exponencia sua entrada. Para ativações que não dão essa garantia (como relu), é simples adicionar um termo positivo muito pequeno a cada saída para evitar esse problema.

Quanto a 2), obviamente, eles não são os mesmos, mas a formulação softmax que eles deram cuida do problema. Se você não usasse o softmax, isso faria com que você aprendesse enormes termos de preconceito que adivinham 1 para cada classe para qualquer entrada. Mas como eles normalizam o softmax em todas as classes, a única maneira de maximizar a saída da classe correta é que ela seja grande em relação às classes incorretas.


"você está certo de que o softmax garante uma saída diferente de zero" - eu sei que esse é teoricamente o caso. Na realidade, pode acontecer que (devido a problemas numéricos) isso se torne 0?
Martin Thoma

Boa pergunta. Suponho que seja perfeitamente possível que a função de exponenciação produza 0,0 se sua entrada for muito pequena para a precisão do seu float. No entanto, eu acho que a maioria das implementações adiciona o pequeno termo positivo para garantir uma entrada diferente de zero.
jamesmf

0

yilog(yi)

log(0)log(yi+ϵ)

O que é correto?
(a) Hy(y):=iyilog(yi) ou
(b) Hy(y):=i(yilog(yi)+(1yi)log(1yi))

(a) está correto para a previsão de várias classes (na verdade, é um somatório duplo), (b) é o mesmo que (a) para a previsão de duas classes. Ambos são entropia cruzada.

Exemplo:

xici{0,1}ci[0,1]

cici

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

yiyi

  • yik:=1ci=k:=0

  • yik:=p(k|xi)xik

(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])}

Ambos (a) e (b) são calculados como:

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

Derivação:

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)

A fórmula final sobre todos os pontos de treinamento é:

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

yi0=1yi1yi0=1yi1

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

que é o mesmo que (b).

Entropia cruzada (a) sobre classes (uma soma)

A entropia cruzada (a) sobre as classes é:

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

Esta versão não pode ser usada para a tarefa de classificação. Permite reutilizar os dados do exemplo anterior:

(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

y0logy0y1logy1=0.6log(0.6)0.4log(0.4)=0.292

(0,0.8)(1,0.2)y0y1


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

y0y0=3/5

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.