GitHub |
您所在的位置:网站首页 › bp神经网络的实现过程 › GitHub |
反向传播算法(Backpropagation Algorithm,简称BP算法)是深度学习的重要思想基础,对于初学者来说也是必须要掌握的基础知识!本文希望以一个清晰的脉络和详细的说明,来让读者彻底明白BP算法的原理和计算过程。 全文分为上下两篇,上篇主要介绍BP算法的原理(即公式的推导),介绍完原理之后,我们会将一些具体的数据带入一个简单的三层神经网络中,去完整的体验一遍BP算法的计算过程;下篇是一个项目实战,我们将带着读者一起亲手实现一个BP神经网络(不使用任何第三方的深度学习框架)来解决一个具体的问题。 1. BP算法的推导图 1 所示是一个简单的三层(两个隐藏层,一个输出层)神经网络结构,假设我们使用这个神经网络来解决二分类问题,我们给这个网络一个输入样本 为了便于理解后续的内容,我们需要先搞清楚前向传播的计算过程,以图1所示的内容为例: 输入的样本为: 第一层网络的参数为: 第二层网络的参数为: 第三层网络的参数为: 第一层隐藏层有三个神经元: 以 同理有: 假设我们选择函数 第二层隐藏层有两个神经元: 即第二层的输入是第一层的输出乘以第二层的权重,再加上第二层的偏置。因此得到和的输入分别为: 该层的输出分别为: 输出层只有一个神经元 即: 因为该网络要解决的是一个二分类问题,所以输出层的激活函数也可以使用一个Sigmoid型函数,神经网络最后的输出为: 在1.1节里,我们已经了解了数据沿着神经网络前向传播的过程,这一节我们来介绍更重要的反向传播的计算过程。假设我们使用随机梯度下降的方式来学习神经网络的参数,损失函数定义为 假设我们要对第 因此,我们只需要计算偏导数 前面说过,第k层神经元的输入为: 上式中, 我们以1.1节中的简单神经网络为例,假设我们要计算第一层隐藏层的神经元关于权重矩阵的导数,则有: 因为偏置b是一个常数项,因此偏导数的计算也很简单: 依然以第一层隐藏层的神经元为例,则有: 偏导数 根据第一节的前向计算,我们知道第 又因为 由上式我们可以看到,第 下面是基于随机梯度下降更新参数的反向传播算法: 单纯的公式推导看起来有些枯燥,下面我们将实际的数据带入图1所示的神经网络中,完整的计算一遍。 2. 图解BP算法我们依然使用如图5所示的简单的神经网络,其中所有参数的初始值如下: 输入的样本为(假设其真实类标为"1"): 第一层网络的参数为: 第二层网络的参数为: 第三层网络的参数为: 假设所有的激活函数均为Logistic函数: 为了方便求导,我们将损失函数简化为: 我们首先初始化神经网络的参数,计算第一层神经元: 上图中我们计算出了第一层隐藏层的第一个神经元的输入 接下来是第二层隐藏层的计算,首先我们计算第二层的第一个神经元的输入z₄和输出f₄(z₄): 同样方法可以计算该层的第二个神经元的输入 最后计算输出层的输入 首先计算输出层的误差项 接着计算第二层隐藏层的误差项,根据误差项的计算公式有: 最后是计算第一层隐藏层的误差项: 上一小节中我们已经计算出了每一层的误差项,现在我们要利用每一层的误差项和梯度来更新每一层的参数,权重W和偏置b的更新公式如下: 通常权重 至此,我们已经完整介绍了BP算法的原理,并使用具体的数值做了计算。在下篇中,我们将带着读者一起亲手实现一个BP神经网络(不使用任何第三方的深度学习框架)。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |