Pergunta

Eu pedi outro popular AI esta pergunta, mas eu realmente não ter sido dada uma resposta que me satisfez.

Para qualquer outra pessoa que tenha programado uma rede neural artificial antes, como você testar a sua correção?

Eu acho que, uma outra maneira de colocá-lo é, como é que uma depuração do código por trás de uma rede neural?

Foi útil?

Solução

A exatidão é um conceito engraçado na maioria dos "soft computing". O melhor que eu posso dizer é: "uma rede neural é correta quando consistentemente satisfaz os parâmetros de seu design." Você faz isso através da formação-lo com dados, e depois verificar com outros dados, e ter um ciclo de feedback no meio que permite saber se a rede neural está funcionando de forma adequada.

Este é de curso o caso apenas para redes neurais que são grandes o bastante para que uma prova direta de correção não é possível. É possível provar que uma rede neural é correta através da análise, se você está tentando construir uma rede neural que aprende XOR ou algo semelhante, mas para essa classe de problema de uma RNA é raramente necessário.

Outras dicas

Com as redes neurais, geralmente o que está acontecendo é que você está tomando uma rede neural destreinado, e você está treinando-lo usando um determinado conjunto de dados, para que responda da maneira que você espera. Aqui está o acordo; Normalmente, você está treinando-lo até um determinado nível de confiança para as suas entradas. Geralmente (e novamente, este é apenas geralmente, sua milhagem pode variar), você não pode obter redes neurais para fornecer sempre a resposta certa; em vez disso, você está recebendo o estimativa da resposta certa, para dentro de um intervalo de confiança. Você sabe que faixa de confiança, como você ter treinado a rede.

A questão de saber por que você iria querer usar redes neurais se você não pode ter certeza de que a conclusão a que cheguei é verificável correta; a resposta é que as redes neurais podem chegar a respostas de alta confiança para certas classes de problemas (especificamente, problemas NP-completos) em tempo linear, enquanto que soluções comprovadamente corretas de problemas NP-completos só pode ser alcançado em tempo polinomial. Em termos leigos, redes neurais pode "resolver" os problemas que a computação normal não pode; mas você só pode ser uma certa percentagem confiante de que você tem a resposta certa. Você pode determinar que a confiança pelo regime de treinamento, e geralmente pode ter certeza de que você terá pelo menos 99,9% de confiança.

Você está abrindo um maior lata de vermes aqui do que você poderia esperar.

O NN são talvez melhor pensado como aproximadores função universal, a propósito, o que pode ajudá-lo a pensar sobre essas coisas.

De qualquer forma, não há nada de especial sobre NN de em termos da sua questão, o problema se aplica a qualquer tipo de algoritmo de aprendizado.

A confiança que você tem nos resultados é dando que vai contar com a quantidade e qualidade (muitas vezes mais difícil de determinar) dos dados de treinamento que você tem.

Se você está realmente interessado neste material, você pode querer ler um pouco sobre os problemas de overtraining, e métodos de ensemble (ensacamento, aumentando, etc.).

O problema real é que você geralmente não estão realmente interessados ??na "correção" (qualidade cf) de uma resposta sobre um dado de entrada que você já viu, em vez você se preocupa com a previsão da qualidade da resposta de uma entrada você não viu ainda. Este é um problema muito mais difícil. abordagens típicas então, envolvem "segurando" alguns dos seus dados de treinamento (ou seja, o que você sabe a resposta "correta" para) e testando seu sistema treinados contra isso. Fica embora sutil, quando você começar a considerar que você pode não ter dados suficientes, ou pode ser tendenciosa, etc. Portanto, há muitos pesquisadores que, basicamente, gastar todo o seu tempo pensando sobre estes tipo de problemas!

Eu tenho trabalhado em projetos onde não há dados de teste, bem como dados de treinamento, para que você saiba os resultados esperados para um conjunto de entradas a NN não viu.

Uma maneira comum de analisar o resultado de qualquer classificador é o uso de uma curva ROC; uma introdução para as estatísticas de classificadores e curvas ROC podem ser encontradas em Interpretação testes de diagnóstico

Eu sou um completo amador neste campo, mas você não usar um conjunto pré-determinado de dados que você sabe que é correto?

Eu não acredito que há uma única resposta correta, mas existem métodos probabilísticos ou estatísticos comprovados que podem fornecer segurança. Os métodos estatísticos são geralmente referidos como Resampling .

Um método que eu posso recomendar é o Jackknife .

Meu professor sempre disse que sua regra de ouro foi para treinar o NN com 80% de seus dados e validá-lo com os outros 20%. E, claro, certifique-se de que conjunto de dados é tão abrangente quanto você precisa.

Se você quiser descobrir se o backpropagation da rede está correto, há uma maneira fácil.

Uma vez que você calcular o derivado da paisagem de erro, você pode verificar se a sua implementação é numericamente correta. Você vai calcular a derivada do erro com respeito a um peso específico, ?E / ?w. Você pode mostrar que

?E / ?w = (E (w + E) - E (w - e)). / (2 * E) + O (e ^ 2)

(Bishop, Machine Learning e Reconhecimento de Padrões, p. 246)

Essencialmente, você avaliar o erro para a esquerda do peso, avaliá-lo para a direita do peso e chheck se o gradiente numérica é a mesma que a sua inclinação analítica.

(Aqui está uma implementação: http: // github.com/bayerj/arac/raw/9f5b225d6293974f8adfc5f20dfc6439cc1bed35/src/cpp/utilities/utilities.cpp )

Para mim, provavelmente há apenas um valor (s) leva esforço extra para verificar, o gradiente da propagação de volta. Eu acho que a resposta da Bayer é realmente comumente usado e sugeriu. Você precisa escrever código extra para isto, mas todos são para a frente produto de matrizes de propagação que é fácil escrever e verificar.

Existem algumas outras questões que vai impedi-lo de obter a melhor resposta, por exemplo:

  • A função de custo de NN não é côncava para que o seu gradiente descendente não está garantido para encontrar o ótimo global.
  • Over / under montagem
  • Não escolher a características "certas" / modelo
  • etc

No entanto, eu acho que eles estão fora do âmbito de bug de programação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top