Questa risposta è sul lato generale delle funzioni di costo, non correlata a TensorFlow, e affronterà principalmente la parte "alcune spiegazioni su questo argomento" della domanda.
Nella maggior parte degli esempi / tutorial che ho seguito, la funzione di costo utilizzata era in qualche modo arbitraria. Il punto era più di introdurre il lettore a un metodo specifico, non specificamente alla funzione di costo. Non dovresti impedirti di seguire il tutorial per avere familiarità con gli strumenti, ma la mia risposta dovrebbe aiutarti su come scegliere la funzione di costo per i tuoi problemi.
Se vuoi risposte su Cross-Entropy, Logit, norme L2 o qualcosa di specifico, ti consiglio di inviare più domande più specifiche. Ciò aumenterà la probabilità che qualcuno con conoscenze specifiche possa vedere la tua domanda.
Scegliere la giusta funzione di costo per ottenere il risultato desiderato è un punto critico dei problemi di apprendimento automatico. L'approccio di base, se non sai esattamente cosa vuoi dal tuo metodo, è quello di utilizzare Mean Square Error (Wikipedia) per problemi di regressione e Percentuale di errore per problemi di classificazione. Tuttavia, se si desidera ottenere buoni risultati dal proprio metodo, è necessario definire buoni e quindi definire la funzione di costo adeguata. Ciò deriva sia dalla conoscenza del dominio (quali sono i tuoi dati, cosa stai cercando di ottenere), sia dalla conoscenza degli strumenti a tua disposizione.
Non credo di poterti guidare attraverso le funzioni di costo già implementate in TensorFlow, poiché ho una conoscenza molto ridotta dello strumento, ma posso darti un esempio su come scrivere e valutare diverse funzioni di costo.
Per illustrare le varie differenze tra le funzioni di costo, usiamo l'esempio del problema di classificazione binaria, dove vogliamo, per ogni campione , la classe .xnf(xn)∈{0,1}
A partire da proprietà computazionali ; come due funzioni che misurano la "stessa cosa" potrebbero portare a risultati diversi. Prendi la seguente semplice funzione di costo; la percentuale di errore. Se hai campioni, è la classe prevista e la classe vera, vuoi minimizzareNf(yn)yn
- 1N∑n{10 if f(xn)≠yn otherwise=∑nyn[1−f(xn)]+[1−yn]f(xn) .
Questa funzione di costo ha il vantaggio di essere facilmente interpretabile. Tuttavia, non è liscio; se si hanno solo due campioni, la funzione "salta" da 0, a 0,5, a 1. Ciò comporterà incongruenze se si tenta di utilizzare la discesa gradiente su questa funzione. Un modo per evitarlo è cambiare la funzione di costo per utilizzare le probabilità di assegnazione; . La funzione diventap(yn=1|xn)
- 1N∑nynp(yn=0|xn)+(1−yn)p(yn=1|xn) .
Questa funzione è più fluida e funzionerà meglio con un approccio con discesa gradiente. Otterrai un modello "più fine". Tuttavia, ha altri problemi; se si dispone di un campione ambiguo, si supponga di non disporre di informazioni sufficienti per dire qualcosa di meglio di . Quindi, l'utilizzo della discesa gradiente su questa funzione di costo porterà a un modello che aumenta il più possibile questa probabilità e quindi, forse, si adatta.p(yn=1|xn)=0.5
Un altro problema di questa funzione è che se mentre , si è certi di avere ragione, ma si sbaglia. Per evitare questo problema, puoi prendere il registro della probabilità, . Come e , la seguente funzione non presenta il problema descritto nel paragrafo precedente:p(yn=1|xn)=1yn=0logp(yn|xn)log(0)=∞log(1)=0
- 1N∑nynlogp(yn=0|xn)+(1−yn)logp(yn=1|xn) .
Ciò dovrebbe dimostrare che, al fine di ottimizzare la stessa cosa , la percentuale di errore, definizioni diverse potrebbero produrre risultati diversi se sono più facili da capire, a livello computazionale.
E 'possibile per funzioni di costo e per misurare la stesso concetto , ma potrebbe portare il tuo metodo per risultati migliori rispetto a .ABAB
Ora vediamo come la diversa funzione dei costi può misurare concetti diversi. Nel contesto del recupero delle informazioni, come nella ricerca di Google (se ignoriamo la classifica), vogliamo che i risultati restituiti vengano
- avere un'elevata precisione , non restituire informazioni irrilevanti
- avere un elevato richiamo , restituire il maggior numero possibile di risultati pertinenti
- Precisione e richiamo (Wikipedia)
Nota che se il tuo algoritmo restituisce tutto , restituirà ogni possibile risultato rilevante e quindi avrà un alto richiamo, ma avrà una precisione molto scarsa. D'altra parte, se restituisce solo un elemento, quello che è il più certo è rilevante, avrà un'alta precisione ma un basso richiamo.
Per giudicare tali algoritmi, la funzione di costo comune è il punteggio (Wikipedia) . Il caso comune è il punteggio , che dà uguale peso alla precisione e al richiamo, ma il caso generale è il punteggio , e puoi modificare per ottenereFF1Fββ
- Richiamo superiore, se si utilizzaβ>1
- Maggiore precisione, se si utilizza .β<1
In tale scenario, scegliere la funzione di costo è scegliere quale compromesso dovrebbe fare l'algoritmo .
Un altro esempio che viene spesso sollevato è il caso della diagnosi medica, puoi scegliere una funzione di costo che punisce più falsi negativi o falsi positivi a seconda di ciò che è preferibile:
- Le persone più sane vengono classificate come malate (Ma poi, potremmo trattare le persone sane, il che è costoso e potrebbe ferirle se in realtà non sono malati)
- Più persone malate vengono classificate come sane (ma potrebbero morire senza cure)
In conclusione, la definizione della funzione di costo sta definendo l'obiettivo del tuo algoritmo. L'algoritmo definisce come arrivarci.
Nota a margine: alcune funzioni di costo hanno modi algoritmici utili per raggiungere i propri obiettivi. Ad esempio, esiste un buon modo per minimizzare la perdita di cerniere (Wikipedia) , risolvendo il doppio problema in SVM (Wikipedia)