10

Ero interessato alle reti neurali per un po 'e pensavo di usarne uno in python per un progetto leggero che confronta varie tecniche di minimizzazione in un dominio del tempo (che è il più veloce).È possibile utilizzare una rete neurale per trovare le funzioni minime (a)?

Poi ho capito che non sapevo nemmeno se un NN è buono per la minimizzazione. Cosa ne pensi?

+0

Stavo osservando i confronti della scansione della matrice brute force, della ricottura simulata e della minimizzazione Migrad costruita separatamente da Minuit in root. – physicsmichael

risposta

0

Le reti neurali sono classificatori. Separano due classi di elementi di dati. Imparano questa separazione (di solito) da elementi di dati preclassificati. Quindi, dico: No, a meno che tu non faccia un grosso stiramento oltre la rottura.

+7

Le reti neurali sono interpolatori di esempio, che è possibile utilizzare per la classificazione, tra le altre cose. L'utilizzo di una rete neurale per approssimare una funzione e quindi trovare i minimi dell'approssimazione sarebbe una cosa ragionevole da fare in alcuni casi. –

1

Il processo di addestramento di una rete neurale di back-propagation funziona riducendo al minimo l'errore dal risultato ottimale. Ma avere una rete neurale addestrata che trovi il minimo di una funzione sconosciuta sarebbe piuttosto difficile.

Se si limita il problema a una classe di funzione specifica, potrebbe funzionare ed essere anche abbastanza veloce. Le reti neurali sono brave a trovare modelli, se ce ne sono.

0

Sono piuttosto male per lo scopo; uno dei grandi problemi delle reti neurali è che rimangono bloccati nei minimi locali. Potresti invece voler controllare le macchine vettoriali di supporto.

+0

Dove posso trovare ulteriori informazioni sulle macchine vettoriali state? –

+0

Scusa, quello era un errore di battitura. Supportare le macchine vettoriali è ciò che stavo cercando di dire. Non ho riferimenti migliori di quanto wikipedia ti indicasse. – chaos

5

Mi sembra che questo sia un problema più adatto a genetic algorithms rispetto alle reti neurali. Le reti neurali tendono a richiedere un problema limitato da risolvere, richiedendo addestramento contro dati noti, ecc. - mentre gli algoritmi genetici funzionano trovando soluzioni approssimate migliori e migliori a un problema senza richiedere formazione.

+0

Se i dati (di addestramento) hanno una forma caratteristica, potrebbero rivelarsi un buon metodo, ma questo è un presupposto ... – Alex

+2

Non sono sicuro di seguirti. –

+0

PSO (Particle Swarm Optimization) e ACO (Ant Colony Optimization) sono anche opzioni per GA. – Levon

0

In realtà è possibile utilizzare NN per trovare una funzione minima, ma funzionerebbe al meglio combinata con gli algoritmi genetici citati da Erik.

Fondamentalmente NN tentare di trovare soluzioni che corrispondono a una funzione locale minima o massima ma in tal modo sono piuttosto precise (per commentare la risposta Tetha affermando che NN sono classificatori che è possibile utilizzare se si dice che l'immissione dei dati è minima o non)

Al contrario gli algoritmi genetici tendono a trovare una soluzione più universale dall'intero intervallo di input possibile, ma poi forniscono i risultati immediati.

La soluzione è quella di combinare i 2 mondi

  1. ottenere il risultato approssimativa da algoritmi genetici
  2. Usa che risultano per trovare la risposta più precisa con NN
3

Back-propagazione funziona minimizzando l'errore. Tuttavia, puoi davvero ridurre a icona ciò che vuoi. Quindi, è possibile utilizzare le regole di aggiornamento di tipo back-prop per trovare gli ingressi della rete neurale artificiale che riducono al minimo l'output.

Questa è una grande domanda, mi dispiace per la risposta breve. Devo anche aggiungere che, il mio approccio suggerito sembra piuttosto inefficiente rispetto ai metodi più consolidati e troverebbe solo minimi locali.

0

È possibile impostare un NN per approssimare una funzione. Se una funzione è differenziabile o il tuo NN ha più di un livello nascosto, puoi insegnarlo a dare un derivato di una funzione.

Esempio:

You can train a 1 input 1 output NN to give output=sin(input) 

You can train it also give output=cos(input) which is derivative of sin() 

You get a minima/maxima of sin when you equate cos to zero. 

Scan for zero output while giving many values from input. 0=cos() -> minima of sin 

Giunti uscita zero, si sa che il valore di ingresso è i minimi della funzione.

L'allenamento richiede meno tempo, lo sweeping per lo zero richiede molto tempo.

0

Sebbene questo sia un po 'troppo tardi per l'autore di questa domanda. Forse qualcuno vuole testare alcuni algoritmi di ottimizzazione, quando legge questo ...

Se si sta lavorando con regressioni in machine learning (NN, SVM, regressione lineare multipla, K Nearest Neighbor) e si desidera minimizzare (ingrandire) la tua funzione di regressione, in realtà ciò è possibile, ma l'efficienza di tali algoritmi dipende dalla scorrevolezza (dimensioni del passo ... ecc.) della regione in cui stai cercando.

Al fine di costruire tale "Machine Learning" Regressioni "è possibile utilizzare scikit- learn. Devi allenare e convalidare il tuo MLR Support Vector Regression. (metodo "fit")

SVR.fit(Sm_Data_X,Sm_Data_y) 

poi si deve definire una funzione che restituisce una stima della regressione per un array "x".

def fun(x): 
    return SVR.predict(x) 

È possibile utilizzare scipiy.optimize.minimize per l'ottimizzazione. Vedi gli esempi che seguono i doc-link.