2012-10-07 7 views
5

Sto cercando di utilizzare una rete neurale per risolvere un problema. Ho imparato a conoscerli dal corso di Machine Learning offerto su Coursera e sono stato felice di scoprire che FANN è un'implementazione Ruby di reti neurali, quindi non ho dovuto reinventare l'aeroplano.Problemi nella comprensione delle reti neurali

Tuttavia, non capisco davvero perché FANN mi stia dando un'uscita così strana. Sulla base di ciò che ho imparato dalla lezione,

Ho una serie di dati di allenamento che sono i risultati delle partite. Al giocatore viene assegnato un numero, al suo avversario viene assegnato un numero e il risultato è 1 per una vittoria e 0 per una perdita. I dati sono un po 'rumorosi a causa di disturbi, ma non così terribilmente. Il mio obiettivo è scoprire quali gap di valutazione sono più inclini a turbolenze - ad esempio, la mia intuizione mi dice che le partite con rating inferiore tendono a comportare più turbamenti perché le valutazioni sono meno accurate.

Quindi ho ottenuto un set di formazione di circa 100 esempi. Ogni esempio è (valutazione, delta) => 1/0. Quindi è un problema di classificazione, ma non proprio quello che penso si presta a un grafico di tipo regressivo logistico, e una rete neurale sembrava più corretta.

Il mio codice inizia

training_data = RubyFann::TrainData.new(:inputs => inputs, :desired_outputs => outputs) 

Ho quindi impostare la rete neurale con

network = RubyFann::Standard.new(
    :num_inputs=>2, 
    :hidden_neurons=>[8, 8, 8, 8], 
    :num_outputs=>1) 

Nella classe, ho imparato che un tempo ragionevolmente predefinito è quello di avere ogni strato nascosto con lo stesso numero di unità. Dal momento che non so davvero come funziona questo o quello che sto facendo, sono andato con il default.

network.train_on_data(training_data, 1000, 1, 0.15) 

E poi finalmente, ho attraversato una serie di valutazioni di ingresso del campione in incrementi e, ad ogni incremento, l'aumento delta fino a quando il risultato passa da essere> 0,5-< 0.5, che ho preso per essere circa 0 e circa 1, anche se in realtà erano più come 0.45 e 0.55.

Quando l'ho eseguito una volta, mi ha dato 0 per ogni input. L'ho eseguito di nuovo due volte con gli stessi dati e ho avuto un andamento decrescente di numeri negativi e un trend crescente di numeri positivi, previsioni completamente opposte.

ho pensato che forse non era compresa caratteristiche abbastanza, così ho aggiunto (rating**2 e delta**2). Sfortunatamente, ho iniziato a ricevere il mio delta iniziale o il mio delta massimo per ogni input ogni volta.

Non capisco davvero perché sto ottenendo risultati così divergenti o quello che Ruby-FANN mi sta dicendo, in parte perché non capisco la libreria ma anche, sospetto, perché ho appena iniziato a conoscere le reti neurali e mi manca qualcosa di grosso e ovvio. Non ho abbastanza dati di allenamento, ho bisogno di includere più funzionalità, qual è il problema e come posso risolverlo o imparare come fare le cose meglio?

+0

Non so molto su ML, ma i campioni distorti causano risultati distorti, se la maggior parte dei dati campione è per vincere, è probabile che pronostici/si traduca in una vittoria quando usi il tuo modello . – iouri

+0

È più vittorie che perdite, ma perché i risultati sono così diversi nelle diverse esecuzioni? –

risposta

1

Che ne dici di giocare un po 'con i parametri? All'inizio raccomanderei vivamente solo due strati ... dovrei essere a prova matematica da qualche parte che è sufficiente per molti problemi. Se hai troppi neuroni il tuo NN non avrà abbastanza epoche per imparare davvero qualcosa .. quindi puoi anche giocare con un numero di epoche e gama..Penso che nel tuo caso sia 0.15 ..se usi un po 'più grande Valorizza il tuo NN dovrebbe imparare un po 'più veloce (non aver paura di provare 0,3 o anche 0,7), il giusto valore di Gama di solito dipende dagli intervalli del peso o dalla normalizzazione degli input.

Il tuo NN mostra risultati così diversi molto probabilmente perché in ogni corsa c'è una nuova inizializzazione e poi c'è una rete completamente diversa e imparerà in modo diverso come la precedente (pesi diversi avranno valori più alti così diverse parti di NN imparerà le stesse cose).

Non ho familiarità con questa libreria. Sto solo scrivendo alcune esperienze con NN. Spero che qualcosa di questo possa aiutare ..