手算BP神经网络

BP(BackPropagation)介绍

BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出,是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。本文在大家都大致了解BP假设前提下,用个人的总结,BP神经网络的工作流程就是包含输入层,隐含层以及输出层的全连接网络矩阵,通过“喂入数据”,数据与权重与偏差进行计算(前向传播),计算输出结果与期待结果的误差,再而通过总误差对权重的偏导数进行修正(反向传播),修正权重值和偏差值;随着不断喂入数据,使得网络权重和偏差值不断得到修改,最后使得网络能够很好拟合数据集。
(如果你还没理解网络,可以先去看下基本的公式,如https://blog.csdn.net/qq_15056115/article/details/82927428,
https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/

然后再过来看手算过程会更能理解

手算的BP网络图介绍

为了手算简单一点,我建立了一个简单的三层网络(一个输入层,一个隐含层和一个输出层),输入层包括三个输入神经元节点,隐含层包括两个神经元节点,输出层包括一个神经元节点。全连接网络中,bias偏差节点的连接权重为1,其他的连接权重为Wi 表示。具体如下图所示。(注意,所有的输入以及权重参数设置随机,学习率设置为0.1).第一个网络图描述的是网络结构,第二个结构图中加入了对隐含层,输出层神经元结果的进行激活函数的处理。在这次手算的网络里面使用的sigmoid激活函数,公式如下
在这里插入图片描述
在手算推导里面,用到的求导公式,大家可以自行计算,这里直接放上公式:
在这里插入图片描述
此外,在使用偏差对权重进行求导数的时候,使用的链式法则 ,就是我们高数所学的求复合函数导数。接下来就是看运算了,下面进行了一次前向传播,一次反向传播的计算。


在这里插入图片描述
在这里插入图片描述

激活函数

激活函数,从上面的过程中,可以看到计算的过程,那么为什么会有激活函数,虽然道理上讲的是进行非线性变换,因为如果没有激活函数,那么网络输出就是输出值和权重的多项式线性方程的结果。但我们网络是为了学习到更多函数模型,把线性的输出结果利用非线性激活函数,映射到曲线上,来实现非线性函数的学习(个人理解,欢迎补充)。
常用的激活函数用如下几种,直接上代码和函数图吧
1、sigmoid 函数

#sigmoid激活函数
def sigmoid(x):
    y=1/(1+math.exp(-x))
    return y

函数图像如下:
在这里插入图片描述
2、Tanh函数

#tanh函数
def Tanh(x):
    exp_=math.exp(x)
    y=(exp_-1/exp_)/(exp_+1/exp_)
    return y

函数图像如下:
在这里插入图片描述
3、ReLU函数

#ReLU函数
def ReLU(x):
    return max(x,0)

函数图像如下:
在这里插入图片描述
4、Leaky ReLU函数

#LeakyReLU函数
def LeakyReLU(x,leak):
    return max(x*leak,x)

函数图像如下:
在这里插入图片描述
5、ELU 函数

激活函数的求导

在网络图运算里面会遇到激活函数的求导,像上面sigmoid函数求导的公式
在这里插入图片描述
下面,我将详细进行函数的描述以及推导
在这里插入图片描述
暂时先写到这里了,后续再手写神经网络。如果有不足或者错误的地方,请各位多多指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值