GRUBlockCellGrad

clase final pública GRUBlockCellGrad

Calcula la retropropagación de la celda GRU durante 1 paso de tiempo.

Args x: Entrada a la celda GRU. h_prev: entrada de estado de la celda GRU anterior. w_ru: Matriz de pesos para la puerta de reinicio y actualización. w_c: Matriz de pesos de la compuerta de conexión de la celda. b_ru: Vector de polarización para la puerta de reinicio y actualización. b_c: Vector de polarización de la puerta de conexión de la celda. r: Salida de la puerta de reinicio. u: Salida de la puerta de actualización. c: Salida de la puerta de conexión de la celda. d_h: gradientes de h_new wrt a la función objetivo.

Devuelve d_x: gradientes de x wrt a la función objetivo. d_h_prev: gradientes de h wrt a la función objetivo. d_c_bar Degradados de c_bar wrt a la función objetivo. d_r_bar_u_bar Degradados de r_bar y u_bar wrt a la función objetivo.

Esta operación de kernel implementa las siguientes ecuaciones matemáticas:

Nota sobre la notación de las variables:

La concatenación de a y b está representada por a_b El producto escalar por elementos de a y b está representado por ab El producto escalar por elementos está representado por \circ La multiplicación de matrices está representada por *

Notas adicionales para mayor claridad:

`w_ru` se puede segmentar en 4 matrices diferentes.

w_ru = [w_r_x w_u_x
         w_r_h_prev w_u_h_prev]
 
De manera similar, `w_c` se puede segmentar en 2 matrices diferentes.
w_c = [w_c_x w_c_h_prevr]
 
Lo mismo ocurre con los sesgos.
b_ru = [b_ru_x b_ru_h]
 b_c = [b_c_x b_c_h]
 
Otra nota sobre la notación:
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
 
Matemáticas detrás de los gradientes a continuación:
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
 
Los siguientes cálculos se realizan en el contenedor de Python para los gradientes (no en el núcleo del gradiente).
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étodos públicos

estático <T extiende Número> GRUBlockCellGrad <T>
crear ( Alcance alcance, Operando <T> x, Operando <T> hPrev, Operando <T> wRu, Operando <T> wC, Operando <T> bRu, Operando <T> bC, Operando <T> r, Operando <T > u, Operando <T> c, Operando <T> dH)
Método de fábrica para crear una clase que envuelve una nueva operación GRUBlockCellGrad.
Salida <T>
dCBar ()
Salida <T>
dHPrev ()
Salida <T>
Salida <T>
dx ()

Métodos heredados

Métodos públicos

público estático GRUBlockCellGrad <T> crear ( Alcance alcance, Operando <T> x, Operando <T> hPrev, Operando <T> wRu, Operando <T> wC, Operando <T> bRu, Operando <T> bC, Operando <T > r, Operando <T> u, Operando <T> c, Operando <T> dH)

Método de fábrica para crear una clase que envuelve una nueva operación GRUBlockCellGrad.

Parámetros
alcance alcance actual
Devoluciones
  • una nueva instancia de GRUBlockCellGrad

Salida pública <T> dCBar ()

Salida pública <T> dHPrev ()

Salida pública <T> dRBarUBar ()

Salida pública <T> dX ()