GRUBlockCellGrad

lớp cuối cùng công khai GRUBlockCellGrad

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 đoạn thành 2 ma trận khác nhau.
w_c = [w_c_x w_c_h_prevr]
 
Tương tự với các 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 gradient bên dưới:
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 các gradient (không phải trong hạt nhân 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
 

Phương pháp công khai

tĩnh <T mở rộng Số> 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.
Đầu ra <T>
dCBar ()
Đầu ra <T>
dHPrev ()
Đầu ra <T>
Đầu ra <T>
dX ()

Phương pháp kế thừa

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

Đầu ra công khai <T> dCBar ()

Đầu ra công khai <T> dHPrev ()

Đầu ra công khai <T> dRBarUBar ()

Đầu ra công khai <T> dX ()