GRUBlockCellGrad

publiczna klasa końcowa GRUBlockCellGrad

Oblicza propagację wsteczną komórki GRU dla 1 kroku czasowego.

Args x: Dane wejściowe do komórki GRU. h_prev: Dane wejściowe stanu z poprzedniej komórki GRU. w_ru: Macierz wag dla bramki resetowania i aktualizacji. w_c: Macierz wag dla bramki połączenia komórkowego. b_ru: Wektor odchylenia dla bramki resetowania i aktualizacji. b_c: wektor odchylenia dla bramki połączenia komórkowego. r: Wyjście bramki resetującej. u: Dane wyjściowe bramki aktualizacji. c: Wyjście bramki połączenia komórkowego. d_h: Gradienty funkcji celu h_new wrt.

Zwraca d_x: Gradienty x wrt do funkcji celu. d_h_prev: Gradienty funkcji celu. d_c_bar Gradienty funkcji c_bar wrt do celu. d_r_bar_u_bar Gradienty r_bar i u_bar wrt do funkcji celu.

Ta operacja jądra implementuje następujące równania matematyczne:

Uwaga dotycząca notacji zmiennych:

Połączenie aib jest reprezentowane przez a_b Iloczyn skalarny elementarny aib jest reprezentowany przez ab Iloczyn skalarny elementarny jest reprezentowany przez \circ Mnożenie macierzy jest reprezentowane przez *

Dodatkowe uwagi dla przejrzystości:

`w_ru` można podzielić na 4 różne macierze.

w_ru = [w_r_x w_u_x
         w_r_h_prev w_u_h_prev]
 
Podobnie `w_c` można podzielić na 2 różne macierze.
w_c = [w_c_x w_c_h_prevr]
 
To samo tyczy się uprzedzeń.
b_ru = [b_ru_x b_ru_h]
 b_c = [b_c_x b_c_h]
 
Kolejna uwaga dotycząca notacji:
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
 
Matematyka kryjąca się za gradientami poniżej:
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
 
Poniższe obliczenia są wykonywane w opakowaniu Pythona dla gradientów (nie w jądrze gradientu).
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
 

Metody publiczne

statyczny <T numer rozszerzenia> GRUBlockCellGrad <T>
utwórz ( Zakres zasięgu, Operand <T> x, Argument <T> hPrev, Argument <T> wRu, Argument <T> wC, Argument <T> bRu, Argument <T> bC, Argument <T> r, Argument <T > u, Argument <T> c, Argument <T> dH)
Metoda fabryczna służąca do tworzenia klasy opakowującej nową operację GRUBlockCellGrad.
Wyjście <T>
dCBar ()
Wyjście <T>
Wyjście <T>
Wyjście <T>
dX ()

Metody dziedziczone

Metody publiczne

public static GRUBlockCellGrad <T> create ( Zakres zasięgu , Operand <T> x, Operand <T> hPrev, Operand <T> wRu, Operand <T> wC, Operand <T> bRu, Operand <T> bC, Operand <T > r, Argument <T> u, Argument <T> c, Argument <T> dH)

Metoda fabryczna służąca do tworzenia klasy opakowującej nową operację GRUBlockCellGrad.

Parametry
zakres aktualny zakres
Powroty
  • nowa instancja GRUBlockCellGrad

publiczne wyjście <T> dCBar ()

publiczne wyjście <T> dHPrev ()

publiczne wyjście <T> dRBarUBar ()

publiczne wyjście <T> dX ()