Tính toán tốc độ lan truyền ngược của ô GRU trong 1 bước thời gian.
Args x: Nhập vào ô GRU. h_prev: Trạng thái đầu vào từ ô GRU trước đó. w_ru: Ma trận trọng số cho cổng reset và update. w_c: Ma trận trọng số cho cổng kết nối cell. b_ru: Vector thiên vị cho cổng reset và update. b_c: Vector thiên vị cho cổng kết nối cell. r: Đầu ra của cổng reset. u: Đầu ra của cổng cập nhật. c: Đầu ra của cổng kết nối cell. d_h: Độ dốc của hàm h_new wrt tới hàm mục tiêu.
Trả về d_x: Độ dốc của x wrt tới hàm mục tiêu. d_h_prev: Độ dốc của hàm h wrt tới hàm mục tiêu. d_c_bar Độ dốc của c_bar wrt tới hàm mục tiêu. d_r_bar_u_bar Độ dốc của r_bar & u_bar ghi vào hàm mục tiêu.
Kernel op này thực hiện các phương trình toán học sau:
Lưu ý về ký hiệu của các biến:
Sự kết hợp của a và b được biểu thị bằng a_b Tích dấu chấm theo phần tử của a và b được biểu thị bằng ab Tích dấu chấm theo phần tử được biểu thị bằng \circ Phép nhân ma trận được biểu thị bằng *
Ghi chú bổ sung cho rõ ràng:
`w_ru` có thể được phân chia thành 4 ma trận khác nhau.
w_ru = [w_r_x w_u_x
w_r_h_prev w_u_h_prev]
Tương tự, `w_c` có thể được phân thành 2 ma trận khác nhau. w_c = [w_c_x w_c_h_prevr]
Điều tương tự cũng xảy ra với những thành kiến. b_ru = [b_ru_x b_ru_h]
b_c = [b_c_x b_c_h]
Một lưu ý khác về ký hiệu: 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
Toán học đằng sau các Gradien dưới đây: 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
Phép tính bên dưới được thực hiện trong trình bao bọc python cho Gradien (không phải trong kernel gradient.) 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
Hằng số
Sợi dây | OP_NAME | Tên của op này, được biết đến bởi công cụ lõi TensorFlow |
Phương pháp công khai
tĩnh <T mở rộng TNumber > GRUBlockCellGrad <T> | |
Đầu ra <T> | dCBar () |
Đầu ra <T> | dHPrev () |
Đầu ra <T> | dRBarUBar () |
Đầu ra <T> | dX () |
Phương pháp kế thừa
Hằng số
Chuỗi cuối cùng tĩnh công khai OP_NAME
Tên của op này, được biết đến bởi công cụ lõi TensorFlow
Phương pháp công khai
public static GRUBlockCellGrad <T> tạo ( Phạm vi phạm vi, Toán hạng <T> x, Toán hạng <T> hPrev, Toán hạng <T> wRu, Toán hạng <T> wC, Toán hạng <T> bRu, Toán hạng <T> bC, Toán hạng <T > r, Toán hạng <T> u, Toán hạng <T> c, Toán hạng <T> dH)
Phương thức xuất xưởng để tạo một lớp bao bọc một hoạt động GRUBlockCellGrad mới.
Thông số
phạm vi | phạm vi hiện tại |
---|
Trả lại
- một phiên bản mới của GRUBlockCellGrad