Per risolvere questo problema in modo più generale, primo sguardo a quali sono le variabili e quali sono i parametri fissi.
In sostanza si è data l'ingresso pesi vettore w= [1.5, -1, 1, 2]
e la funzione di trasferimentog(x) = (sign(x)+1)/2
, e si desidera trovare il ingresso vettore in in modo che: g(
w*
in') = +1
(come prodotto di un vettore riga e colonna), quindi:
g(sum_over_i(w_i*in_i)) = 1 # product of vectors
g(w0*in0 + w1*in1 + w2*in2 + w3*in3) = 1 # roll out the sum
g(-1.5 - in1 + in2 + 2*in3) = 1 # replace the values of w and in
0.5*(sign(-1.5 - in1 + in2 + 2*in3)+1) = 1 # definition of g(x)
sign(-1.5 - in1 + in2 + 2*in3) = 1 # simplify
-1.5 - in1 + in2 + 2*in3 >= 0 # by def: [sign(x)=1 iff x>=0]
Normalmente si risolverebbe questa equazione per derivati di calcolo, ma poiché gli ingressi in possono prendere solo i valori 0
o 1
, possiamo semplicemente enumerare tutti i casi (ci sono 2^n
o 8
casi):
in1 in2 in3 -1.5-in1+in2+2*in3
-----------------------------------
0 0 0 -1.5
0 0 1 0.5 *
0 1 0 -0.5
0 1 1 1.5 *
1 0 0 -2.5
1 0 1 -0.5
1 1 0 -1.5
1 1 1 0.5 *
Quindi otteniamo i valori di in per i quali l'espressione sopra è positiva.
grazie gnovice, mi chiedo se è possibile rispondere alla mia altra domanda? se applico l'algoritmo pseudocodice http://en.wikipedia.org/wiki/Artificial_neuron al mio esempio, il risultato sarà lo stesso della tua risposta? –
@mary: Sì, lo pseudocodice mostra come si calcola il valore dell'output (con un valore di soglia pari a 0). In sostanza utilizza la formula che ho dato sopra: se la formula è vera (cioè la somma degli input ponderati sul lato sinistro è maggiore della soglia), allora c'è un output diverso dal neurone. L'unico problema che dovresti tenere presente è se deve essere usato un ">" o "> =" (ad esempio se una somma 0 per gli input ponderati produce un risultato 0 o 1). – gnovice
Grazie per il tuo ulteriore chiarimento, gnovice. Non ne ero sicuro. Mille grazie per la tua risposta! –