2019人工智能实战 第二次作业 段峙宇

双变量的反向传播计算

项目 内容
课程内容 2019人工智能实战
作业要求 第二次作业
课程目标 双变量反向传播计算
本次作业的帮助 学习反向传播代码的写法和一些思考
  1. 题目

$$
z = x * y
$$
$$x = 2w + 3b$$
$$y = 2b + 1$$

  • 求解使$z$稳定在150的参数值
  • 精度:0.00001
  1. 代码
def cal(w_last, b_last, delta_z):
    b_last = float(b_last)
    w_last = float(w_last)
    delta_z = float(delta_z)
    y = float(2 * b_last + 1)
    x = float(2 * w_last + 3 * b_last)
    delta_b = float(delta_z * 0.5 / (3 * y + 2 * x))
    delta_w = float(delta_z * 0.5 / (2 * y))
    return delta_b, delta_w,
if __name__ == "__main__":
    list_z = [162.0]
    list_w = [3]
    list_b = [4]
    i = 0
    while(i<=6):
        delta_z = float(list_z[i] - 150)
        if (abs(delta_z <= 0.00001)):
            break;
        delta_b, delta_w = cal(list_w[i], list_b[i], delta_z)
        list_w.append(list_w[i]-delta_w)
        list_b.append(list_b[i]-delta_b)
        i = i + 1
        z = float((2 * list_w[i]+ 3 * list_b[i]) * (2 * list_b[i] + 1))
        list_z.append(z)
    print(list_z)
    print(list_b)
    print(list_w)
  1. 运行结果
[162.0, 150.18140589569163, 150.0000443352674, 150.00000000000267]
[4, 3.9047619047619047, 3.903263272264059, 3.9032629057674404]
[3, 2.6666666666666665, 2.661518661518661, 2.661517402927456]

故最终误差为$2.67*10^{-12}$
b的最终值为3.9032629057674404
w的最终值为2.661517402927456

  1. 问题与思考
  • 不是很理解为什么要假设$$\Delta w和\Delta b对\Delta z$$的贡献量是一样的?
    个人感觉应该按照每次偏导数的值转化权重,因为偏导数越大证明该变量对误差的贡献越多
posted @ 2019-03-18 21:40  火鸡面里的小鱼干  阅读(92)  评论(0)    收藏  举报