前馈神经网络与反向传播算法(推导过程)

1. 符号说明

nl :表示网络的层数,第一层为输入层
sl :表示第l层神经元个数
f(·) :表示神经元的激活函数
W(l)Rsl+1×sl :表示第l层到第l+1层的权重矩阵
b(l)Rsl+1 :表示第l层到第l+1层的偏置
z(l)Rsl :表示第l层的输入,其中 zi(l) 为第l层第i个神经元的输入
a(l)Rsl :表示第l层的输出,其中 ai(l) 为第l层第i个神经元d的输出

2. 向前传播

下图直观解释了层神经网络模型向前传播的一个例子,圆圈表示神经网络的输入,“+1”的圆圈被称为偏置节点。神经网络最左边的一层叫做输入层,最右的一层叫做输出层。中间所有节点组成的一层叫做隐藏层。
这里写图片描述

每个神经元的表达式如下:
这里写图片描述

前向传播的步骤如下:
z(l)=W(l1)a(l1)+b(l1)a(l)=f(z(l))z(l)=W(l1)f(z(l1))+b(l1)

3. 反向传播算法推导过程

(1)目标函数

给定一个包含m个样本的训练集,目标函数为:

J(W,b)=1mmi=1J(W,b;x(i),y(i))+λ2W22

 =1mmi=1(12h(x(i))y(i))22)+λ2nl1l=1sli=1sl+1j=1(Wji(l))2

采用梯度下降方法最小化J(W,b), 参数更新方式如下:

Wnew(l)=W(l)αJ(W,b))W(l)

 =W(l)αmi=1J(W,b;x(i),y(i))W(l)λW

bnew(l)=b(l)αJ(W,b))b(l)

   =b(l)αmi=1J(W,b;x(i),y(i))b(l)

因此,参数更新的关键在于计算 J(W,b;x,yW(l) J(W,b;x,yb(l)

(2)计算 J(W,b;x,yW(l)

根据链式法则可得:

J(W,b;x,yW(l)=(J(W,b;x,yz(l+1))Tz(l+1)W(l)

其中, z(l+1)W(l)=[W(l)a(l)+b(l)]W(l)=a(l)

定义残差为: δ(l)=J(W,b;x,yz(l)

对于输出层(第 nl 层),残差的计算公式如下:(其中, f(z(nl)) 是按位计算的向量函数,因此其导数是对角矩阵)

δ(nl)=J(W,b;x,yz(nl)

   =12h(x)y)22z(nl)

   =12f(z(nl))y)22z(nl)
   =(a(nl)y)diag(f(z(nl)))

   =(a(nl)y)f(z(nl))

对于网络其它层,残差可通过如下递推公式计算:
δ(l)=J(W,b;x,yz(l)

  =a(l)z(l)z(l+1)a(l)J(W,b;x,yz(l+1)

  =f(z(l))z(l)[W(l)a(l)+b(l)]a(l)δ(l+1)
  =diag(f(z(l)))(W(l))Tδ(l+1)
  =f(z(l))(W(l))Tδ(l+1)

(3)计算 J(W,b;x,yb(l)

与(2)计算过程同理

J(W,b;x,yb(l)=z(l+1)b(l)J(W,b;x,yz(l+1)

 =[W(l)a(l)+b(l)]b(l)δ(l+1)

 =δ(l+1)

综上所述:

J(W,b;x,yW(l)=(δ(l+1))Ta(l)

J(W,b;x,yb(l)=δ(l+1)

反向传播算法的含义是:第l 层的一个神经元的残差是所有与该神经元相连的第l+ 1 层的神经元的残差的权重和,然后在乘上该神经元激活函数的梯度。

4. 反向传播算法流程

借网上一张图,反向传播算法可表示为以下几个步骤:

图片名称

  • 21
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
前馈神经网络的学习算法是基于误差反向传播算法(Backpropagation,BP)实现的。下面是前馈神经网络学习算法推导过程: 1. 前馈过程:假设有一个前馈神经网络,输入为$x$,输出为$y$,则前馈过程可以表示为: $$ \begin{aligned} h^{(1)} &= f^{(1)}(W^{(1)} x + b^{(1)}) \\ h^{(2)} &= f^{(2)}(W^{(2)} h^{(1)} + b^{(2)}) \\ \cdots \\ y &= f^{(L)}(W^{(L)} h^{(L-1)} + b^{(L)}) \end{aligned} $$ 其中,$h^{(l)}$表示第$l$层的输出,$f^{(l)}$表示第$l$层的激活函数,$W^{(l)}$表示第$l$层的权重矩阵,$b^{(l)}$表示第$l$层的偏置向量,$L$表示神经网络的层数。 2. 损失函数:假设神经网络的目标是学习一个函数$f(x)$,则可以定义一个损失函数$J$来衡量神经网络的输出与目标函数之间的差异: $$ J(W,b) = \frac{1}{2}\sum_{i=1}^{m}(y^{(i)}-f(x^{(i)}))^2 $$ 其中,$m$表示训练集的样本数量,$y^{(i)}$表示第$i$个样本的神经网络输出,$f(x^{(i)})$表示第$i$个样本的目标函数输出。 3. 反向传播过程:利用误差反向传播算法,可以计算出每个神经元的误差,从而更新权重矩阵和偏置向量。具体地,假设第$l$层的神经元的误差为$\delta^{(l)}$,则可以通过以下方式计算: $$ \begin{aligned} \delta^{(L)} &= (y-f(x)) \odot f^{(L)'}(z^{(L)}) \\ \delta^{(l)} &= (W^{(l+1)})^T \delta^{(l+1)} \odot f^{(l)'}(z^{(l)}) \end{aligned} $$ 其中,$\odot$表示矩阵对应元素相乘,$z^{(l)}$表示第$l$层的加权输入。 4. 参数更新:利用反向传播算法计算出每个神经元的误差后,可以更新权重矩阵和偏置向量,使得损失函数$J$最小化。具体地,可以使用梯度下降算法来更新参数: $$ \begin{aligned} W^{(l)} &:= W^{(l)} - \alpha \frac{\partial J}{\partial W^{(l)}} \\ b^{(l)} &:= b^{(l)} - \alpha \frac{\partial J}{\partial b^{(l)}} \end{aligned} $$ 其中,$\alpha$表示学习率,$\frac{\partial J}{\partial W^{(l)}}$和$\frac{\partial J}{\partial b^{(l)}}$可以通过链式法则计算得出: $$ \begin{aligned} \frac{\partial J}{\partial W^{(l)}} &= \delta^{(l)} (h^{(l-1)})^T \\ \frac{\partial J}{\partial b^{(l)}} &= \delta^{(l)} \end{aligned} $$ 其中,$h^{(l-1)}$表示第$l-1$层的输出。 5. 循环迭代:重复执行前馈过程反向传播过程和参数更新过程,直到达到预设的停止条件(如达到最大迭代次数或损失函数下降到一定程度),即可得到一个训练好的神经网络模型。 以上就是前馈神经网络学习算法推导过程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值