2.3反向传播:BP算法 BP算法是由损失函数反向求导计算所有节点偏导数的过程 希望得到所有参数(W,b)的偏导数 a y 损失函数
2.3 反向传播:BP算法 BP算法是由损失函数反向求导计算所有节点偏导数的过程 – 希望得到所有参数(w,b)的偏导数
2.3反向传播:举例讲解 假设有如右图所示的计算图,可以得到 q=x ty 1 ac 求 af af ay af af aq af af a Q链式法则 dx ag dx dy aq a 正向传播后 反向传播后 dx af af
2.3 反向传播:举例讲解 假设有如右图所示的计算图,可以得到: 𝑞 = 𝑥 + 𝑦 𝜕𝑞 𝜕𝑥 = 1, 𝜕𝑞 𝜕𝑦 = 1 𝑓 = 𝑞𝑧 𝜕𝑓 𝜕𝑞 = 𝑧, 𝜕𝑓 𝜕𝑧 = 𝑞 求: 𝜕𝑓 𝜕𝑥, 𝜕𝑓 𝜕𝑦 正向传播后 反向传播后 𝜕𝑓 𝜕𝑓 𝜕𝑓 𝜕𝑞 𝜕𝑓 𝜕𝑧 𝜕𝑓 𝜕𝑦 𝜕𝑓 𝜕𝑥 𝜕𝑓 𝜕𝑥 = 𝜕𝑓 𝜕𝑞 𝜕𝑞 𝜕𝑥, 𝜕𝑓 𝜕𝑦 = 𝜕𝑓 𝜕𝑞 𝜕𝑞 𝜕𝑦 链式法则
2.3反向传播:举例讲解 本地梯度 dg ax q Add dq af dy dg af2 ag ay oy
Add x y q 𝜕𝑓 𝜕𝑞 𝜕𝑞 𝜕𝑥 𝜕𝑞 𝜕𝑦 本地梯度 2.3 反向传播:举例讲解
2.3反向传播:举例讲解 若将输入值改为向量,反向传播会是什么情况? 假设有如右图所示的计算图 即q=W W11x1+W12x 0.30.8 正向传播后 2,1x1+W22x q 0.2 0116 f=|q|2=q2+ 0.4 代码实现 [[.18.5 正向传播 [-0.38.8]] W=tf. constant([e.1,e.5],[-8.3,e.8])各参数值情况 [[.2 x= tf constant([[0.2], [0.4) tf matmul [0.4] f= tf square(tf norm(q)) [[e.22 [0.26008]] 9.11609990
正向传播后 若将输入值改为向量,反向传播会是什么情况? 假设有如右图所示的计算图: 即 𝑞 = 𝑊 ∗ 𝑥 = 𝑊1,1𝑥1 + 𝑊1,2𝑥2 𝑊2,1𝑥1 + 𝑊2,2𝑥2 , 𝑓 = 𝑞 2 = 𝑞1 2 + 𝑞2 2 q f 2.3 反向传播:举例讲解 各参数值情况 代码实现:
2.3反向传播:举例讲解 0.10.5 有 0.0880.1760m4f= 0.30.8 反向传播后 0.1040.208 0.26 0=x awi,j awi,j qix 0.4 0.44 1.00 -0.112 0.52 0204 0.0880.176 0.1040.208 0.636 xf=2w q qf= 2q qk af =∑k2qkWk xi dxi 01051-0.11212(qW1+q2W2 -0.308 06362( q2W2) df/dw 代码实现 Array ([[0.088 #反向传播 [e.10400,0.20800]], dtype= float32) dq= tf gradients(f, q )求导情况fkx [ array([[-0.11200], dw = tf gradients(f, w) [8.63600]], dtype= float32)] dx=tf gradients(f, x) df/dq [array ([[o [.520000], dtype= float32)]
2.3 反向传播:举例讲解 反向传播后 q f 𝝏𝒇 𝝏𝒇 有 𝜕𝑓 𝜕𝑞𝑖 = 2𝑞𝑖 𝜕𝑞𝑘=𝑖 𝜕𝑊𝑖,𝑗 = 𝑥𝑗 𝜕𝑓 𝜕𝑊𝑖,𝑗 = 2𝑞𝑖𝑥𝑗 𝜕𝑞𝑘 𝜕𝑥𝑖 = 𝑊𝑘,𝑖 𝜕𝑓 𝜕𝑥𝑖 = σ𝑘 2𝑞𝑘𝑊𝑘,𝑖 0.44 0.52 0.2 0.4 0.088 0.176 0.104 0.208 −0.112 0.636 = 2(𝑞1𝑊1,1 + 𝑞2𝑊2,1) 2(𝑞1𝑊1,2 + 𝑞2𝑊2,2) 0.1 0.5 −0.3 0.8 ▽𝒒 𝒇 = 𝟐𝒒 ▽𝑾 𝒇 = 𝟐𝒒𝒙 𝑻 ▽𝒙 𝒇 = 𝟐𝑾𝑻𝒒 代码实现: 求导情况