Domanda

Come posso impostare le reti neurali in modo che accettino e producano un intervallo di valori continuo anziché discreto? Da ciò che ricordo di aver fatto un corso di rete neurale un paio di anni fa, la funzione di attivazione sarebbe un sigmoide, che produce un valore compreso tra 0 e 1. Se voglio che la mia rete neurale produca un valore scalare reale, cosa dovrei fare ? Ho pensato che se avessi voluto un valore compreso tra 0 e 10 avrei potuto semplicemente moltiplicare il valore per 10? Cosa succede se ho valori negativi? È questo ciò che la gente di solito fa o c'è qualche altro modo? Che dire dell'input?

Grazie

È stato utile?

Soluzione

Gran parte del lavoro nel campo di neuroevolution riguarda l'uso di reti neurali con input continui e uscite.

Esistono diversi approcci comuni:

  • Un nodo per valore
    • Funzioni di attivazione lineare : come altri hanno notato, è possibile utilizzare le funzioni di attivazione non sigmoide sui nodi di output se si è preoccupati della gamma limitata di funzioni sigmoide. Tuttavia, ciò può far sì che l'output diventi arbitrariamente grande, il che può causare problemi durante l'allenamento.
    • Funzioni di attivazione sigmoide : semplicemente ridimensionare l'output sigmoideo (o spostare e ridimensionare, se si desidera valori negativi) è un approccio comune in neuroevoluzione. Tuttavia, vale la pena assicurarsi che la tua funzione sigmoide non sia troppo ripida: una funzione di attivazione ripida significa che il "utile" l'intervallo di valori è piccolo, il che forza i pesi della rete ad essere piccoli. (Questo è principalmente un problema con gli algoritmi genetici, che usano una strategia di modifica del peso fissa che non funziona bene quando si desiderano piccoli pesi.)

 sigmoide normale
(fonte: natekohl.net )
ripido sigmoide
(fonte: natekohl.net )

  • Nodi multipli per valore : la diffusione di un singolo valore continuo su più nodi è una strategia comune per rappresentare input continui. Ha il vantaggio di fornire più "caratteristiche" per una rete con cui giocare, a costo di aumentare le dimensioni della rete.
    • Binning : distribuisci un singolo input su più nodi (ad esempio RBF , dove ogni nodo è una funzione di base con un centro diverso che verrà parzialmente attivato dall'input). Ottieni alcuni dei vantaggi di input discreti senza perdere una rappresentazione fluida.
    • Rappresentazione binaria : dividi un singolo valore continuo in 2 blocchi N , quindi immetti quel valore nella rete come modello binario in N nodi. Questo approccio è compatto, ma piuttosto fragile e produce input che cambiano in modo non continuo.

Altri suggerimenti

Non ci sono regole che richiedono che l'output (*) abbia una funzione particolare . In effetti, in genere è necessario aggiungere alcune operazioni aritmetiche al termine della funzione di per sé implementata in un determinato nodo, al fine di ridimensionare e forzare in altro modo l'output in una forma particolare.

Il vantaggio di lavorare con output tutto-o-niente e / o output normalizzati da 0,0 a 1,0 è che rende le cose più facilmente tracciabili ed evita anche problemi di overflow e simili.

(*) " Output " può essere inteso qui come l'espulsione di un dato nodo (neurone) all'interno della rete o quello della rete nel suo insieme.
Come indicato da Mark Bessey, l'input [sulla rete nel suo insieme] e l'output [della rete] in genere ricevono un filtro / conversione. Come accennato in questa risposta e nel commento di Mark, può essere preferibile avere nodi normalizzati / standard nel "nascosto" strati della rete e applicare una certa normalizzazione / conversione / discretizzazione come richiesto per l'input e / o per l'output della rete; Tale pratica è tuttavia solo una questione di praticità piuttosto che un requisito imperativo delle reti neurali in generale.

In genere è necessario eseguire alcuni filtri (conversione di livello, ecc.) sia sull'ingresso che sull'uscita. Ovviamente, il filtro dell'ingresso cambierà lo stato interno, quindi è necessario prendere in considerazione la possibilità di non perdere il segnale su cui si sta provando ad allenarsi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top