GRUBlockCellGrad

GRUBlockCellGrad คลาสสุดท้ายสาธารณะ

คำนวณการแพร่กระจายกลับของเซลล์ GRU เป็นเวลา 1 ขั้นตอน

Args x: ป้อนข้อมูลลงในเซลล์ GRU h_prev: ระบุอินพุตจากเซลล์ GRU ก่อนหน้า w_ru: เมทริกซ์น้ำหนักสำหรับเกตรีเซ็ตและอัพเดต w_c: เมทริกซ์น้ำหนักสำหรับประตูเชื่อมต่อเซลล์ b_ru: เวกเตอร์อคติสำหรับประตูรีเซ็ตและอัปเดต b_c: เวกเตอร์อคติสำหรับประตูการเชื่อมต่อเซลล์ r: เอาท์พุตของเกตรีเซ็ต u: เอาท์พุตของประตูอัพเดต c: เอาท์พุตของประตูเชื่อมต่อเซลล์ d_h: การไล่ระดับสีของ h_new wrt ไปยังฟังก์ชันวัตถุประสงค์

ส่งกลับ d_x: การไล่ระดับสีของ x wrt ไปยังฟังก์ชันวัตถุประสงค์ d_h_prev: การไล่ระดับสีของ h wrt ไปยังฟังก์ชันวัตถุประสงค์ d_c_bar การไล่ระดับสีของ c_bar wrt ไปยังฟังก์ชันวัตถุประสงค์ d_r_bar_u_bar การไล่ระดับสีของ r_bar & u_bar wrt ไปยังฟังก์ชันวัตถุประสงค์

เคอร์เนล op นี้ใช้สมการทางคณิตศาสตร์ต่อไปนี้:

หมายเหตุเกี่ยวกับสัญกรณ์ของตัวแปร:

การต่อกันของ 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
 
การคำนวณด้านล่างจะดำเนินการใน wrapper 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
 

วิธีการสาธารณะ

คงที่ <T ขยายจำนวน> GRUBlockCellGrad <T>
สร้าง ( ขอบเขต ขอบเขต ตัวดำเนินการ <T> x ตัวดำเนินการ <T> hPrev ตัวดำเนินการ <T> wRu ตัวดำเนินการ <T> wC ตัวดำเนินการ <T> bRu ตัวดำเนินการ <T> bC ตัวดำเนินการ <T> r ตัวดำเนินการ <T > u, ตัวดำเนินการ <T> c, ตัวถูกดำเนินการ <T> dH)
วิธีการจากโรงงานเพื่อสร้างคลาสที่ห่อการดำเนินการ GRUBlockCellGrad ใหม่
เอาท์พุต <T>
เอาท์พุต <T>
dHPrev ()
เอาท์พุต <T>
เอาท์พุต <T>

วิธีการสืบทอด

วิธีการสาธารณะ

สร้าง GRUBlockCellGrad <T> สาธารณะแบบคงที่ (ขอบเขต ขอบเขต , ตัวดำเนินการ <T> x, ตัวดำเนินการ <T> hPrev, ตัวดำเนินการ <T> wRu, ตัวดำเนินการ <T> wC, ตัวดำเนินการ <T> bRu, ตัวดำเนินการ <T> bC, ตัวดำเนินการ <T > r, ตัวดำเนินการ <T> u, ตัวถูกดำเนินการ <T> c, ตัวถูกดำเนินการ <T> dH)

วิธีการจากโรงงานเพื่อสร้างคลาสที่ห่อการดำเนินการ GRUBlockCellGrad ใหม่

พารามิเตอร์
ขอบเขต ขอบเขตปัจจุบัน
การส่งคืน
  • อินสแตนซ์ใหม่ของ GRUBlockCellGrad

เอาท์ พุท สาธารณะ <T> dCBar ()

เอาท์ พุท สาธารณะ <T> dHPrev ()

เอาท์พุท สาธารณะ <T> dRBarUBar ()

เอาท์ พุท สาธารณะ <T> dX ()