Rete neurale in forma di script - pagina 9

 
Andy_Kon писал (а) >>

Quanto è importante la precisione per il sigmoide?

Dopo 20 la precisione è nella nona cifra...


Nell'allenamento, ha un effetto. A volte può avere un effetto molto grave sulla convergenza, fino al disimparare.

Questo non dovrebbe essere un problema quando si usa GA per la formazione.

 
YuraZ писал (а) >>

3 - cosa inserire (è chiaro quante voci)

4-quando riqualificare

5-quale algoritmo di apprendimento scegliere

GA - genetico

BP -


3. Davvero un problema, tutto dipende dall'immaginazione :).

4. Qui è dove si può barare. Creare una rete con la capacità di dimenticare. Non è così difficile.

Supponiamo che tu possa fare quanto segue (ottimo per imparare con BP):

Limitare il numero di modelli, diciamo 1000.

Quando appare il prossimo modello (un nuovo TF, per esempio)

- cancella il modello più vecchio

- Fare un ciclo di apprendimento

- Per un nuovo modello dovremmo insegnarlo 5 volte.



Cosa si ottiene?

+ Il ciclo di allenamento non dura a lungo.

+ Il vecchio modello non sarà dimenticato subito.

- il nuovo modello non si impara subito, ma

+ ma più velocemente del vecchio modello viene dimenticato a causa dell'apprendimento aggressivo (5 volte UNA).

- adatto solo per l'apprendimento della BP



5. è un dilemma,

GA - scende costantemente verso l'optimum, ha protezione dai minimi locali grazie alle sue proprietà, ma mangia molta memoria ed è selvaggiamente lento.

BP non garantisce alcun risultato, anche se la probabilità è molto alta (cioè se GA è in grado di insegnare, anche BP insegnerà), è più veloce, non mangia memoria, ma ha bisogno di caratteristiche come Momentum (sbarazzarsi dei minimi locali) e passo adattivo (anche i minimi vengono saltati, in più la velocità di apprendimento aumenta molte volte).



Io sono per la BP.

 
TheXpert писал (а) >>

3. Davvero un problema, tutto dipende dall'immaginazione :).

4. È qui che si può barare. Creare una rete con la capacità di dimenticare. Non è così difficile.

Supponiamo che tu possa fare quanto segue (ottimo per imparare con BP):

Limitare il numero di modelli, diciamo 1000.

Quando appare il prossimo modello (un nuovo TF, per esempio)

- cancella il modello più vecchio

- Fare un ciclo di apprendimento

- Per un nuovo modello dovremmo insegnarlo 5 volte.



Cosa si ottiene?

+ Il ciclo di allenamento non dura a lungo.

+ Il vecchio modello non viene dimenticato subito.

- il nuovo modello non si impara subito, ma

+ ma più velocemente del vecchio modello viene dimenticato a causa dell'apprendimento aggressivo (5 volte UNA).

- adatto solo per l'apprendimento della BP



5. è un dilemma,

GA - scende costantemente verso l'optimum, ha protezione dai minimi locali grazie alle sue proprietà, ma mangia molta memoria ed è selvaggiamente lento.

BP non garantisce alcun risultato, anche se la probabilità è molto alta (cioè se GA è in grado di insegnare, il 95% di BP insegnerà anche), è più veloce, non mangia memoria, ma ha bisogno di caratteristiche come Momentum (sbarazzarsi dei minimi locali) e passo adattivo (anche i minimi vengono saltati, e la velocità di apprendimento aumenta molte volte).



Io sono per la BP.


questo è un esempio del lavoro di GA

fonte in SI...


GA è lodato per la sua velocità come veloce

C'è anche MGA, che è ancora più coraggioso.


---

Beh, fondamentalmente GA o MGA è una ricerca veloce di massimo o minimo

almeno METAQUOTES ha usato GA per la velocità, non qualcos'altro ...

File:
dio.zip  4 kb
 
YuraZ писал (а) >>


in termini di velocità, GA è lodato come veloce.

C'è anche MGA, che è ancora più vivace.


---

Beh, fondamentalmente GA o MGA è una ricerca veloce di massimo o minimo

almeno gli esperti di METAQUOTES hanno usato GA per la velocità nel loro test e non qualcos'altro ...


GA è sicuramente più lento di BP.

Metaquotes l'ha applicato abbastanza correttamente perché GA è una cosa selvaggiamente versatile. E naturalmente sarà più veloce di un semplice overkill.

La questione è la stessa che nella neuronica - non è la neuronica che riconosce le lettere, ma algoritmi specializzati, le reti FR non usano.

