Come posso migliorare la mia rete neurale nel prevedere le onde sinusoidali?


21

Qui, dai un'occhiata: Onda sinusoidale generata puoi vedere esattamente dove finiscono i dati di allenamento. I dati di allenamento vanno da a .11

Ho usato Keras e una rete densa 1-100-100-2 con attivazione tanh. Calcolo il risultato da due valori, p e q come p / q. In questo modo posso raggiungere qualsiasi dimensione del numero usando solo valori inferiori a 1.

Si prega di notare che sono ancora un principiante in questo campo, quindi andate piano con me.


1
Per chiarire, i tuoi dati di allenamento vanno da circa -1,5 a +1,5, quindi la rete l'ha imparato con precisione? Quindi la tua domanda riguarda l'estrapolazione del risultato in numeri invisibili al di fuori dell'intervallo dei dati di allenamento?
Neil Slater,

11
Potresti provare Fourier a trasformare tutto e lavorare nel dominio della frequenza.
Nick Alger,

4
Ai futuri revisori: non so perché questo venga segnalato per la chiusura. Mi sembra perfettamente chiaro: si tratta di strategie per la modellazione di dati periodici con reti neurali.
Sycorax dice di reintegrare Monica l'

1
Penso che sia una domanda ragionevole per un principiante nel campo dell'apprendimento automatico, che dovremmo accogliere qui. Non vorrei chiuderlo
Aksakal l'

1
Non so se questo sarà di aiuto, ma un NN vaniglia sarà in grado di apprendere solo funzioni polinomiali. In pratica va bene dato che puoi far chiudere arbitrariamente un polinomio a intervalli fissi. Ma significa che non puoi mai imparare un'onda sinusoidale che si estende oltre le estremità dell'intervallo. Il trucco come indicato da altre risposte di seguito è quello di trasformare il problema in uno che può essere risolto in quel modo. Questo è ciò che suggerisce la trasformazione di Fourier, e in quel caso l'apprendimento di un'onda sinusoidale sta solo imparando una costante.
Ukko,

Risposte:


19

Stai utilizzando una rete feed-forward; le altre risposte hanno ragione sul fatto che le FFNN non sono ottime per l'estrapolazione oltre la gamma dei dati di addestramento.

Tuttavia, poiché i dati hanno una qualità periodica, il problema potrebbe essere suscettibile di modellizzazione con un LSTM. Gli LSTM sono una varietà di celle di rete neurale che operano su sequenze e hanno una "memoria" su ciò che hanno "visto" in precedenza. L'estratto di questo capitolo del libro suggerisce che un approccio LSTM è un successo qualificato su problemi periodici.

In questo caso, i dati di allenamento sarebbero una sequenza di tuple e il compito di fare previsioni accurate per i nuovi input per alcuni ed indici qualche sequenza crescente. La lunghezza di ciascuna sequenza di input, la larghezza dell'intervallo che coprono e la loro spaziatura, sono a te. Intuitivamente, mi aspetto che una griglia regolare che copra 1 periodo sia un buon punto di partenza, con sequenze di allenamento che coprono una vasta gamma di valori, piuttosto che limitarsi a un certo intervallo.(Xio,peccato(Xio))Xio+1...Xio+nnio

(Jimenez-Guarneros, Magdiel e Gomez-Gil, Pilar e Fonseca-Delgado, Rigoberto e Ramirez-Cortes, Manuel e Alarcon-Aquino, Vicente, "Previsione a lungo termine di una funzione seno mediante una rete neurale LSTM", in Natura- Design ispirato di sistemi intelligenti ibridi )


2
Qual è la sequenza che viene modellata qui? Quali sono i passi temporali? Mi sembra una semplice applicazione che si adatta alla curva.
David J. Harris,

@ DavidJ.Harris Ho aggiornato la mia risposta.
Sycorax dice di reintegrare Monica il

qual è la frequenza delle serie non è ? 1/(2π)
Aksakal,

È così che fanno previsioni di mercato, per esempio?
Markus Appel,

3
No, non è così che fai previsioni di mercato. Almeno non come lo fai per fare soldi.
Aksakal,

13

Se quello che vuoi fare è imparare semplici funzioni periodiche come questa, allora potresti esaminare i processi gaussiani. I medici di base ti consentono di rafforzare la conoscenza del tuo dominio specificando un'adeguata funzione di covarianza; in questo esempio, poiché sai che i dati sono periodici, puoi scegliere un kernel periodico, quindi il modello estrapolerà questa struttura. Puoi vedere un esempio nella figura; qui, sto cercando di adattare i dati di altezza delle maree, quindi so che ha una struttura periodica. Poiché sto usando una struttura periodica, il modello estrapola questa periodicità (più o meno) correttamente. OFC se stai cercando di conoscere le reti neurali questo non è molto pertinente, ma potrebbe essere un approccio leggermente migliore rispetto alle funzionalità di ingegneria manuale. Per inciso, le reti neurali e i GP sono strettamente correlati in teoria,inserisci qui la descrizione dell'immagine

