GRUBlockCellGrad

classe finale publique GRUBlockCellGrad

Calcule la rétro-propagation des cellules GRU pour 1 pas de temps.

Args x : entrée dans la cellule GRU. h_prev : entrée d'état de la cellule GRU précédente. w_ru : Matrice de poids pour la porte de réinitialisation et de mise à jour. w_c : Matrice de poids pour la porte de connexion des cellules. b_ru : vecteur de biais pour la porte de réinitialisation et de mise à jour. b_c : vecteur de polarisation pour la porte de connexion cellulaire. r : Sortie de la porte de réinitialisation. u : Sortie de la porte de mise à jour. c : Sortie de la porte de connexion de cellule. d_h : Dégradés du h_new par rapport à la fonction objectif.

Renvoie d_x : dégradés du x par rapport à la fonction objectif. d_h_prev : Dégradés de l'h par rapport à la fonction objectif. d_c_bar Dégradés du c_bar par rapport à la fonction objectif. d_r_bar_u_bar Dégradés du r_bar et u_bar par rapport à la fonction objectif.

Cette opération du noyau implémente les équations mathématiques suivantes :

Remarque sur la notation des variables :

La concaténation de a et b est représentée par a_b Le produit scalaire élément par élément de a et b est représenté par ab Le produit scalaire élément par élément est représenté par \circ La multiplication matricielle est représentée par *

Notes supplémentaires pour plus de clarté :

`w_ru` peut être segmenté en 4 matrices différentes.

w_ru = [w_r_x w_u_x
         w_r_h_prev w_u_h_prev]
 
De même, `w_c` peut être segmenté en 2 matrices différentes.
w_c = [w_c_x w_c_h_prevr]
 
Il en va de même pour les biais.
b_ru = [b_ru_x b_ru_h]
 b_c = [b_c_x b_c_h]
 
Une autre note sur la notation :
d_x = d_x_component_1 + d_x_component_2
 
 where d_x_component_1 = d_r_bar * w_r_x^T + d_u_bar * w_r_x^T
 and d_x_component_2 = d_c_bar * w_c_x^T
 
 d_h_prev = d_h_prev_component_1 + d_h_prevr \circ r + d_h \circ u
 where d_h_prev_componenet_1 = d_r_bar * w_r_h_prev^T + d_u_bar * w_r_h_prev^T
 
Mathématiques derrière les dégradés ci-dessous :
d_c_bar = d_h \circ (1-u) \circ (1-c \circ c)
 d_u_bar = d_h \circ (h-c) \circ u \circ (1-u)
 
 d_r_bar_u_bar = [d_r_bar d_u_bar]
 
 [d_x_component_1 d_h_prev_component_1] = d_r_bar_u_bar * w_ru^T
 
 [d_x_component_2 d_h_prevr] = d_c_bar * w_c^T
 
 d_x = d_x_component_1 + d_x_component_2
 
 d_h_prev = d_h_prev_component_1 + d_h_prevr \circ r + u
 
Le calcul ci-dessous est effectué dans le wrapper python pour les dégradés (pas dans le noyau de dégradé.)
d_w_ru = x_h_prevr^T * d_c_bar
 
 d_w_c = x_h_prev^T * d_r_bar_u_bar
 
 d_b_ru = sum of d_r_bar_u_bar along axis = 0
 
 d_b_c = sum of d_c_bar along axis = 0
 

Méthodes publiques

statique <T étend le nombre> GRUBlockCellGrad <T>
créer ( Scope scope , Opérande <T> x, Opérande <T> hPrev, Opérande <T> wRu, Opérande <T> wC, Opérande <T> bRu, Opérande <T> bC, Opérande <T> r, Opérande <T > u, Opérande <T> c, Opérande <T> dH)
Méthode d'usine pour créer une classe encapsulant une nouvelle opération GRUBlockCellGrad.
Sortie <T>
dCBar ()
Sortie <T>
Sortie <T>
Sortie <T>
dX ()

Méthodes héritées

Méthodes publiques

public static GRUBlockCellGrad <T> create ( Scope scope, Operand <T> x, Operand <T> hPrev, Operand <T> wRu, Operand <T> wC, Operand <T> bRu, Operand <T> bC, Operand <T > r, Opérande <T> u, Opérande <T> c, Opérande <T> dH)

Méthode d'usine pour créer une classe encapsulant une nouvelle opération GRUBlockCellGrad.

Paramètres
portée portée actuelle
Retour
  • une nouvelle instance de GRUBlockCellGrad

sortie publique <T> dCBar ()

sortie publique <T> dHPrev ()

Sortie publique <T> dRBarUBar ()

sortie publique <T> dX ()