【AI数学】神经网络的反向传播BackPropagation

31 篇文章 6 订阅

BP算法是深度学习中最重要也是最基础的算法之一,也是Hinton本人的图灵奖工作之一。更重要的是,BP是深度学习岗位面试必问题之一。本文会以最容易理解的方式来介绍反向传播,避免大量公式


1. 前向传播和反向传播

前向还是反向区别在于计算顺序。我们通常把inference称为前向,因为计算顺序是从浅层到深层,一层一层地传递。而反向传播就是从深层到浅层。

先看一个二层感知机网络,如上图。每条虚线代表一个权重w,每个节点会带有一个b。在一开始会给所有权重初始化赋值,当模型没有被训练的时候也能有前向传播的输出。

每一次模型前向传播的输出y,我们会拿y和标准答案\bar{y}进行比较,就会有一个量化差异f_{_loss}

我们把这个量化差异称为损失函数,用公式f_{loss}(y, \bar{y})就可以表示。训练模型就是为了最下化输出值和标准答案的差异,即 最小化损失函数minf_{loss}(y,\bar{y})   (公式 1)

损失函数可以根据具体任务选取,比如分类任务可以使用交叉熵,超分辨率任务可以使用MSE等等。在本文中,我们不讨论损失函数的选取。咱们只需要明白,损失函数就是这一轮模型输出和标准答案(即标签)差异的量化结果


2. 梯度

事实上,方向传播中梯度的定义和咱们以前在高数里学习的梯度是有区别的。不过思想是互通的。

上节提到的“最小化损失函数”,咱在这节要将具体方法。只需要把每层参数加以“斧正”,则最后的输出就会越接近标准答案(标注值),从而损失函数值会越低。

那么参数该如何“斧正”呢?每次斧正多少呢?答:使用梯度来斧正,每次斧正的量就是一个负梯度

用公式来表示就是(w表示网络参数):{w}' \leftarrow w+\Delta w

在本来的参数值上再加一个增量值(该增量可以为负),就变为更新后的参数。所以,我们只用确定了\Delta w就直到该怎么优化网络了。当然,这也是反向传播算法的精髓。公式如下:

\Delta w_{i}=-\eta \frac{\partial f_{loss}}{\partial w_i}(公式 2)

用一句话来解释:直接通过偏导寻找参数对于损失函数的负梯度。

怎么计算偏导?

链式法则走一波,放心,本文是不会介绍链式法则的。

下图截自西瓜书:误差反向传播算法


3. 异形层反向传播

掌握第2节就可以明白Hinton老爷子最初的反向传播算法了。可是,随着神经网络的发展,咱们的网络层可不止多层感知机呀。当遇到卷积层,最大池化,平均池化,空洞卷积,反卷积,子像素卷积等等异形网络层的时候,怎么传播呢?

尤其是池化层和pixel shuffle这种并不可导的网络层。在神经网络里,我们通常可以用一个函数来建模一个网络层,如果所有的网络层都是可导函数,则我们可以通过链式法则计算任何一层的梯度完成训练。事实上,并不是所有网络层都是可导的。

有一篇关于卷积层和池化层的反向传播文章《卷积池化反向传播》,大家可以先看着。

我先留个坑,以后时间充足再来详细解析异形层的反向传播。

 

 

 

 

 

 

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木盏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值