Lo scopo della funzione di attivazione è di introdurre la non linearità nella rete
a sua volta, ciò consente di modellare una variabile di risposta (nota anche come variabile target, etichetta di classe o punteggio) che varia in modo non lineare con le sue variabili esplicative
non lineare significa che l'output non può essere riprodotto da una combinazione lineare degli input (che non è la stessa dell'output che si trasforma in una linea retta - la parola per questo è affine ).
un altro modo di pensarlo: senza una funzione di attivazione non lineare nella rete, un NN, indipendentemente da quanti strati avesse, si comporterebbe proprio come un percettrone a strato singolo, perché sommare questi livelli ti darebbe solo un'altra funzione lineare (vedi definizione appena sopra).
>>> in_vec = NP.random.rand(10)
>>> in_vec
array([ 0.94, 0.61, 0.65, 0. , 0.77, 0.99, 0.35, 0.81, 0.46, 0.59])
>>> # common activation function, hyperbolic tangent
>>> out_vec = NP.tanh(in_vec)
>>> out_vec
array([ 0.74, 0.54, 0.57, 0. , 0.65, 0.76, 0.34, 0.67, 0.43, 0.53])
Una funzione di attivazione comune utilizzata nel backprop ( tangente iperbolica ) valutata da -2 a 2: