BP神经网络-从推导到实现

1.BP神经网络结构与原理

         由于BP神经网络参数超级多,如果不先定义好变量,后面非常难理解,故针对上述图形,定义如下:

 

 通过上面的定义可知:

 

 2.BP神经网络公式推导

 

 第一次项是均方差项(经验风险),第二项是正则项。可以看出,代价函数是关于所有权重和偏置的方程,要通过求代价函数最小来得到最佳的权重和偏置,可以采用梯度下降法逐步下降迭代得到,具体为:

 现在就是要求各权重和偏置的偏导,直接求上述式子会发现非常困难,而BP反向传播算法就是一种方便的求解偏导数的方法,可以认为是一种从后往前找规律的方法,下面开始推导:对于第l层的参数,可以容易得到

 现在的问题转化为求每个样本情况下的代价函数关于各权重和偏置的偏导,通过观察不难发现:对于任何一个样本均有

 而是关于上一层w和b的函数,故可以考虑从最后一层开始算起,看能否找到规律,即有:

注意:按照上述定义,对于层的BP神经网络,w和b的参数上标只能取得

 并且有:

 根据链式法则:

 此时设:

对于最后一层,由于映射函数、都是一直的,故此时已经唯一确定了,而前面基层的依然未知。下面来推导倒数第二层:

 下面只需要求即可,使用链式法则

 注意:k表示当前层数的第k个神经元,而第k个神经元的受到前一层的所有的第i个影响,故有:

 

 

 故BP神经网络的完整流程如下:

3.BP神经网络的第一种是实现

采用误差平方和作为损失函数,基于反向传播算法推导,可得最终的4个方程式,如下:

 一个基本的神经网络:

from BPNetwork_better import mnist_loader
from BPNetwork_better import network

training_data, validation_data, test_data = mnist_loader.load_data_wrapper()
training_data = list(training_data)


net = network.Network([784, 30, 10])
net.SGD(training_data, 30, 10, 3.0, test_data=test_data)

改进后的:

from BPNetwork_better import mnist_loader
from BPNetwork_better import network2

training_data, validation_data, test_data = mnist_loader.load_data_wrapper()
training_data = list(training_data)

net = network2.Network([784, 30, 10], cost=network2.CrossEntropyCost)
# net.large_weight_initializer()
net.SGD(training_data, 30, 10, 0.1, lmbda=5.0, evaluation_data=validation_data,
        monitor_evaluation_accuracy=True)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值