Pergunta

Como posso definir Redes Neurais para que eles aceitem e saída de uma faixa contínua de valores em vez de um mais discreto? Pelo que me lembro de fazer uma classe de Rede Neural um par de anos atrás, a função de ativação seria um sigmóide, que produz um valor entre 0 e 1. Se eu quiser minha rede neural para produzir um escalar real valorizado, o que devo fazer ? Eu pensei que talvez se eu queria um valor entre 0 e 10 que pude basta multiplicar o valor por 10? E se eu tiver valores negativos? É isso que as pessoas costumam fazer ou há alguma outra maneira? E sobre a entrada?

Graças

Foi útil?

Solução

Muito do trabalho no campo da neuroevolution envolve o uso de redes neurais com entradas contínuas e saídas.

Existem várias abordagens comuns:

  • Um nó por valor
    • funções de ativação linear - como outros já registou, você pode usar funções de ativação não-sigmóide em nós de saída, se você está preocupado com a gama limitada de funções sigmóide. No entanto, isso pode causar a sua saída para se tornar arbitrariamente grande, o que pode causar problemas durante o treinamento.
    • funções de ativação sigmóide - simplesmente escala de saída sigmóide (ou mudando e escala, se você quiser valores negativos) é uma abordagem comum em neuroevolution. No entanto, vale a pena garantir que o seu função sigmóide não é muito íngreme: uma ativação íngreme meios de função que a faixa "útil" de valores é pequeno, que pesa rede forças para ser pequena. (Isto é principalmente um problema com algoritmos genéticos, que utilizam uma estratégia de modificação de peso fixo que não funciona bem quando pequenos pesos são desejados.)

sigmóide regular
(fonte: natekohl.net )
sigmóide íngreme
(fonte: natekohl.net )

  • Vários nós por valor - espalhando um único valor contínua ao longo de vários nós é uma estratégia comum para representar entradas contínuas. Tem a vantagem de fornecer mais "recursos" para uma rede para brincar, ao custo de aumentar o tamanho da rede.
    • Binning - spread uma única entrada sobre vários nós (por exemplo redes RBF , onde cada nó é uma função de base com um centro diferente que irá ser parcialmente activado pela entrada). Você ganha alguns dos benefícios de entradas discretas sem perder uma representação suave.
    • representação binária - dividir um único valor constante para 2 N pedaços, em seguida alimentar que o valor para a rede como um padrão binário para N nós. Esta abordagem é compacto, mas tipo de frágil e resultados na entrada que mudanças na forma não contínua.

Outras dicas

Não existem regras que exigem a saída (*) para ser qualquer função particular . Na verdade, normalmente precisam Adicionar algumas operações aritméticas no final da função per-se implementado em um determinado nó, a fim de escala e de outra forma coagir a saída para uma forma particular.

A vantagem de trabalhar com tudo-ou-nada saídas e / ou 0,0 a 1,0 de saída normalizada é que ele torna as coisas mais facilmente tratável, e também evitar problemas de transbordamento e tal.

(*) "Output" pode ser entendido aqui como quer o ouptut um determinado nó (neurônio) dentro da rede ou de rede como um todo.
Tal como indicado por Mark Bessey a entrada [para a rede como um todo] e a saída [da rede] tipicamente receber alguma filtragem / conversão. Como sugerido nesta resposta e no comentário de Marcos, pode ser preferível ter normalizado / nós padrão nas camadas "escondido" da rede, e aplicar alguma normalização / conversão / discretização conforme exigido para a entrada e / ou para a saída de a rede; Tal prática é no entanto apenas uma questão de praticidade ao invés de uma exigência imperativa de Redes Neurais em geral.

Você normalmente precisa fazer alguma filtragem (conversão de nível, etc) sobre a entrada e a saída. Obviamente, filtrando a entrada muda o estado interno, por isso algumas necessidades consideração a ser dada para não perder o sinal que você está tentando treinar.

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