I GP non sono sempre utili perché, a differenza delle reti neurali, sono difficili da scalare su set di dati di grandi dimensioni e reti profonde, ma se sei interessato a problemi di bassa dimensione come questo probabilmente saranno più veloci e più affidabili.

(nella foto, i punti neri sono dati di allenamento e il rosso sono i bersagli; puoi vedere che anche se non lo fa esattamente, il modello apprende la periodicità approssimativamente. Le bande colorate sono gli intervalli di confidenza dei modelli predizione)


2
Questa trama è bellissima.
Sycorax dice di reintegrare Monica il

11

Gli algoritmi di apprendimento automatico - comprese le reti neurali - possono imparare ad approssimare funzioni arbitrarie, ma solo nell'intervallo in cui vi è una densità sufficiente di dati di allenamento.

Gli algoritmi di apprendimento automatico basati su statistiche funzionano meglio quando eseguono l'interpolazione, prevedendo valori vicini o tra gli esempi di addestramento.

Al di fuori dei tuoi dati di allenamento, speri in un'estrapolazione. Ma non esiste un modo semplice per raggiungere questo obiettivo. Una rete neurale non impara mai una funzione analiticamente, solo approssimativamente tramite la statistica - questo è vero per quasi tutte le tecniche ML di apprendimento supervisionato. Gli algoritmi più avanzati possono avvicinarsi arbitrariamente a una funzione scelta, dati abbastanza esempi (e parametri liberi nel modello), ma lo faranno comunque solo nella gamma dei dati di addestramento forniti.

Il modo in cui la rete (o altri ML) si comporta al di fuori dell'intervallo dei dati di allenamento dipenderà dalla sua architettura, comprese le funzioni di attivazione utilizzate.

peccatopeccato(X),peccato(2X+π/4)peccato


"Una rete neurale non impara mai una funzione analiticamente, solo approssimativamente tramite la statistica." - lo stesso si può dire quasi di tutto ciò che viene utilizzato in pratica, ad esempio FFT non impara neanche analiticamente. È possibile aumentare la frequenza di campionamento e il periodo all'infinito e avvicinarsi all'infinito alla funzione reale, ma lo stesso vale per NN.
Aksakal,

@Aksakal: Sì, è vero. Tuttavia, non volevo affermare che "Tutti gli algoritmi ML non imparano mai le funzioni in modo analitico ..." perché qualcuno senza dubbio troverebbe un contro-esempio di un discente analitico bayesiano o di una programmazione genetica ecc. ecc. Cercherò di modificarlo per renderlo più generale
Neil Slater,

9

In alcuni casi, l'approccio suggerito da @Neil Slater di trasformare le tue funzionalità con una funzione periodica funzionerà molto bene e potrebbe essere la soluzione migliore. La difficoltà qui è che potresti dover scegliere il periodo / lunghezza d'onda manualmente (vedi questa domanda ).

Se si desidera che la periodicità sia integrata più profondamente nella rete, il modo più semplice sarebbe utilizzare sin / cos come funzione di attivazione in uno o più livelli. Questo documento discute potenziali difficoltà e strategie per gestire le funzioni di attivazione periodica.

In alternativa, questo documento adotta un approccio diverso, in cui i pesi della rete dipendono da una funzione periodica. L'articolo suggerisce anche l'uso di spline invece di sin / cos, poiché sono più flessibili. Questo è stato uno dei miei articoli preferiti l'anno scorso, quindi vale la pena leggere (o almeno guardare il video) anche se non si finisce per usare il suo approccio.


9

Hai adottato un approccio sbagliato, con questo approccio non è possibile fare nulla per risolvere il problema.

Esistono diversi modi per risolvere il problema. Suggerirò il più ovvio attraverso l'ingegnerizzazione delle funzionalità. Invece di collegare il tempo come una caratteristica lineare, mettilo come resto del modulo T = 1. Ad esempio, t = 0,2, 1,2 e 2,2 diventeranno tutti una caratteristica t1 = 0,1 ecc. Fintanto che T è maggiore del periodo di onda, questo funzionerà. Collega questa cosa alla tua rete e vedi come funziona.

L'ingegneria delle caratteristiche è sottovalutata. C'è questa tendenza in AI / ML in cui gli addetti alle vendite affermano che scarichi tutti i tuoi input nella rete e in qualche modo capirà cosa farne. Certo, come hai visto nel tuo esempio, ma poi si rompe facilmente. Questo è un ottimo esempio che mostra quanto sia importante creare buone funzionalità anche nei casi più semplici.

Inoltre, spero che ti renda conto che questo è l'esempio più rozzo di ingegneria delle funzionalità. È solo per darti un'idea di cosa potresti farci.

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.