三、梯度下降与反向传播(含过程推导及证明)
来源:互联网 发布:unity3d 5.3.2f1 破解 编辑:程序博客网 时间:2024/06/09 17:31
本博客主要内容为图书《神经网络与深度学习》和National Taiwan University (NTU)林轩田老师的《Machine Learning》的学习笔记,因此在全文中对它们多次引用。初出茅庐,学艺不精,有不足之处还望大家不吝赐教。
1 代价函数
用
公式里面的
在这里我们不增大正确输出的数量,而是去最小化一个像平方代价类似的间接评估,其主要目的在于提高分类器的准确率。 因为在神经网络中,被正确分类的图像的数量关于权重、偏置的函数并不是一 个平滑的函数。大多数情况下,对权重和偏置做出的微小变动并不会影响被正确分类的图像的数量,这会导致我们很难去刻画如何去优化权重和偏置才能得到更好的结果。一个类似平 方代价的平滑代价函数能够更好地指导我们如何去改变权重和偏置来达到更好的效果。
定义完代价函数后我们需要做的就是通过某一种算法调整函数的权重和偏置使得代价函数尽可能的小,因此下面介绍两种常用的方法。
2 参数更新方法
2.1 梯度下降方法
取目标函数
在介绍梯度下降法的时候,首先忽略神经网络的结构,假设其为具有很多变量的函数,而我们的目的就是求解出这样的函数的最小值。当对自变量做较小的改变的时候
其中
因此保证
为了使我们的梯度下降法能够正确地工作,我们需要选择足够小的学习速率
在神经网络中使用梯度下降法去寻找权重
2.2 随机梯度下降法
根据
对
为了计算梯度,需要为每个样本
随机梯度下降通过随机选取⼩量的m个训练数据,并将它们标记为
因此可以采用随机梯度估计整体的梯度。假设
其中两个求和符号是在当前⼩批量数据中的所有训练样本
在⽅程
3. 反向传播算法
在上一节中我们学习了神经网络是如何利用梯度下降算法来学习权重(weights)和偏置 (biases)的,在这一节将介绍一个快速计算梯度的算法,即反向传播算法(backpropagation)。
3.1 损失函数的两个假设
为了使反向传播工作,需要对代价函数的结构做两个主要假设。
- 第一条假设
代价函数能够被写成C=1n∑xCx 的形式,其中Cx 是每个独立训练样本 的代价函数。
原因:反向传播实际上是对单个训练数据计算偏导数∂Cx∂w 和∂Cx∂b 。然后通过对所有训练样本求平均值获得∂C∂w 和∂C∂b 。 - 第二条假设
它可以写成关于神经网络输出结果的函数,或者理解成写成关于参数w 和b 的参数。
3.2 BP算法的总体思路
再利用梯度下降法求梯度时,根据损失函数的第一条假设,先只对目标函数
由此可以看出,只需要对计算出每一个数据的导数再相加就可以了,因此在求解的过程中只考虑其中的一项。根据链式法则可以知道
考虑第一项
图1. 输入值与导数之间的关系
由此我们可以看到某一个加权输入
考虑第二项
考虑最后一项
图2. 链式法则求解
从图2可以看出
图3. 反向传播计算示意图
因此可以首先求出最后一层的
3.3 前向传播
在上一小节中已经得出结论,如果想求出
注意这里的求和只是针对第
前向传播是一种基于矩阵的快速计算神经网络输出的方法。为了实现这个目的,我们在图4 的神经网络中定义了这些矩阵及向量。
图4.神经网络结构示意图
- 权重矩阵
w l
权重矩阵w l 的每一项就是连接到第l 层神经元的权重,即w l 中第j 行第k 列的元素就是w ljk 。因此权重矩阵w l 的行数是第l 层神经元的个数,列数是第l−1 层神经元的个数(这个是十分重要的,因为在后期的编程中会用到这个知识点)。 - 偏移向量
b l
偏移向量b l 的每一项对应第l 层中的一个神经元b lj 的值。 - 激活向量
a l
激活向量a l 的每一项对应第l 层中的一个神经元a lj 的值。
通过上述对于矩阵及向量的定义可以将每一层的激活函数值表示为如下的形式
我们仅仅将权重矩阵作用于上一层的激活值,然后加上偏置向量,最后用 函数作用于这个结果,就得到了本层的激活函数值。(注意在计算的也要存储
3.4 反向传播
3.4.1 Hadamard积(s⨀t )
假设
这种对应元素相乘有时被称为Hadamard积(Hadamard product)或Schur积(Schur product)。我们将称它为Hadamard积。优秀的矩阵库通常会提供Hadamard积的快速实现, 这在实现反向传播时将会有用。
Hadamard积所实现的功能同样可以通过矩阵相乘得到。讲左侧的向量
但是这种矩阵表示的方法在数值计算的过程中明显慢于Hadamard积,因此后文均采用Hadamard积的形式。
3.4.2 反向传播算法中的四个基本等式
通过上述的分析,梯度的求解可以归结为以下四个基本等式
δL=∇aC⨀σ′(zL)
证明:取输出层的某一个神经元aLj 为例,应用链式法则可以得到如下的形式δLj=∂C∂zLj=∑k∂aLk∂zLj∂C∂aLk(14)
因为在应用链式法则的过程中考虑到所有可能影响到C 的路径,因此这里的求和是对于输出层的所有神经元k 而言的。但是通过分析我们可以知道,对于第一项∂aLk∂zLj 只有当j=k 的时候才能取到非零值,因此上式可以化简为如下的形式δLj=∂aLj∂zLj∂C∂aLj(15)
其中取σ′(zLj)=∂aLj∂zLj ,即可得到δLj=∂C∂aLjσ′(zLj)(16)
如果将输出层的所有神经元写成向量的形式,将[∂C∂aL1,…,∂C∂aL1]T 记为∇aC ,则可以得到上述的形式。δ l=((w l+1)Tδ l+1)⨀σ′(z l)
证明:应用链式法则可以得到δlj=∂C∂zlj=∑k∂C∂zl+1k∂zl+1k∂zlj=∑k∂zl+1k∂zljδl+1j(17)
为了计算最后一行将zk+1 展开可得zl+1k=∑jwl+1kjalj+bl+1k=∑jwl+1kjσ(zlj)+bl+1k(18)
在此应该注意的是wl+1kj 下标,根据下标可以知道在这里第l 层神经元具有的神经元的个数是j 个,而第l+1 层神经元具有的神经元的个数是k 个。对上式进行求导可得∂zl+1k∂zlj=wl+1kjσ′(zlj)(19)
带回到式(17) 可以得到δkj=∑kwl+1kjδl+1kσ′(zlj)(20)
将上述的表达式写成矩阵的形式为δkj=[wl+11j,…,wl+1kj]⎡⎣⎢⎢δl+11…δl+1k⎤⎦⎥⎥σ′(zlj)(21)
在上面的表达式中w 与δ 所代表的矩阵的维数分别是1×k 和k×1 ,但是由wl+1kj 构成的矩阵wl+1 的维数是k×j 的,因此在用矩阵表示时候需要对wl+1 进行转置,即如下所示δ l=((w l+1)Tδ l+1)⨀σ′(z l)(22) ∂C∂blj=δj l
证明:∂C∂blj=∂C∂zlj∂zlj∂blj=δj l ∂C∂wjkl=al−1kδlj
证明:∂C∂wjkl=∂C∂zlj∂zlj∂wjkl=δj lal−1k
分析上面的四个基本等式可以得到两条明显的结论
- 结论1
如果输入神经元是低激活量的,或者输出神经元已经饱和 (高激活量或低激活量),那么权重就会学习得缓慢。 - 结论2
这四个基本的等式在使用任何激活函数的情况下都是成立的,不仅仅是标准的sigmoid函数,这是因为证明的过程并没有使用sigmoid函数的属性。所以我们可以利用这些等式来设计激活函数,使这些函数具有特殊目的的学习特性。
3.5 反向传播算法整体描述
反向传播等式为我们提供了一个计算代价函数梯度的方法,如图5所示,计算某一层神经网络的梯度可以通过分别求前向传播与反向传播值相乘得到最后的结果。
图5. 反向传播算法整体描述
具体分为以下5个步骤
- 1. 输入
x
计算输入层相应的激活函数值a1 。 - 2. 正向传播
对每个l=2,3,...,L ,计算zl=wlal−1+bl 和al=σ(zl) 。 - 3. 输出误差
δL
计算向量δL=∇aC⨀σ′(zL) - 4. 将误差反向传播
对每个l=L−1,L−2,...,2 计算δ l=((w l+1)Tδ l+1)⨀σ′(z l) - 5. 输出
代价函数的梯度为∂C∂wjkl=al−1kδlj 和∂C∂blj=δj l
3.6 BP算法在随机梯度下降中的应用
- 1. 输入一组训练样本
- 2. 对每个训练样本
x ,相应的输入激活值记为ax,l 并执行以下步骤:
2.1 正向传播:对每个l=2,3,...,L ,计算z x,l=w lax,l−1+b l 和a x,l=σ(zx,l)
2.2 输出误差δ x,L :计算向量δ x,L=∇aC⨀σ′(z x,L)
2.3 将误差反向传播:对每个l=L−1,L−2,...,2 计算δ x,l=((w l+1)Tδ x,l+1)⨀σ‘(z x,l) - 3. 梯度下降:对每个
l=L−1,L−2,...,2 分别根据法则w l→w l−ηm∑xax,l−1kδx,lj 和b l→b l−ηm∑xδx,lj 更新权重和偏移值,其中的m 是一个mini-batch中样本的个数。
3.7 BP算法的优缺点
- 优点
反向传播的优点在于它仅利用一次前向传播就可以同时计算出所有的偏导∂C∂wj ,随后也仅需要一次反向传播。 - 缺点
在80年代后期,人们终于 触及到了性能瓶颈,在利用反向传播算法来训练深度神经网络(即具有很多隐含层的网络)时尤为明显。
- 三、梯度下降与反向传播(含过程推导及证明)
- 激活函数、BP反向传播算法、三种梯度下降、softmax函数及其推导
- 神经网络之梯度下降与反向传播(上)
- 神经网络之梯度下降与反向传播(下)
- 梯度下降与反向传播详解
- 梯度下降法与反向传播
- 梯度下降法与反向传播
- 梯度下降法和误差反向传播推导
- BP神经网络,BP推导过程,反向传播算法,误差反向传播,梯度下降,权值阈值更新推导,隐含层权重更新公式
- 梯度下降和反向传播
- 反向传播算法(过程及公式推导)
- 反向传播算法(过程及公式推导)
- 反向传播算法(过程及公式推导)
- 反向传播算法(过程及公式推导)
- 反向传播算法(过程及公式推导)
- 反向传播算法(过程及公式推导)
- Python神经网络代码实现流程(三):反向传播与梯度下降
- 前馈神经网络与反向传播算法(推导过程)
- 一级页面向二级页面传参,二级页面根据一级页面参数筛选数据渲染页面
- JQuery之DOM函数CSS样式学习总结
- 论文阅读:BoVW-MI:TASK DRIVEN DICTIONARY LEARNING BASED ON MUTUAL INFORMATION FOR MEDICAL IMAGE CLASSIFIC
- flex的应用
- 初入前端,学习进程
- 三、梯度下降与反向传播(含过程推导及证明)
- Numpy(四)
- display: none;与visibility: hidden;的区别
- [codeforces830D]Singer House
- Ubuntu 16.04 LTS安装sogou输入法详解
- oracle列转行,分割逗号,成一个张表
- 面试题2:实现Singleton模式
- BOOST库 之 lexical_cast类型转换
- linux系统排错