tf.raw_ops.GRUBlockCellGrad
Вычисляет обратное распространение по ячейке GRU за 1 шаг.
tf.raw_ops.GRUBlockCellGrad(
x, h_prev, w_ru, w_c, b_ru, b_c, r, u, c, d_h, name=None
)
Аргументы x: Вход в ячейку GRU. h_prev: Входное состояние из предыдущей ячейки GRU. w_ru: Матрица весов для ворот сброса и обновления. w_c: Матрица весов для ворот связи ячейки. b_ru: Вектор смещения для ворот сброса и обновления. b_c: Вектор смещения для ворот связи ячейки. r: Выход ворот сброса. u: Выход ворот обновления. c: Выход ворот связи ячейки. d_h: Градиенты h_new по отношению к целевой функции.
Возвращаемые значения d_x: Градиенты x по отношению к целевой функции. d_h_prev: Градиенты h по отношению к целевой функции. d_c_bar Градиенты c_bar по отношению к целевой функции. d_r_bar_u_bar Градиенты r_bar & u_bar по отношению к целевой функции.
Этот оператор ядра реализует следующие математические уравнения:
Примечание о нотации переменных:
Конкатенация a и b обозначается как a_b Точечное произведение a и b обозначается как ab Точечное произведение обозначается как \circ Матричное произведение обозначается как *
Дополнительные примечания для ясности:
w_ru может быть разделено на 4 разные матрицы.
w_ru = [w_r_x w_u_x
w_r_h_prev w_u_h_prev]
Аналогично, w_c может быть разделено на 2 разные матрицы.
w_c = [w_c_x w_c_h_prevr]
То же самое относится к смещениям.
b_ru = [b_ru_x b_ru_h] b_c = [b_c_x b_c_h]
Еще одно примечание по поводу нотации:
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
Математика, стоящая за градиентами, приведена ниже:
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
Нижеприведенный расчет выполняется в обертке Python для градиентов (а не в ядре градиента.)
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
| Аргументы | |
|---|---|
x | A Tensor. Должен быть одного из следующих типов: float32. |
h_prev | A Tensor. Должен иметь тот же тип, что и x. |
w_ru | A Tensor. Должен иметь тот же тип, что и x. |
w_c | A Tensor. Должен иметь тот же тип, что и x. |
b_ru | A Tensor. Должен иметь тот же тип, что и x. |
b_c | A Tensor. Должен иметь тот же тип, что и x. |
r | A Tensor. Должен иметь тот же тип, что и x. |
u | A Tensor. Должен иметь тот же тип, что и x. |
c | A Tensor. Должен иметь тот же тип, что и x. |
d_h | A Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемые значения | |
|---|---|
Кортеж объектов Tensor (d_x, d_h_prev, d_c_bar, d_r_bar_u_bar). | |
d_x | A Tensor. Имеет тот же тип, что и x. |
d_h_prev | A Tensor. Имеет тот же тип, что и x. |
d_c_bar | A Tensor. Имеет тот же тип, что и x. |
d_r_bar_u_bar | A Tensor. Имеет тот же тип, что и x. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/raw_ops/GRUBlockCellGrad