Sembra standard in molti pacchetti di reti neurali accoppiare la funzione obiettivo da minimizzare con la funzione di attivazione nel livello di output.
Ad esempio, per uno strato di output lineare utilizzato per la regressione è standard (e spesso solo scelta) avere una funzione di obiettivo di errore al quadrato. Un altro consueto accoppiamento è l'output logistico e la perdita di log (o cross-entropia). E ancora un altro è softmax e perdita multi log.
Usando la notazione, per il valore di pre-attivazione (somma dei pesi per le attivazioni dal livello precedente), per l'attivazione, per la verità di base utilizzata per l'allenamento, i per l'indice del neurone in uscita.a y i
Attivazione lineare va con errore al quadrato
L'attivazione sigmoide si accompagna all'obiettivo logloss / cross-entropia
L'attivazione di Softmax va con l'obiettivo logloss multiclasse
Sono quelli che conosco e mi aspetto che ce ne siano molti di cui non ho ancora sentito parlare.
Sembra che la perdita di log funzionerebbe e sarebbe numericamente stabile quando l'output e gli obiettivi sono nel range [0,1]. Quindi potrebbe non avere senso provare un layer di output lineare con una funzione obiettivo logloss. A meno che non esista una funzione logloss più generale in grado di far fronte a valori di che sono al di fuori dell'intervallo?
Tuttavia, non sembra così male provare l'output sigmoid con un obiettivo di errore quadrato. Dovrebbe essere stabile e convergere almeno.
Capisco che parte del design dietro questi accoppiamenti è che rende la formula per - dove è il valore della funzione obiettivo - facile per la propagazione posteriore. Ma dovrebbe essere ancora possibile trovare quel derivato usando altri accoppiamenti. Inoltre, ci sono molte altre funzioni di attivazione che non sono comunemente viste nei livelli di output, ma che potrebbero essere fattibili, come , e dove non è chiaro quale funzione oggettiva possa essere applicata.tanh
Ci sono delle situazioni durante la progettazione dell'architettura di una rete neurale, che dovresti o dovresti usare accoppiamenti "non standard" di attivazione dell'output e funzioni oggettive?