神经网络前向后向传播推导及实现

本文详细介绍了BP神经网络的前向传播和反向传播过程,包括数学推导和C++代码实现,旨在帮助读者理解神经网络的工作原理。在前向传播中,从输入层到输出层的激活单元逐步计算,而在反向传播中,从输出层开始计算误差并反向传播以更新权重。文章还提到了初始化权重的重要性以及优化过程中的梯度下降策略。
摘要由CSDN通过智能技术生成

本文主要是BP网络的前后向传播较详细推导,以及C++实现,记下来也方便后面的回顾,也希望对关系细节的读者也一丝帮助。如果有不对的地方,请指正。

BP图模型:

这里写图片描述

网络中单个激活单元:

这里写图片描述


  • 上图定了隐层中的激活单元,该隐层激活单元中含有一个偏置项b。相关运算如图所示,符号右上角角标为单元在网络中的层好,结合代码实现时,网络激活单元之间的权重一般保存在前一层的单元中。

这里有两点注意:

  1. 输入层的单元中没有偏置项b,但有权值项w。
  2. 输出层的单元中没有权值项w,但有偏置项b。

相关符号定义:

符号 意义
m 样本数
nl 网络的总层数
Ll l
W(l)ij l 层的j单元与 l+1 的i单元之间的权值(weight)
b(l)i l 层第i个单元的偏置项
Sl 表示第 l 层的节点数
a(l)i 表示第 l 层第i单元的激活值
f(x) sigmoid函数: f(x)=11+ex
z(l)i 表示第 l 层第i单元的输入
hwb(x) 表示整个网络对输入x的输出结果,等价于 a(nl)

损失函数(带2范式正则):

J(W,b)=1mi=1mJ(W,b;xi,yi)+λ2l=1nl1i=1Slj=1Sl+1(W(l)ji)2

其中,
J(W,b;x,y)=12hwb(x)y2

我们优化所有权值和偏置就是通过最小化损失函数来实现的,通过对损失函数计算各权值和偏置的梯度,然后沿着各自梯度的反方向走,就可以让损失函数慢慢变小,由于神经网络不是的损失函数不是严格凸函数,所以并不能保证找到全局最优解。我们首先就要计算各权值和偏置关于损失函数的梯度。

前向传播

Tip : 这里需要先初始化各单元中的权值和偏置项的值,权值可以按照标准正态分布去产生,也可以使用其它方式产生,但最好不要偷懒而给所有权值赋上相同的值,这样会导致极慢的收敛速度,有兴趣的读者可以修改下面的程序自己试下。

  1. 输入层向隐层的前向传播:
    • 向输入层输入数据X,第二层第i个激活单元相关计算:
      该激活单元的输入: z(2)i=j=1S1W(1)ija(1)j+b(2)i ,其中 a(1)i=Xi
      该激活单元的输入: a(2)i=f(z(2)i)=11+ez(2)i
      计算完输入层的前向传播后就可以计算隐层间的传播了。
  2. 隐层间的传播:
    • 上一层的隐层输出值作为当前隐层的输入值:
      l 层第i个激活单元输入: z(l)i=j=1Sl1W(l1)ija(l1)j+b(l)i
      l 层第i个激活单元输出: a(l)i=f(z(l)i)=11+ez(l)i
      隐层按照从低向高的顺序依次计算各层的激活单元,依次计算各层: l=3,4,...Snl1
  3. 输出层的传播:
    • 传播到最后的输出层:
      Snl 层第i个激活单元输入: z(nl)i=j=1Snl1W(nl1)ija(nl1)j+b(nl)i
      Snl 层第i个激活单元最终的输出: a(nl)i=f(z(nl)i)=11+ez
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值