No MNIST para iniciantes em ML, eles definem entropia cruzada como
é o valor de probabilidade previsto para a classe e é a verdadeira probabilidade para essa classe.
Questão 1
Não é um problema que (no ) 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" 1
rotulado 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
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)?
machine-learning
tensorflow
Martin Thoma
fonte
fonte
Respostas:
Uma maneira de interpretar a entropia cruzada é vê-la como uma probabilidade de log (menos) para os dadosy′i , sob um modelo yi .
Ou seja, suponha que você tenha algum modelo fixo (também conhecido como "hipótese"), que prediz paran 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]:=yk11yk22…yknn. y 1 - k 2 log y
Tomando o logaritmo e alterando o sinal:
−logP[data|model]=−k1logy1−k2logy2−⋯−knlogyn=−∑ikilogyEu
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 y′i=ki/N , você obterá a entropia cruzada:
−1NlogP[data|model]=−1N∑ikilogyi=−∑iy′ilogyi=: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 probabilidadeyi requer, pelo menos, −log2yi bits para codificar ela (assumindo que a codificação eficiente), e, consequentemente, a expressão
−∑iy′ilog2yi,
é 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 ' correspondentey′i for 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 assumey′i 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(y′i,yi),
onde y′i e yi devem ser interpretados como as distribuições binárias correspondentes (y′i,1−y′i) e(yi,1−yi) .
fonte
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.i y′i
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
Sim, isso pode ser um problema, mas geralmente não é prático. É extremamente improvável que uma camada softmax inicializada aleatoriamente produza uma exatalog(yi) y′i=0
0
em 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( max( y_predict, 1e-15 ) )
estabilidade numérica - em muitos casos, não é necessário, mas é uma programação defensiva sensata.Questão 2
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 .i i
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")
fonte
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 .ytrue ypredict ytrue
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:
Entropia cruz para conjuntos de dados inteiros classes inteiras:
Assim, quando houver apenas duas classes (K = 2), você terá a segunda fórmula.
fonte
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.
fonte
(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:
Ambos (a) e (b) são calculados como:
Derivação:
A fórmula final sobre todos os pontos de treinamento é:
que é o mesmo que (b).
Entropia cruzada (a) sobre classes (uma soma)
A entropia cruzada (a) sobre as classes é:
Esta versão não pode ser usada para a tarefa de classificação. Permite reutilizar os dados do exemplo anterior:
fonte