EihiS

December 16, 2016

Neural nets, bases en C, part 7 , backward_CASCADE()

Filed under: linux, neuron — Tags: , , , — admin @ 10:40 am

Avant de modifier la fonction backWARD_CASCADE() pour l’adapter progressivement à l’utilisation dans un reseau a plusieurs couches,une explication sur un de ses éléments.

Rappel de la fonction :

void RESO_backWARD_CASCADE(reso* n,float reverse_error)
{
	uint32_t k;
	float xb;
	//
	xb=tanh(1.0-(n->neuron*n->neuron));
	xb*=reverse_error;
	n->error=xb;	//
	for(k=0;k<n->synapses;k++)
	{
		n->part[k]=(fabs(n->w[k])/n->wtot);//
		n->ward[k]=n->error*n->w[k];//
		n->back[k]=n->error*n->in[k];//
	}
	n->epoch++;
}

Il convient d’expliquer ce qu’est le xb=tanh(1.0-(n->neuron*n->neuron)) :
Dans le post sur le même sujet, part 5 , en annexe, j’ai posté un graphe de la fonction.
Son but est de moduler le learning rate selon la valeur du neuron : si celle ci est très grande, on le réduit, et on tend vers un coef. de 1.0 pour le LR  lorsque ‘neuron’ tend vers zéro (limite).
Cette fonction optimise la vitesse d’apprentissage, et,  les pivots autour de valeurs 0.0 des neurones.
On peut se passer du tanh() et conserver 1.0-(neuron*neuron) , si la totalité du reseau exploite des neurones dont les valeurs min/max ne dépassent pas 1.0 : dans ce cas, un valeur absolue de neuron de 1.0 engage un xb=0, qui annule à 100% la modfication future du poids du neurone, puisque ‘reverse_error’ est mutltiplié par xb pour générer ‘error’

Pour l’heure, on ne l’applique qu’aux neurones des couches autres que la dernière (outputs).
On verra ensuite que cette fonction peut servir à beaucoup de choses utiles.

No Comments

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

314159265358979323846264338327950288
419716939937510582097494459230781640
628620899862803482534211706798214808

cat{ } { post_1053 } { } 2009-2015 EIhIS Powered by WordPress