Domanda

Mi ero interessato per un po 'alle reti neurali e avevo pensato di usarne uno in Python per un progetto leggero che confronta varie tecniche di minimizzazione in un dominio del tempo (che è il più veloce).

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

È stato utile?

Soluzione

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

Altri suggerimenti

Mi sembra che questo sia un problema più adatto a algoritmi genetici rispetto alle reti neurali. Le reti neurali tendono a necessitare di un problema limitato da risolvere, che richiede addestramento contro dati noti, ecc., Mentre gli algoritmi genetici funzionano trovando soluzioni approssimative sempre migliori a un problema senza richiedere addestramento.

La propagazione all'indietro funziona minimizzando l'errore. Tuttavia, puoi davvero minimizzare quello che vuoi. Pertanto, è possibile utilizzare regole di aggiornamento di tipo back-prop per trovare gli input della rete neurale artificiale che riducono al minimo l'output.

Questa è una grande domanda, scusate la risposta breve. Dovrei anche aggiungere che il mio approccio suggerito sembra piuttosto inefficiente rispetto ai metodi più consolidati e troverebbe solo un minimo locale.

Il processo di addestramento di una rete neurale a propagazione inversa minimizza l'errore dal risultato ottimale. Ma avere una rete neurale addestrata che trova il minimo di una funzione sconosciuta sarebbe piuttosto difficile.

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

Sono abbastanza cattivi per lo scopo; uno dei maggiori problemi delle reti neurali è che rimangono bloccati nei minimi locali. Potresti invece voler esaminare le macchine vettoriali di supporto.

In realtà potresti usare l'NN per trovare un minimo di funzione, ma funzionerebbe meglio combinato con algoritmi genetici menzionati da Erik .

Fondamentalmente tenda NN per trovare soluzioni che corrispondono a una funzione locale minima o massima, ma nel farlo sono abbastanza precise (commentare Tetha risposta affermando che NN sono classificatori che è possibile utilizzare se per dirlo, l'input dei dati è minimo o meno)

Al contrario, gli algoritmi genetici tendono a trovare una soluzione più universale da tutta la gamma degli input possibili, ma poi ti danno i risultati immediati.

La soluzione è combinare i 2 mondi

  1. Ottieni il risultato approssimativo dagli algoritmi genetici
  2. Usa quel risultato per trovare la risposta più precisa usando NN

Puoi insegnare a un NN ad approssimare una funzione. Se una funzione è differenziabile o il tuo NN ha più di un livello nascosto, puoi insegnargli a dare una derivata 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

Quando raggiungi lo zero, sai che il valore di input è il minimo della funzione.

L'allenamento richiede meno, spazzare per zero richiede molto tempo.

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

Se stai lavorando con regressioni nell'apprendimento automatico (NN, SVM, Regressione lineare multipla, K Neighbor più vicino) e vuoi minimizzare (massimizzare) la tua funzione di regressione, in realtà questo è possibile ma l'efficienza di tali algoritmi dipende da morbidezza, (dimensioni del gradino ... ecc.) della regione in cui si sta effettuando la ricerca.

Al fine di costruire tali "regressioni di apprendimento automatico" potresti usare scikit- learn . Devi addestrare e convalidare il tuo MLR Regressione dei vettori di supporto . (metodo " fit ")

SVR.fit(Sm_Data_X,Sm_Data_y)

Quindi devi definire una funzione che restituisca una previsione della tua regressione per un array " x " ;.

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

Puoi utilizzare scipiy.optimize.minimize per ottimizzazione. Vedi gli esempi che seguono i collegamenti doc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top