ML算法(三)——BP神经网络从推导到实现

这篇博客详细介绍了BP神经网络的结构和工作原理,包括前向传播和反向传播的过程。通过误差平方和作为损失函数,利用梯度下降和随机梯度下降更新权重。重点强调了反向传播中计算代价函数关于权重和偏置的偏导数对于优化网络性能的重要性。同时,提到了训练数据在复杂算法中的关键作用。
摘要由CSDN通过智能技术生成

参考:

https://www.bilibili.com/video/BV16t411Q7TM?p=6&spm_id_from=pageDriver

一、BP神经网络结构与原理

 定义:

  

                       

 重要公式:

 采用误差平方和作为损失函数,基于反向传播算法推导:非常重要!

#前向计算
for b,w in zip(self,biases,self.weight):
    z = np.dot(w,activation)+b
    zs.append(z)
    activation = sigmoid(z)
    activation.append(activation)


#反向传播
delta = self.cost_derivations[-1],y * \ sigmoid_prime(zs[-1])
nabla_b[-1] = delta
nabla_w[-1] = np.dot(delta,activation[-2].transpose())
#计算从倒数第二层至第二层的误差
for l in range(2,self.num_layers):
    z = zs[-l]
    sp = sigmoid_prime(z)
    delta = np.dot(self.weight[-l+1]).transpose(),data)*sp
    nabla_b[-l] = delta
    nabla_w[-l] = np.dot(delta,activation[-l-1].transpose())

梯度下降算法⼯作的⽅式就是重复计算梯度∇C,然后沿着相反的⽅向移动,沿着⼭⾕“滚落”。

随机梯度下降通过随机选取⼩量的m个训练输⼊来⼯作。我们将这些随机的训练输⼊标记为X1,X2,...,Xm,并把它们称为⼀个⼩批量数据(mini-batch)。 

net.weights[1]是⼀个存储着连接第⼆层和第三层神经元权重的Numpy矩阵。 

复杂的算法≤简单的学习算法+好的训练数据 

反向传播的核⼼是⼀个对代价函数C关于任何权重w(或者偏置b)的偏导数∂C/∂w的表达式。这个表达式告诉我们在改变权重和偏置时,代价函数变化的快慢。 

 

反向传播算法: 

1.输⼊x:为输⼊层设置对应的激活值a1。

2.前向传播:对每个l= 2,3,...,L计算相应的zl=wlal−1+bl和al=σ(zl)

3.输出层误差δL:计算向量δL=∇aC⊙σ′(zL)

4.反向误差传播:对每个l=L−1,L−2,...,2,计算δl= ((wl+1)Tδl+1)⊙σ′(zl)5.输出:代价函数的梯度由∂C∂wljk=al−1kδlj和∂C∂blj=δlj得出 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值