Prevendo distribuições de probabilidade usando redes neurais

Se você está acompanhando nosso blog de tecnologia recentemente, deve ter notado que estamos usando um tipo especial de rede neural chamada Rede de densidade de mistura (MDN)

As MDNs não apenas prevêem o valor esperado de um alvo, mas também a distribuição de probabilidade subjacente.

Este post do blog se concentrará em como implementar esse modelo usando o Tensorflow, desde o início, incluindo explicações, diagramas e um notebook Jupyter com todo o código-fonte .

O que são MDNs e por que são úteis?

Os dados da vida real são barulhentos. Embora bastante irritante, esse ruído é significativo, pois oferece uma perspectiva mais ampla das origens dos dados. O valor alvo pode ter diferentes níveis de ruído, dependendo da entrada, e isso pode ter um grande impacto na nossa compreensão dos dados.

Isso é melhor explicado com um exemplo. Assuma a seguinte função quadrática:

 

Dê sua nota! Dê sua nota!

Dado x como entrada, temos uma saída determinística f (x) . Agora, vamos transformar essa função em uma função mais interessante (e realista): adicionaremos algum ruído normalmente distribuído a f (x) . Esse ruído aumentará à medida que x aumentar. Vamos chamar a nova função g (x) , que formalmente é igual a g (x) = f (x) + ? (x) , onde ? (x) é uma variável aleatória normal.

 

Vamos amostrar g (x) para diferentes valores de x :

A linha roxa representa a função silenciosa f (x) , e podemos ver facilmente o aumento do ruído adicionado. Vamos inspecionar os casos onde x = 1 e x = 5 . Para esses dois valores, f (x) = 4 e , portanto, 4 é um valor razoável que g (x) pode assumir. 4.5 também é uma previsão razoável para g (x)? A resposta é claramente não. Enquanto 4.5 parece ser um valor razoável para x = 5 , não podemos aceitá-lo como um valor válido para g (x) quando x = 1 . Se nosso modelo simplesmente aprender a prever y '(x) = f (x) , essas informações valiosas serão perdidas. O que realmente precisamos aqui é de um modelo capaz de prever y '(x) = g (x). E é exatamente isso que um MDN faz.

 

O conceito de MDN foi inventado por Christopher Bishop em 1994. Seu  artigo original explica muito bem o conceito, mas remonta à era pré-histórica em que as redes neurais não eram tão comuns como são hoje. Portanto, falta a parte prática de como realmente implementar uma. E é exatamente isso que vamos fazer agora.

Vamos começar

Vamos começar com uma rede neural simples que apenas aprende  f (x) a partir do conjunto de dados barulhento. Usaremos 3 camadas densas ocultas, cada uma com 12 nós, mais ou menos assim:

Usaremos o erro quadrático médio como a função de perda. Vamos codificar isso no Tensorflow:

 


Strong

5178 Blog Mesajları

Yorumlar