Função de perda para autoencoders

19

Estou experimentando um pouco de auto-codificadores e, com o tensorflow, criei um modelo que tenta reconstruir o conjunto de dados MNIST.

Minha rede é muito simples: X, e1, e2, d1, Y, onde e1 e e2 são camadas de codificação, d2 e Y são camadas de decodificação (e Y é a saída reconstruída).

X tem 784 unidades, e1 tem 100, e2 tem 50, d1 tem 100 novamente e Y 784 novamente.

Estou usando sigmoides como funções de ativação para as camadas e1, e2, d1 e Y. As entradas estão em [0,1] e, portanto, devem ser as saídas.

Bem, tentei usar a entropia cruzada como função de perda, mas a saída sempre foi um blob e notei que os pesos de X a e1 sempre convergiam para uma matriz de valor zero.

Por outro lado, o uso de erros quadráticos médios como função de perda produziria um resultado decente, e agora sou capaz de reconstruir as entradas.

Por que? Eu pensei que poderia interpretar os valores como probabilidades e, portanto, usar entropia cruzada, mas obviamente estou fazendo algo errado.

AkiRoss
fonte
1
Você mencionou o uso do sigmoide para as funções de ativação nas primeiras camadas. Eles exibem "saturação", conforme explicado mais detalhadamente nas Notas do CS231n . Você já tentou outra função de ativação como ReLUs?
Jerry
Não me lembro agora se tentei outro, mas obrigado por compartilhar!
AkiRoss

Respostas:

17

Penso que a melhor resposta para isso é que a função de perda de entropia cruzada não é adequada para essa tarefa em particular.

Ao adotar essa abordagem, você está basicamente dizendo que os dados MNIST verdadeiros são binários e suas intensidades de pixel representam a probabilidade de que cada pixel esteja 'ligado'. Mas sabemos que esse não é realmente o caso. O erro dessa suposição implícita está causando problemas.

-[(alvo)registro(predição)+(1-alvo)registro(1-predição)]

entropia cruzada vs. perda de mse

Podemos ver que a perda de entropia cruzada é assimétrica. Por que queremos isso? É realmente pior prever 0,9 para este pixel 0,8 do que prever 0,7? Eu diria que talvez seja melhor, se alguma coisa.

Provavelmente, poderíamos entrar em mais detalhes e descobrir por que isso leva aos blobs específicos que você está vendo. Eu arriscaria um palpite de que é porque as intensidades de pixel estão acima de 0,5, em média, na região em que você está vendo o blob. Mas, em geral, este é um caso das suposições implícitas de modelagem que você fez como inadequadas para os dados.

Espero que ajude!

nlml
fonte
3
wo que função de perda é adequada se a entrada estiver flutuando entre 0 e 1?
Jemshit Iskenderov
Perda de entropia binária cruzada
torayeff 06/07/19