Come ottenere output continui a valore reale dalla rete neurale?


13

Nella maggior parte degli esempi che ho visto finora di reti neurali, la rete viene utilizzata per la classificazione e i nodi vengono trasformati con una funzione sigmoide. Tuttavia, vorrei utilizzare una rete neurale per produrre un valore reale continuo (realisticamente l'output sarebbe normalmente compreso tra -5 e +5).

Le mie domande sono:

1. Should I still scale the input features using feature scaling? What range?
2. What transformation function should I use in place of the sigmoid?

Sto cercando di implementarlo inizialmente in PyBrain che descrive questi tipi di layer .

Quindi sto pensando che dovrei avere 3 livelli per iniziare (un livello di input, nascosto e output) che sono tutti livelli lineari? È un modo ragionevole? O in alternativa potrei "allungare" la funzione sigmoide nell'intervallo da -5 a 5?


1
Sicuro che puoi usare un sigmoide . Ad esempio, iniziare dalla funzione logistica, moltiplicare per 10, sottrarre 5 ...[,][5,5]
cbeleites supporta Monica

C'è un motivo particolare che stai evitando di usare due livelli nascosti? Sembrerebbe essere il modo più semplice per ottenere l'output continuo di valore reale da una rete neurale. "Qualsiasi funzione può essere approssimata all'accuratezza arbitraria da una rete con due livelli nascosti" (menzionata nelle note della diapositiva di testo di apprendimento automatico Mitchell 26: cs.cmu.edu/afs/cs.cmu.edu/project/theo-20/ www / mlbook / ch4.pdf )
Chris Simokat,

@ChrisSimokat: No, ma la maggior parte di ciò che ho letto finora suggerisce un singolo livello nascosto come punto di partenza ragionevole. Una singola rete a strati nascosti non può approssimare alcuna funzione?
Utente

1
@ChrisSimokat: Forse mi manca qualcosa ma ho pensato che il singolo strato nascosto non equivale a "perceptron singolo strato", no?
Utente

1
No, non ti stai perdendo nulla che a quanto pare non stavo leggendo abbastanza da vicino per quello.
Chris Simokat,

Risposte:


12

1 . Devo comunque ridimensionare le funzionalità di input utilizzando il ridimensionamento delle funzionalità? Quale gamma?

Il ridimensionamento non peggiora nulla. Leggi questa risposta dalla rete neurale di Sarle FAQ: Oggetto: Devo normalizzare / standardizzare / riscalare i dati?.

2 . Quale funzione di trasformazione dovrei usare al posto del sigmoide?

[0,1][1,1][5,5]


Qual è il modo corretto di ridimensionare l'output della rete neurale nell'intervallo [-5,5]?
Utente

3
e[a,b][c,d]eaba(dc)+c

2
Ma poiché sigmoid non è lineare, con una distribuzione uniforme che campiona il valore di sigmoid, avremmo probabilmente ottenere qualcosa vicino a 1 o vicino a 0. Ciò significa che dobbiamo imparare la nostra rete per scegliere i valori nel mezzo più attentamente. Sigmoid + ridimensionamento è davvero una buona scelta?
Smarty77,

0

Disclaimer: l'approccio presentato non è fattibile per valori continui, ma credo abbia un certo peso nel processo decisionale per il progetto Smarty77 ha sollevato un buon punto sull'uso di una funzione sigmoide riscalata. Inerentemente, la funzione sigmoide produce una probabilità, che descrive un tasso di successo di campionamento (vale a dire che 95 foto su 100 con queste caratteristiche sono correttamente "cane"). Il risultato finale descritto è binario e l'addestramento, usando l'entropia binaria incrociata, descrive un processo di separazione dei risultati diametralmente opposti, che intrinsecamente scoraggia i risultati a medio raggio. Il continuum dell'output è semplicemente lì per il ridimensionamento basato sul numero di campioni (vale a dire un risultato di 0,9761 significa che 9761 su 10000 campioni che visualizzano questi o triats simili sono "cane"), ma ogni risultato stesso deve ancora essere considerato binario e non arbitrariamente granulare. Come tale, non dovrebbe essere confuso e applicato come si farebbe con numeri reali e potrebbe non essere applicabile qui. Anche se non sono sicuro dell'utilizzo della rete, normalizzerei il vettore di output stesso. Questo può essere fatto con softmax. Ciò richiederà anche che vi siano 11 uscite lineari (bin) dalla rete (una per ogni uscita da -5 a +5), una per ogni classe. Fornirà un valore di garanzia per ogni "cestino" che rappresenta la risposta corretta. Questa architettura sarebbe addestrabile con la codifica one-hot, con 1 che indica il bin corretto. Il risultato è quindi interpretabile in vari modi, come una strategia avida o un campionamento probabilistico. Tuttavia, per ripeterlo in una variabile continua, la sicurezza di ciascun indice può essere utilizzata come peso per posizionare un marker su una linea numerica (simile al comportamento dell'unità sigmoidea), ma ciò evidenzia anche il problema principale: se la rete è abbastanza certa il risultato è -2 o +3, ma assolutamente certo che non è nient'altro, +1 è un risultato praticabile? Grazie per la vostra considerazione. Buona fortuna per il tuo progetto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.