BP算法 反向传播算法 pyhton实现

BP算法 反向传播算法 python实现

先提出一个问题:怎样拟合一条线性函数??一条线性函数重要的两个参数w,b,当我们给定这2 个参数时如何通BP算法实现无限逼近,多个W,B又能实现什么功能?

1. 什么是BP(反向传播算法)?
反向传播算法:本质上是用链式求导法则通过梯度下降对各个参数更新的一种算法。
2. 过程
回到开头的问题,假设现在给定需要被拟合的直线的参数w=2,b=1即y1=2x+1。并给定拟合的直线参数(随意给)w=0,b=0即 y2=0x+0.现在我们引入描述拟合直线与被拟合直线之间差异的一个函数称为损失函数
在这里插入图片描述
那么如何通过损失函数更新参数w与b呢?这里就不得不提到梯度下降。
3. 梯度下降
把下面的图理解为有多个参数纵坐标为损失的三维函数。只要我们沿着最高点从梯度(也就是导数)最大的点一直向下走便能走到最低点。(当然也会走到其他点的情况,后面再讨论)最低点所对应的w,b便是我们要找到拟合直线的w和b
在这里插入图片描述
上面简要的的说明了梯度下降是如何操作的,如果我说的还不是太清楚的话可以继续看下面一个更具体的例子
下山:
在这里插入图片描述
我们通过一个下山的例子来讲解.当我们需要快速下山时首先找到梯度最大时的路线也就是B路线,走一步后梯度发生变化,更新梯度,再次寻找梯度最大的点沿着走。那么最后就能快速下山。从这里我们引出了梯度下降的主要步骤
梯度下降:
1.梯度下降就是沿着梯度最陡的地方下降。
2.如果我们从x点开始下降每次Δh,位置更新为x-Δh,继续沿着最陡的地方,直到我们下降到最低点。
运用梯度下降时可能存在的问题:
从上面的例子来看我们可以很容易的想到:
1.当我们“步子”迈的过大我们很可能会一个坑里来回的跨越,这也就是我们常说的学习率太大,也可能造成梯度爆炸。那么学习率的选取就显得比较重要。对于大多数学习模型一般设置为0.001,生成模型GAN为1e-4.
2.当我们走到一个坑的最低点时梯度为0了,梯度不走了,但是这个坑不是全局最小的坑就出现了问题。解决方案则是我们可以给梯度一个“动量”,让他能够冲出这个坑。或者从另外一个起点下降。

4.BP过程(代码)
回到刚才的问题,我们通过对w,b求偏导找到w,b最低的损失那么我们所求的直线与被拟合的直线可以无限的逼近。下面是python拟合的代码

import random
import matplotlib.pyplot as plt
_x = [i/100 for i in range(100)] #生成一个 1-100再/100的列表
_y = [3*j+2*random.random() for j in _x]  #生成一条关于x的k为3  b=随机数的散点图
w = random.random()               #初始化w
b = random.random()      #初始化b
plt.ion()          #打开实时画图

if __name__ == '__main__':   #这里是主程序执行
    for i in range(100):     #学习次数为100
        for x,y in zip(_x,_y): #遍历列表  _x   _y
            z = w*x+b         #前向
            loss = 1/2*(z-y)**2 #损失函数
            dw = -(z-y)*x    #x的梯度
            db = -(z-y)*1    #b的梯度
            w = w+0.5*dw    #后向
            b = b+0.5*db     #后向
            print("w={},b={},loss={}".format(w,b,loss))#显示w b  loss
            plt.clf()    #清除坐标轴
            plt.plot(_x,_y,".","r")  #画出原始散点图
            v = [w*i+b for i in _x]
            plt.plot(_x,v,"b")    #画出拟合的直线
            plt.pause(0.1)      #0.1秒间隔
    plt.ioff()             #关闭
    plt.show()   #显示最后画面

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
遗传算法(Genetic Algorithm)是一种基于生物进化理论的优化算法,而bp神经网络(Backpropagation Neural Network)是一种常见的人工神经网络模型,用于模式识别、分类和回归等任务。 使用Python实现遗传算法优化bp神经网络的大致步骤如下: 1. 初始化种群:生成一定规模的初始种群,其中每个个体代表一个bp神经网络的权重和偏差。 2. 评估适应度:根据每个个体的权重和偏差,利用适当的评估函数计算其适应度,即个体在解决问题中的表现好坏。 3. 选择操作:根据适应度,选择部分优秀的个体作为父代,用于产生下一代个体。 4. 交叉操作:采用交叉操作将父代个体的基因信息进行交换和组合,生成新的子代个体。 5. 变异操作:对生成的子代个体进行适当的变异操作,引入一定程度的随机性,以增加种群的多样性。 6. 重复步骤2-5,直到达到终止条件(如达到最大迭代次数、达到一定的适应度或找到最优解等)。 7. 输出最优解:根据终止条件,选择适应度最好的个体作为最终的优化结果,即bp神经网络的最优权重和偏差。 上述步骤可以通过Python编程语言来实现。需使用Python中相关的遗传算法库(如DEAP、PyGAD等)和神经网络库(如Keras、PyTorch等)来方便地实现遗传算法优化bp神经网络的过程。 总而言之,遗传算法是一种可以优化神经网络模型的有效方法,结合bp神经网络,可以通过优化权重和偏差来提高模型的泛化性能和表现能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值