原创:PinkFeet
一、引言
反向传播算法、随机梯度下降算法、Batch Normalization是深度学习算法的基本知识,是算法岗面试中的几乎必问的问题。但如果只能说出个大概,并没有吃透知识点,面试就会遭遇滑铁卢。所以,及时复习反向传播、随机梯度下降、Batch Normalization这三个基础知识点,才能在面试中做到不丢基础分。
二、反向传播算法
反向传播算法和前向传播的实现相辅相成。前向传播的实现相对简单,学过线性代数的知识就可以理解。
- 前向传播算法
假设输入X为N * m的矩阵,W为 的矩阵,则
为
的矩阵,
是含
个元素的向量。
![](https://img.haomeiwen.com/i27533639/069cfec72301b951.png)
- 反向传播算法
在开始复习反向传播时,假设出每个矩阵的具体元素,反向传播的原理会更加明显。
![](https://img.haomeiwen.com/i27533639/e7db2bfff4557ebb.png)
更新W:
![](https://img.haomeiwen.com/i27533639/6f031486d23d5a30.png)
更新b:
![](https://img.haomeiwen.com/i27533639/37ae67f2d5811d55.png)
损失对Z的导数:
![](https://img.haomeiwen.com/i27533639/3c93c99d9935273c.png)
损失对h的导数:
![](https://img.haomeiwen.com/i27533639/0a0ef1cee78b685a.png)
梯度更新:
![](https://img.haomeiwen.com/i27533639/35862ae097a490ab.png)
三、梯度下降法
梯度下降算法是解决损失函数最小化的问题的实现手段,反向传播算法是计算梯度的手段,主要是为了简化导数的计算,使用输出层的误差反向计算出之前层的误差。总之,梯度下降法是解决最小值问题的一种优化算法,而反向传播是梯度下降法在神经网络上的具体实现方式。
大多数机器学习算法都涉及到优化问题。优化是指在一个域中根据某个方向寻找最优解,例如,通过改变x以最小化或者最大化某个函数f(x)。常见的最优化问题通过最小化f(x)来完成,最大化f(x)则可以通过最小化-f(x)来实现。在优化过程中,需要最值化的函数被称为目标函数或准则,当我们对其进行最小化时,也常称之为代价函数、损失函数或误差函数。
假设一个损失函数形式为:
![](https://img.haomeiwen.com/i27533639/b356272e3381e6ad.png)
其中
![](https://img.haomeiwen.com/i27533639/4c1448c50f587f01.png)
要使损失函数最小,可以想到求导数并令其等于0,可以求得最值点和最值。这在低维特征前提下是可以实现的。但在许多现实场景中,多维特征不适用求导求解的方法,机器学习算法通常使用梯度下降算法进行优化。
- 梯度下降算法原理
假设大家都理解:曲面上方向导数最大值就代表了梯度的方向。我们在实现梯度下降的时候,应该沿着梯度的反方向进行权重的更新,可以有效地找到最优解。的更新过程可以描述为:
![](https://img.haomeiwen.com/i27533639/744b0dce4fcf851f.png)
最常听到的理解方法是用爬山与寻找山谷的比喻方法来解释。当θ维度为2时,J(θ)好像一片连绵起伏的山脉。我们最小化损失函数的过程,就好比寻找山谷的过程。一开始,我们在随机的位置,为了最快地到达山谷,每一步都以下降最多的方向来下山,学习率决定的是我们每一步的大小(通常,0<学习率≤1)。总之,为了找到最快下山的路,我们的每一步都要找到使J下降最陡的方向。
从数学的角度来说,以一元函数为例,梯度方向为沿着曲线的切线方向增长的方向,多元函数中,梯度向量为函数对每个变量的导数,该向量方向就是梯度方向,向量的大小就是梯度的大小。假设我们要采用梯度下降算法求函数的最小值,那么这里的x就相当于前面待更新的θ。为了使函数
最小,可求y对x的导数。结合
的图像可知,假设x的初始值小于0,那么此时导数也为小于0,根据梯度下降公式, x向x轴正方向移动,越靠近0,
值越小。高维的情况类似。
- 三种常见的具体方法
总结一下,梯度下降算法中,批量梯度下降算法、随机梯度下降算法和mini-batch梯度下降算法的各自特点:
- 梯度下降算法
在每次更新参数时,使用所有样本。理论上来说,一次更新幅度比较大,样本不多的情况下,收敛速度很快,适合使用该方法。样本很多的情况下,收敛速度很慢,不适合使用该方法。
- 随机梯度下降算法
每次更新时,使用所有样本中的一个来调整参数。这样相当于用一个样本近似了所有的样本,每次迭代得到的损失函数不一定朝着全局最优的方向,最终的结果往往在全局最优解的附近。这个优化方法缺点是往往得不到全局最优解,但优点是最终结果往往也可以接受,而且速度比批量梯度下降方法要快。因此随机梯度下降算法要比批量梯度下降算法相对使用广泛。
- Mini-batch梯度下降算法
Mini-batch梯度下降算法在每次更新时使用b个样本,是介于批量梯度下降算法和随机梯度下降算法之间的一种折中方法。当前两种梯度下降方法存在各自的问题时,折中的方法可以改善单样本更新的问题,同时减少批量样本带来的计算压力。在深度学习中,mini-batch梯度下降的方法是最常用的。
梯度下降可以收敛到的地方可能是:最小值、极小值、鞍点,这些点也是梯度为0的地方。
四、Batch Normalition
BN是常见网络中的标配,是面试中的高频问题,应该将其看作必会知识点对待,区分与数据的归一化之间的差别。
- 溯源
在神经网络的训练过程中,数据的分布会对训练产生影响。为了解决这个问题,有人对训练数据进行了标准化操作后输入网络。但随着前向传播的进行,数据分布又会产生变化,继续影响网络的训练,也就是说,数据分布变化在网络内部会不断发生。为了继续解决这个问题,就要在网络内继续进行标准化操作。
2015年,谷歌工程师们在论文 https://arxiv.org/pdf/1502.03167.pdf 中提出了Batch Normalization(以下简称BN),有效地应对了这个情况。
- 原理细节
BN中的B指批样本,是指将样本分批进行SGD。由于我们一次需要处理一批样本,所以一批样本若不进行标准化,经过激励函数后会大量饱和。但如果批样本进行了标准化,再经过激励函数后,批样本将会被有效地非线性化。所以说,在不单看一个样本的情况下,样本的分布对于激励函数来说很重要,直接影响其有效性。我们需要将样本分布调整到激励函数有效区间内,才能让数据传递更有效。因此BN非常重要。
根据上一段文字的分析可知,网络中的数据在进入激励函数之前有必要进行BN。所以在每批数据前向传播的过程中,BN层需要添加在每一个全连接和激励函数之间。
BN的原理所涉及的公式如下:
![](https://img.haomeiwen.com/i27533639/94b8a5002197fc7a.png)
其中,γ、β是可训练参数,参与整个网络的反向传播。BN层使用的均值是在一个Batch内,按通道求和除以,方差的计算类似。
BN在训练和测试时有所不同,训练时有Batch,但测试时没有。所以训练时,均值和方差分别是Batch内数据各维度的均值和方差。测试时,均值和方差是基于所有样本的期望计算所得。
网友评论