MLP反向传播

本文详细介绍了神经网络中的链式法则及其在反向传播算法中的应用。通过实例展示了如何利用链式法则计算复合函数的偏导数,并在神经网络中进行误差反向传播,以更新权重。内容涵盖了从输入层到输出层的前向传播和反向传播过程,以及权重更新的计算步骤。

一、链式法则

  1. 链式法则用于求符合函数的导数,广泛应用于神经网络中的反向传播算法。
  2. 链式法则:dydx=dydu∗dudx\frac{dy}{dx}=\frac{dy}{du}*\frac{du}{dx}dxdy=dudydxdu
  3. 链式法则在神经网络中的应用:
    在这里插入图片描述
    ∂E∂wjk1=∂E∂Ok1∂Ok1∂wjk1=∂E∂Ok2∂Ok2∂Ok1∂Ok1∂wjk1 \frac{\partial E}{\partial w_{jk}^{1}}=\frac{\partial E}{\partial O_{k}^{1}}\frac{\partial O_{k}^{1}}{\partial w_{jk}^{1}}=\frac{\partial E}{\partial O_{k}^{2}}\frac{\partial O_{k}^{2}}{\partial O_{k}^{1}}\frac{\partial O_{k}^{1}}{\partial w_{jk}^{1}} wjk1E=Ok1Ewjk1Ok1=Ok2EOk1Ok2wjk1Ok1

二、反向传播原理引入(引自知乎)

  1. e=(a+b)∗(b+1)e=(a+b)*(b+1)e=(a+b)(b+1)的偏导为例,其复合关系图如下
    在这里插入图片描述
    当a=2,b=1时,e的梯度我们可以用偏导关系来表示
    在这里插入图片描述
  2. 利用链式法则进行推导:
    1. ∂e∂a=∂e∂c∂c∂a=1∗2\frac{\partial e}{\partial a}=\frac{\partial e}{\partial c}\frac{\partial c}{\partial a}=1*2ae=ceac=12
    2. ∂e∂b=∂e∂c∂c∂b+∂e∂d∂d∂b=2∗1+3∗1=5\frac{\partial e}{\partial b}=\frac{\partial e}{\partial c}\frac{\partial c}{\partial b}+\frac{\partial e}{\partial d}\frac{\partial d}{\partial b}=2*1+3*1=5be=cebc+debd=21+31=5
  3. 规律总结:
    1. 求偏导,可以从当前点,一直累乘到叶子结点,并求和。

三、举个栗子

1、题目描述

  1. 现在有如下网络层
    在这里插入图片描述
  • 第一层:输入层;第二层:隐含层;第三层:输出层。
  • 激活函数为:sigmoid函数
  1. 赋值后如下
    在这里插入图片描述
  2. 目标:给定输入数据i1,i2(0.05,0.10),使输出尽可能与原始输出o1,o2(0.01和0.99)接近。

2、前向传播求解

  1. 输入层——>隐含层
    1. 计算神经元h1的输入加权求和:neth1=w1∗i1+w2∗i2+b1=0.05∗0.15+0.10∗0.25=0.3775net_{h1}=w_1*i_1+w_2*i_2+b_1=0.05*0.15+0.10*0.25=0.3775neth1=w1i1+w2i2+b1=0.050.15+0.100.25=0.3775
    2. 计算神经元h1的输出o1:
      outh1=11+e−neth1=11+e−0.3775=0.593269992out_{h1}=\frac{1}{1+e^{-net_{h1}}}=\frac{1}{1+e^{-0.3775}}=0.593269992outh1=1+e
MLP(Multi-Layer Perceptron,多层感知机)是一种基本的前馈神经网络结构。在反向传播过程中,链式法则被用于逐层求取梯度,以更新网络权重,这个过程有助于最小化损失函数。 **步骤详解**: 1. **前向传播**:从输入层开始,将输入数据通过每个隐藏层直到输出层,每一层都会对上一层的输出应用激活函数,生成新的信号。 2. **计算损失**:将输出层的预测值与实际标签对比,得到预测误差,即损失函数L。 3. **初始化梯度**:对于所有权重W和偏置b,设置初始梯度为零,这是因为在反向传播之前,所有的梯度都是未知的。 4. **链式法则**:从输出层开始,计算每个权重的梯度。假设当前层是第l层,输出是\( z_l \),误差项是\( \delta_l \)。那么权重梯度\( dW_l \) 和 \( db_l \) 的更新可以通过以下公式计算: - \( \delta_l = \frac{\partial L}{\partial z_l} * \sigma'(z_l) \),其中\( \sigma'\)是激活函数的导数。 - \( dW_{l+1} = \delta_l * a_l^T \),\( da_l = \delta_l \cdot W_{l+1}^T \),这里\( a_l \)是上一层的输出。 5. **回溯到隐藏层**:用同样的链式法则计算隐藏层的权重梯度,只是\( z_l \)被上一层的输入替代,继续向上层直至输入层。 6. **更新权重**:使用学习率η和梯度,更新网络的权重和偏置:\( W_l := W_l - \eta * dW_l \) 和 \( b_l := b_l - \eta * db_l \)。 **相关问题--**: 1. MLP反向传播如何防止梯度消失或爆炸的问题? 2. 反向传播算法中的误差项是如何传递的? 3. 当选择不同类型的激活函数时,链式求导会有怎样的影响?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值