人工智能实战_第二次作业_陈泽寅

第二次作业


题目说明:

项目内容
课程人工智能实战2019
作业要求作业
我在这个课程的目标是了解人工智能理论,提升coding能力
这个作业在哪个具体方面帮助我实现目标通过学习神经网络反向传播算法更好地巩固自己的AI基础

作业要求、

  • 实现双变量的反向线性传播
  • 通过梯度下降求解参数\(\omega\)\(b\)的最终值

解题思路

\[ \frac{\partial{z}}{\partial{b}}=\frac{\partial{z}}{\partial{x}} \cdot \frac{\partial{x}}{\partial{b}}+\frac{\partial{z}}{\partial{y}}\cdot\frac{\partial{y}}{\partial{b}}=y \cdot 3+x \cdot 2=3y+2x \]\[ \frac{\partial{z}}{\partial{w}}=\frac{\partial{z}}{\partial{x}} \cdot \frac{\partial{x}}{\partial{w}}+\frac{\partial{z}}{\partial{y}}\cdot\frac{\partial{y}}{\partial{w}}=y \cdot 2+x \cdot 0 = 2y \]
所以,在每次迭代中,要重新计算下面两个值:
\[ \Delta b=\frac{\Delta z}{3y+2x} \]\[ \Delta w=\frac{\Delta z}{2y} \]
但是由于$
\Delta b\(和\)\Delta\omega\(都对\)\Delta z$造成一半的影响,因此我们这里的公式应该改成
\[ \Delta b=\frac{\Delta z /2}{3y+2x} \]\[ \Delta w=\frac{\Delta z /2}{2y} \]

然后每次更新\(b\)\(\omega,z\)的值,循环迭代,直到\(z -150\leq 10^-5\)

代码实现(每次均更新\(\Delta b\)\(\Delta \omega\))

# -*-coding:utf-8-*-
from numpy import *

target = 150.0
w = 3.0
b = 4.0
z = 162
min = 1e-5;
print(z)
iter_count = 0
while ((abs(150 - z)) > min):
    iter_count +=1
    x = 2 * w + 3 * b
    y = 2 * b + 1
    z = x * y
    delta_b = ((z - 150) / ((2 * x + 3 * y)*2))
    delta_w = ((z - 150) / ((2 * y)*2))
    w = w - delta_w
    b = b - delta_b
    print("loop: %d, w = %.8f, b = %.8f, z = %.8f, error = %.8f"%(iter_count,w,b,z,abs(150-z)));
print("final result:loop = %d, w = %.8f, b = %.8f,z = %.8f,error = %.8f"%(iter_count,w,b,z,abs(z-150)));

运行结果

loop: 1, w = 2.66666667, b = 3.90476190, z = 162.00000000, error = 12.00000000
loop: 2, w = 2.66151866, b = 3.90326327, z = 150.18140590, error = 0.18140590
loop: 3, w = 2.66151740, b = 3.90326291, z = 150.00004434, error = 0.00004434
loop: 4, w = 2.66151740, b = 3.90326291, z = 150.00000000, error = 0.00000000
final result:loop = 4, w = 2.66151740, b = 3.90326291,z = 150.00000000,error = 0.00000000

当我们在反向传播过程中认为\(\Delta b\)\(\Delta \omega\)的值保持不变

 delta_b = ((z - 150) / ((63)*2))
 delta_w = ((z - 150) / ((18)*2))

运行结果

loop: 1, w = 2.66666667, b = 3.90476190, z = 162.00000000, error = 12.00000000
loop: 2, w = 2.66162761, b = 3.90332218, z = 150.18140590, error = 0.18140590
loop: 3, w = 2.66147411, b = 3.90327832, z = 150.00552614, error = 0.00552614
loop: 4, w = 2.66146940, b = 3.90327697, z = 150.00016964, error = 0.00016964
loop: 5, w = 2.66146925, b = 3.90327693, z = 150.00000521, error = 0.00000521
final result:loop = 5, w = 2.66146925, b = 3.90327693,z = 150.00000521,error = 0.00000521

比较与分析

  • 我们可以看到,上面两种方法都能够在有限次迭代中达到想要的结果,但是第一种明显效果更好,速度也更快,因为神经网络的反馈是实时的,也就是说参数的影响会直接作用于下一轮迭代,这也能使神经网络调整参数的速度更加快。因此我们需要在每次迭代时先更新参数的值,后计算下一轮的数据。

转载于:https://www.cnblogs.com/somnus-chen/p/10518479.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值