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

前言

本文所用的数据集来自 西瓜书P150-154西瓜数据3.0,实现了一个单隐含层单输出的网络,不使用sklearn库直接训练,文章末尾会附上完整代码和数据集。

一、BP算法简介及其实现步骤

BP算法基于梯度下降法,通过计算损失函数关于网络中各层权重和偏置的梯度,逐层反向传播误差,从而更新参数以减少预测误差。 

注意:

偏置的主要作用是为激活函数提供一个平移,使得模型能够更好地拟合数据。即使输入的所有特征为零,偏置也能确保神经元有一个非零的输出。

阈值通常是用于激活函数的阈值判断条件,决定一个神经元是否被激活或激活的程度。

两者在计算上略有区别,偏置项一般是被加上再传入激活函数中,而阈值再被传入时要被减去,在更新参数时求导的正负会有变化。

                                   

学习过程:

        前向传播:输入数据通过网络,经过每一层的加权和非线性激活函数,输出预测结果。

        误差计算:使用损失函数计算预测结果与真实标签之间的误差。

        反向传播:从输出层开始,将误差按链式法则计算并传播回去,逐层计算每个权重的梯度。

        参数更新:利用学习率(通常是一个小的正数)乘以梯度更新权重和偏置。

主要步骤:                    

1.初始化:随机初始化神经网络中的连接权重wi(输入层x到隐含层h)、wo(隐含层h到输出层y)、b(偏置,这里对应的有两个)。

2.前向传播(Forward Propagation):将输入数据送入网络的输入层,通过连接权重和激活函数(这里选择sigmoid函数将值投影到0~1之间),逐层计算各个神经元的输出,直至得到输出层的输出。

                                                   

其中下标i表示各层的输入,o表示各层的输出。

3.计算误差:将输出层的预测结果与真实的目标输出进行比较,计算网络在当前权重下的误差E。这里使用均方误差来表示:

                                                  

y为真实值,yo为神经网络输出的值。

 4.反向传播(Backward Propagation):根据误差,从输出层开始,按照反向顺序逐层计算每个神经元的梯度。梯度表示误差随着权重的变化而变化的速率。这一步是BP算法的核心,通过链式法则计算梯度,并将误差从输出层反向传播到隐藏层和输入层。

                                  &nbs

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值