Allo stesso modo, è meglio usare algoritmi specializzati per l'addestramento, sono migliori a priori.

 
TheXpert писал (а) >>

GA è chiaramente più lento di BP.

Metaquotes l'ha applicato correttamente perché GA è molto versatile. E naturalmente sarà più veloce della semplice forza bruta.

La questione è diversa, proprio come con i neuroni - le lettere non sono riconosciute dai neuroni, ma da algoritmi specializzati, che le reti FR non usano.

Allo stesso modo, è meglio usare algoritmi specializzati per l'allenamento, sono a priori migliori.

E da dove viene questa informazione, se non è un segreto? Che dire allora dell'addestramento di FR con degli esempi?

E qual è la differenza (in linea di principio) tra un algoritmo specializzato e una rete neurale addestrata?

 
Sergey_Murzinov писал (а) >>

Da dove viene questa informazione, se non è un segreto? E l'addestramento di FR con esempi?

E qual è la differenza (in linea di principio) tra algoritmo specializzato e rete neurale addestrata (allenata)?

Beh, prima di tutto le reti neurali non sono la soluzione migliore per il riconoscimento dei caratteri. Anche se neocognitron ha raggiunto il 99,7% con il dizionario, su caratteri con giri, davvero non è il punto.

Vai su RSDN.ru e leggi le discussioni relative alle reti neurali. Ci sono ragazzi molto intelligenti lì, a proposito, penso che puoi trovare alcuni di loro anche qui :) .


Di imparare con l'esempio, come questo:

- vettorializzare (fare uno scheletro)

- contare le intersezioni e le loro posizioni relative

- prendere, per esempio, un paio di coefficienti della prima trasformata di Fourier, normalizzando in anticipo per la dimensione insensibile. A proposito, con FT si può ottenere l'insensibilità alla rotazione, EMMNIP.

- media per gli esempi

- metterlo nella base come riferimento


In cosa è diverso?

Quando si usa un algoritmo speciale, si sa come funziona.

Non sai come fa una rete neurale. Si sa solo che questa particolare funzione definita da una rete neurale è in grado di interpolare gli input in output con un alto grado di precisione.

 

Yaaaaaaaaaaaaa!!!!!!!

A proposito, RSDN.RU è un forum per programmatori, non per sviluppatori di algoritmi di reti neurali e delle loro applicazioni.

Vi informo che FineReader utilizza blocchi di tecnologia a rete neurale (ultime versioni). E consiglio anche di leggere la letteratura speciale (non scientifica popolare) e leggere i rami dei forum specializzati per farsi un'idea sulle reti neurali.

Una rete addestrata è anche un algoritmo speciale. L'esempio più semplice può essere visto generando codice C nel programma NeuroShell2. Il codice della rete è perfettamente visibile.

 
Sergey_Murzinov писал (а) >>

Giusto perché tu lo sappia, FineReader utilizza blocchi di tecnologia a rete neurale (ultime versioni). E per avere un'idea delle reti neurali consiglio di leggere la letteratura speciale (non la scienza popolare) e leggere i rami dei forum specializzati.

OK, posso avere qualche link sull'argomento?
 

2 YuraZ

Subito voglio dire grazie mille per il tuo codice di rete neurale.

Dopo un'analisi dettagliata, ho capito che usate il metodo dell'offset neurale (array _threshold e _t_change) e anche il metodo degli impulsi (parametro Momentum) per accelerare i calcoli.

Ho alcune domande sulla sua attuazione.
1) Cambiate _t_change nella funzione di correzione dei pesi, ma poi non usate quella correzione da nessuna parte per calcolare il nuovo array di pesi _threshold.

2) Quando si passa l'output alla funzione sigmoide, si sottrae il parametro _threshold dalla somma, anche se, come scritto in letteratura, questo peso soglia non è -1 ma +1. Quindi si dovrebbe aggiungere, non sottrarre. Tanto più che quando si regolano i pesi si alimenta esattamente +1 e non -1.
In realtà ho pasticciato con questa soglia e l'impulso, e si scopre che aiuta davvero la velocità dei calcoli. Il tempo è ridotto di diverse volte.

3) Ero anche interessato alla funzione sigmoide. Da quanto ho capito, tali parametri sono dovuti alla tua esperienza pratica in questo campo, ma credo che tu abbia letto i libri di Usserman, dove scrive che l'intervallo {0,1} non è ottimale. Il valore della correzione del peso è proporzionale al livello di uscita, e il livello di uscita zero porta il peso a non cambiare. E poiché con i vettori di input binari la metà dei valori sarà in media zero, anche i pesi a cui sono associati non impareranno!
La soluzione è portare gli ingressi nell'intervallo {-0.5,0.5} e aggiungere un offset al sigmoide anch'esso di 0.5. Tale sigmoide [1/(1+Exp(-x))-0.5], con un intervallo {-0.5,0.5} riduce il tempo di convergenza del 30-50%.
L'unico problema in questo caso è ridurre il vettore di input a un intervallo di {-0.5,0.5}. Probabilmente dovrò normalizzarlo. Ho provato a farlo, ma per qualche motivo il risultato del sigmoide era sempre positivo. Mi piacerebbe sentire la vostra opinione su questo argomento.

