深度学习模型的前馈运算与反馈运算

前馈运算

假设现在网络的参数收敛到 ω 1 , … , ω L − 1 \omega^{1}, \ldots, \omega^{L-1} ω1,,ωL1,进行feed- forward,将输入 x 1 x_1 x1送入网络,之后经过第一层操作 ω 1 \omega^1 ω1得到 x 2 x_2 x2,依次类推……直到得到输出 x L x_L xL

反馈运算

深度学习模型通常采用随机梯度下降法(SGD)和误差反向传播(error back propogation)进行模型参数更新。

每层操作主要对应两部分:

​ 1.用于参数更新 ∂ z ∂ ω i \frac{\partial z}{\partial \boldsymbol{\omega}^{i}} ωiz,是误差关于参数 ω i {\omega}^{i} ωi的导数
ω i ← ω i − η ∂ z ∂ ω i (1) \omega ^ { i } \leftarrow \omega ^ { i } - \eta \frac { \partial z } { \partial \omega^ { i } } \tag{1} ωiωiηωiz(1)
η \eta η是每次SGD的步长(一般随epoch的增大而减小)

​ 2.用于误差向前层的反向传播 ∂ z ∂ x i \frac{\partial z}{\partial \boldsymbol{x}^{i}} xiz,是误差关于输入 x i x^i xi的导数。

下面,我们以第 i i i层参数更新为例,需要计算 ∂ z ∂ ω i \frac{\partial z}{\partial \boldsymbol{\omega}^{i}} ωiz ∂ z ∂ x i \frac{\partial z}{\partial \boldsymbol{x}^{i}} xiz,根据链式法则:
∂ z ∂ ( vec ⁡ ( ω i ) ⊤ ) = ∂ z ∂ ( vec ⁡ ( x i + 1 ) ⊤ ) ⋅ ∂ vec ⁡ ( x i + 1 ) ∂ ( vec ⁡ ( ω i ) ⊤ ) (2) \frac{\partial z}{\partial\left(\operatorname{vec}\left(\boldsymbol{\omega}^{i}\right)^{\top}\right)}=\frac{\partial z}{\partial\left(\operatorname{vec}\left(\boldsymbol{x}^{i+1}\right)^{\top}\right)} \cdot \frac{\partial \operatorname{vec}\left(\boldsymbol{x}^{i+1}\right)}{\partial\left(\operatorname{vec}\left(\boldsymbol{\omega}^{i}\right)^{\top}\right)} \tag{2} (vec(ωi))z=(vec(xi+1))z(vec(ωi))vec(xi+1)(2)

∂ z ∂ ( vec ⁡ ( x i ) ⊤ ) = ∂ z ∂ ( vec ⁡ ( x i + 1 ) ⊤ ) ⋅ ∂ vec ⁡ ( x i + 1 ) ∂ ( vec ⁡ ( x i ) ⊤ ) (3) \frac{\partial z}{\partial\left(\operatorname{vec}\left(\boldsymbol{x}^{i}\right)^{\top}\right)}=\frac{\partial z}{\partial\left(\operatorname{vec}\left(\boldsymbol{x}^{i+1}\right)^{\top}\right)} \cdot \frac{\partial \operatorname{vec}\left(\boldsymbol{x}^{i+1}\right)}{\partial\left(\operatorname{vec}\left(\boldsymbol{x}^{i}\right)^{\top}\right)} \tag{3} (vec(xi))z=(vec(xi+1))z(vec(xi))vec(xi+1)(3)

​ 对于(2)和(3)式右侧所需要的数,由第 i + 1 i+1 i+1层的(3)式已经得到的有 ∂ z ∂ x i + 1 \frac{\partial z}{\partial \boldsymbol{x}^{i+1}} xi+1z,即两式+号左边的式子。同时,在前馈运算时的第 i i i层, x i x^i xi w i w^i wi的作用得到 x i + 1 x^{i+1} xi+1,反向求导可以直接得到 ∂ vec ⁡ ( x i + 1 ) ∂ ( vec ⁡ ( ω i ) ⊤ ) \frac{\partial \operatorname{vec}\left(\boldsymbol{x}^{i+1}\right)}{\partial\left(\operatorname{vec}\left(\boldsymbol{\omega}^{i}\right)^{\top}\right)} (vec(ωi))vec(xi+1) ∂ vec ⁡ ( x i + 1 ) ∂ ( vec ⁡ ( x i ) ⊤ ) \frac{\partial \operatorname{vec}\left(\boldsymbol{x}^{i+1}\right)}{\partial\left(\operatorname{vec}\left(\boldsymbol{x}^{i}\right)^{\top}\right)} (vec(xi))vec(xi+1),即两式+号右边的式子。
再根据(1)式更新 i i i层的参数,并将 ∂ z ∂ x i + 1 \frac{\partial z}{\partial \boldsymbol{x}^{i+1}} xi+1z作为误差传到 i − 1 i-1 i1层。不断循环直到第1层,完成一个mini-batch的参数更新。

在这里插入图片描述

魏秀参《解析卷积神经网络——深度学习实践手册》

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
深度学习中最常用的神经网络模型是多层感知机(Multilayer Perceptron,简称 MLP)和卷积神经网络(Convolutional Neural Network,简称 CNN),还有循环神经网络(Recurrent Neural Network,简称 RNN)等。 多层感知机是一种前馈神经网络,由输入层、若干个隐藏层和输出层组成。每个神经元都与上一层的所有神经元连接,并通过激活函数对输入信号进行非线性变换。多层感知机适用于处理结构化数据,如图像分类、自然语言处理等任务。 卷积神经网络是一种专门用于处理具有网格结构数据(如图像)的神经网络。它通过卷积运算和池化操作来提取图像中的特征,并通过全连接层进行分类。卷积神经网络在图像处理领域表现出色,如图像识别、目标检测等任务。 循环神经网络是一种具有记忆功能的神经网络模型,能够处理序列数据。它通过在网络中引入循环连接来传递信息,并可以捕捉到序列中的时序信息。循环神经网络在自然语言处理、语音识别等任务中广泛应用。 除了上述模型,还有一些衍生模型和改进算法,如长短期记忆网络(Long Short-Term Memory,简称 LSTM)、门控循环单元(Gated Recurrent Unit,简称 GRU)等,它们在解决特定问题上具有更好的效果。深度学习中的神经网络模型非常丰富多样,选择合适的模型取决于具体的任务和数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值