GRUBlockCellGrad

classe final pública GRUBlockCellGrad

Calcula a retropropagação da célula GRU para um intervalo de tempo.

Args x: Entrada para a célula GRU. h_prev: entrada de estado da célula GRU anterior. w_ru: Matriz de peso para o portão de redefinição e atualização. w_c: Matriz de pesos para a porta de conexão da célula. b_ru: Vetor de polarização para a porta de reinicialização e atualização. b_c: Vetor de polarização para a porta de conexão da célula. r: Saída da porta de reset. u: Saída do portão de atualização. c: Saída da porta de conexão da célula. d_h: Gradientes do h_new em relação à função objetivo.

Retorna d_x: Gradientes de x em relação à função objetivo. d_h_prev: Gradientes do h em relação à função objetivo. d_c_bar Gradientes de c_bar em relação à função objetivo. d_r_bar_u_bar Gradientes de r_bar e u_bar em relação à função objetivo.

Esta operação do kernel implementa as seguintes equações matemáticas:

Nota sobre a notação das variáveis:

A concatenação de aeb é representada por a_b O produto escalar elemento a elemento de aeb é representado por ab O produto escalar elemento a elemento é representado por \circ A multiplicação de matrizes é representada por *

Notas adicionais para maior clareza:

`w_ru` pode ser segmentado em 4 matrizes diferentes.

w_ru = [w_r_x w_u_x
         w_r_h_prev w_u_h_prev]
 
Da mesma forma, `w_c` pode ser segmentado em 2 matrizes diferentes.
w_c = [w_c_x w_c_h_prevr]
 
O mesmo vale para preconceitos.
b_ru = [b_ru_x b_ru_h]
 b_c = [b_c_x b_c_h]
 
Outra observação sobre notação:
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ática por trás dos gradientes abaixo:
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
 
O cálculo abaixo é realizado no wrapper python para os gradientes (não no kernel do 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 estende número> GRUBlockCellGrad <T>
criar ( Escopo , 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 criar uma classe que envolve uma nova operação GRUBlockCellGrad.
Saída <T>
dCBar ()
Saída <T>
dHPrev ()
Saída <T>
Saída <T>
dX ()

Métodos herdados

Métodos Públicos

public static GRUBlockCellGrad <T> create ( Escopo escopo , 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 criar uma classe que envolve uma nova operação GRUBlockCellGrad.

Parâmetros
escopo escopo atual
Devoluções
  • uma nova instância do GRUBlockCellGrad

Saída pública <T> dCBar ()

Saída pública <T> dHPrev ()

Saída pública <T> dRBarUBar ()

Saída pública <T> dX ()