การชักชวนนั้นใช้หลักการแบ่งปันน้ำหนักซึ่งจะทำให้คณิตศาสตร์ซับซ้อนขึ้นอย่างมาก แต่ลองพยายามผ่านวัชพืช ฉันกำลังอธิบายส่วนใหญ่ของฉันจากแหล่งนี้
ส่งต่อ
ในขณะที่คุณสังเกตผ่านไปข้างหน้าของชั้น convolutional สามารถแสดงเป็น
xli,j=∑m∑nwlm,nol−1i+m,j+n+bli,j
k1k2k1=k2=2x0,0=0.25mn
แพร่กระจายย้อนกลับ
สมมติว่าคุณกำลังใช้ค่าเฉลี่ยข้อผิดพลาดกำลังสอง (MSE) ที่กำหนดเป็น
E=12∑p(tp−yp)2
เราต้องการตรวจสอบ
∂E∂wlm′,n′m′n′w10,0=−0.13HK
(H−k1+1)(W−k2+1)
44w10,0=−0.13x10,0=0.25
∂E∂wlm′,n′=∑H−k1i=0∑W−k2j=0∂E∂xli,j∂xli,j∂wlm′,n′
สิ่งนี้ทำซ้ำข้ามพื้นที่เอาต์พุตทั้งหมดกำหนดข้อผิดพลาดที่เอาต์พุตกำลังสนับสนุนและจากนั้นกำหนดปัจจัยการสนับสนุนของน้ำหนักเคอร์เนลที่เกี่ยวข้องกับเอาต์พุตนั้น
ให้เราเรียกการสนับสนุนข้อผิดพลาดจากพื้นที่ส่งออกเดลต้าเพื่อความง่ายและติดตามข้อผิดพลาด backpropagated
∂E∂xli,j=δli,j
การมีส่วนร่วมจากน้ำหนัก
การสนทนานี้ถูกกำหนดให้เป็น
xli,j=∑m∑nwlm,nol−1i+m,j+n+bli,j
ดังนั้น,
∂xli,j∂wlm′,n′=∂∂wlm′,n′(∑m∑nwlm,nol−1i+m,j+n+bli,j)
m=m′n=n′
∂xli,j∂wlm′,n′=ol−1i+m′,j+n′
จากนั้นกลับมาในเทอมข้อผิดพลาดของเรา
∂E∂wlm′,n′=∑H−k1i=0∑W−k2j=0δli,jol−1i+m′,j+n′
โคตรลาดลง
w(t+1)=w(t)−η∂E∂wlm′,n′
ลองคำนวณบางส่วน
import numpy as np
from scipy import signal
o = np.array([(0.51, 0.9, 0.88, 0.84, 0.05),
(0.4, 0.62, 0.22, 0.59, 0.1),
(0.11, 0.2, 0.74, 0.33, 0.14),
(0.47, 0.01, 0.85, 0.7, 0.09),
(0.76, 0.19, 0.72, 0.17, 0.57)])
d = np.array([(0, 0, 0.0686, 0),
(0, 0.0364, 0, 0),
(0, 0.0467, 0, 0),
(0, 0, 0, -0.0681)])
gradient = signal.convolve2d(np.rot90(np.rot90(d)), o, 'valid')
อาร์เรย์ ([[0.044606, 0.094061], [0.011262, 0.068288]])
∂E∂w
กรุณาแจ้งให้เราทราบหากมีข้อผิดพลาดในการได้รับมา
อัปเดต: รหัสที่ถูกต้อง