4) Ora che dire del modo in cui sono impostati gli ingressi. Forse dovremmo automatizzare questo processo. Cosa ne pensate di questo approccio: all'uscita ci aspettiamo i valori 100, 010, 001, come al solito.
Per impostare automaticamente una serie di uscite, suggerisco di definire il rapporto tra il prezzo massimo e minimo dell'intervallo successivo per ogni barra (per esempio, 5000 barre su barre da un minuto). Il valore di questo rapporto sarà un'indicazione di dove si è spostato il prezzo. Se è intorno a 1, è piatto. Se è superiore a 1, allora è al rialzo. Se è tra 0 e 1, è giù. Ma penso che l'intervallo ottimale per l'analisi non sia [0, +Є], ma [-EЄ, -A; -A, A; A, +Є], che incidentalmente corrisponderebbe ai nostri vettori di uscita
. L'input della rete sarà gli ultimi K valori di N medie mobili (o la differenza tra MA e il prezzo medio della barra). Così, gli ingressi saranno N*K in totale.

Sto incollando un codice base un po' più leggero e chiaro (libreria delle vostre funzioni). In generale, in una fase così iniziale di sviluppo, probabilmente non è necessario creare un prodotto Expert Advisor completo. Per prima cosa implementiamo una chiara logica di calcolo nello script. Testiamo tutto e poi scriviamo un indicatore standard sulla sua base. E poi su questa base ci muoveremo ulteriormente - backlink e comitati di reti, e probabilmente un sacco di cose interessanti.

P.S.
Spero che continuerai a condividere i tuoi sviluppi, quindi ho una piccola richiesta. Se non ti dispiace, per favore rimuovi "Inserisci spazi" nelle opzioni dell'editor, è un po' difficile leggere il codice. In attesa della nuova versione. Sono possibili suggerimenti per test congiunti.

File:
 
sergeev писал (а) >>

2 YuraZ


2) Quando si invia l'output alla funzione sigmoide, si sottrae il parametro _threshold dalla somma, anche se, come scritto in letteratura, questo peso soglia non è -1, ma +1. Quindi si dovrebbe aggiungere, non sottrarre. Tanto più che quando si regolano i pesi si alimenta esattamente +1 e non -1.
In realtà ho pasticciato con questa soglia e l'impulso, e si scopre che aiuta davvero la velocità dei calcoli. Il tempo è ridotto di diverse volte.

3) Ero anche interessato alla funzione sigmoide. Da quanto ho capito, tali parametri sono dovuti alla tua esperienza pratica in questo campo, ma credo che tu abbia letto i libri di Usserman, dove scrive che l'intervallo {0,1} non è ottimale. Il valore della correzione del peso è proporzionale al livello di uscita, e il livello di uscita zero porta il peso a non cambiare. E poiché con i vettori di input binari la metà dei valori sarà in media zero, anche i pesi a cui sono associati non impareranno!
La soluzione è portare gli ingressi nell'intervallo {-0.5,0.5} e aggiungere un offset al sigmoide anch'esso di 0.5. Tale sigmoide [1/(1+Exp(-x))-0.5], con un intervallo {-0.5,0.5} riduce il tempo di convergenza del 30-50%.
L'unico problema in questo caso è ridurre il vettore di input a un intervallo di {-0.5,0.5}. Potrei doverlo normalizzare. Ho provato a farlo, ma per qualche motivo il risultato del sigmoide era sempre positivo. Mi piacerebbe sentire la sua opinione su questo argomento.

2. La formula originale assomiglia a questa -- S[j] = Sum(i)(y[i]*w[i,j] - t[j]). Cioè, la soglia viene tolta, ed è per questo che è stata chiamata soglia. E due meno nella formula del ricalcolo risultano in più, cioè non c'è errore nell'uso della soglia e nel ricalcolo dei parametri.

Se mi sbaglio, l'autore può correggermi.

3. Questo non è un sigmoide - è un semisigmoide. Il tempo di convergenza di queste funzioni dipende dai dati in ingresso alla rete. Può succedere che la bisigmoide converga molte volte più velocemente, ma con dati diversi si può ottenere un quadro completamente diverso.