人工智能实战_第二次作业_廖盈嘉

第2次作业:双变量的反向传播计算

项目
内容
这个作业属于哪个课程
这个作业的要求在哪里
我在这个课程的目标是
了解单变量和双变量的线性反向传播原理和实际操作、锻炼代码能力
这个作业在哪个具体方面帮助我实现目标
了解线性反向传播原理、实际动手编程(神经网络基础的模型)
参考文献

作业要求:

  1. 使用Python实现双变量的反向线性传播
  2. 通过梯度下降求解参数w和b的最终值

题目函数:

  • x=2w+3b
  • y=2b+1
  • z = x*y
    给定初始值b,w,z和目标z_target的值,根据反向传播原理和梯度下降来迭代w,b的值,直到z与目标z_target的误差在允许范围之内

代码

每次迭代中都重新计算Δb,Δw的贡献值

import numpy as np
w = 3
b = 4
z_target = 150
z = 162
cnt = 0

def cal(b,w):
   x = (3*b + 2*w)
   y = (2*b +1)
   z = x*y
   delta_b_in = (3*y + 2*x)
   delta_w_in = (2*y)
   return(x,y,z,delta_b_in,delta_w_in)

while(np.abs(z-z_target)>1e-5):
    cnt += 1
    x,y,z,delta_b_in,delta_w_in = cal(b,w)
    print("cnt=%d, w=%.9f, b=%.9f, z=%.9f" %(cnt, w, b, z))
    delta_z = z - z_target
    delta_b = delta_z/(2*delta_b_in)
    delta_w = delta_z/(2*delta_w_in)
    b = b - delta_b
    w = w - delta_w
    print("delta_z=%.9f, delta_b=%.9f, delta_w=%.9f" %(delta_z, delta_b, delta_w));
print("Done!")
print("Final b=%f"%b)
print("Final w=%f"%w)

运行结果和误差值

cnt=1, w=3.000000000, b=4.000000000, z=162.000000000
delta_z=12.000000000, delta_b=0.095238095, delta_w=0.333333333
cnt=2, w=2.666666667, b=3.904761905, z=150.181405896
delta_z=0.181405896, delta_b=0.001498632, delta_w=0.005148005
cnt=3, w=2.661518662, b=3.903263272, z=150.000044335
delta_z=0.000044335, delta_b=0.000000366, delta_w=0.000001259
cnt=4, w=2.661517403, b=3.903262906, z=150.000000000
delta_z=0.000000000, delta_b=0.000000000, delta_w=0.000000000
Done!
Final b=3.903263
Final w=2.661517

没有在迭代中重新计算Δb,Δw的贡献值(替换以下代码)

 delta_b_in = 63
 delta_w_in = 18

运行结果和误差值

cnt=1, w=3.000000000, b=4.000000000, z=162.000000000
delta_z=12.000000000, delta_b=0.095238095, delta_w=0.333333333
cnt=2, w=2.666666667, b=3.904761905, z=150.181405896
delta_z=0.181405896, delta_b=0.001439729, delta_w=0.005039053
cnt=3, w=2.661627614, b=3.903322175, z=150.005526140
delta_z=0.005526140, delta_b=0.000043858, delta_w=0.000153504
cnt=4, w=2.661474110, b=3.903278317, z=150.000169643
delta_z=0.000169643, delta_b=0.000001346, delta_w=0.000004712
cnt=5, w=2.661469398, b=3.903276971, z=150.000005209
delta_z=0.000005209, delta_b=0.000000041, delta_w=0.000000145
Done!
Final b=3.903277
Final w=2.661469

总结与分析

当每次迭代中都重新计算Δb,Δw对z的贡献值时,其计算效率明显高于不在迭代中重新计算Δb,Δw对z的贡献值,提高了收敛速度,更快得到真实解。不难发现,b相较于w对z的影响更大,若按Δb,Δw对z的贡献值的比列分配Δz给Δb和Δw,迭代次数可能将会降低,迭代速度会有所提高。

posted @ 2019-03-13 21:30  MichelleLiew  阅读(316)  评论(0编辑  收藏  举报