位置:首页 > PC电脑 >

AI产品:BP前馈神经网络与梯度问题

作者:四川新闻 | 发布时间:2018-12-17 16

通过上一章《神经元与神经网络》,我们大概了解了单个神经元工作模式和简单神经网络基本结构。接下来就要正式进入关于“神经网络”这个重头戏学习了,神经网络分为“浅层”和“深层”,今天我们来探讨一下“浅层学习”中最经典BP前馈神经网络,只要把它工作原理搞清楚,其实后面深度神经网络、卷积神经网络和循环神经网络都是在它基础上变体。

一. BP前馈神经网络

1. BP前馈神经网络核心理念

BP前馈神经网络英文全称为 Back Propagation Networks(反响传播网络),怎么理解这个“反响传播”呢,我们已经了解其实DL核心理念就在于找到全局性误差函数Loss符合要求,对应权值“w”与“b”,也知道数据是从神经网络输入层,进入隐含层,最后通过输出层输出工作流程。

那么问题就来了,当得到误差Loss不符合要求(即误差过大),就可以通过“反响传播”方式,把输出层得到误差反过来传到隐含层,并分配给不同神经元,以此调整每个神经元“权值”,最终调整至Loss符合要求为止,这就是“误差反响传播”核心理念

2. 从“找关系”到“求误差”

前面我们已经多次提到”y=wx+b”,现在我给这个函数加一个“e”代表误差,其他含义均不变

下面转换,别被它吓到,其实很好理解,e误差等于“真实数据y”减去“拟合值”,i代表数据个数(简单理解为1、2、3……)

接下来点更好玩(其实已经省略了一些步骤),我们一步一步来解释,Loss相信大家很熟悉了,就是所谓“全局性误差函数”,我们最终目,不就是让Loss等于“0”最好嘛,这就相当于是“现实值”与“拟合值”完全吻合,也就是找到了数据与某种特征现实“对应关系”。

前面那个怪怪图形,表示所有数据“加和”(不然海量数据是咋来呢),为什么要把误差“e”平方呢?其实是做了个“非负化”处理,这样更方便运算嘛,正负不重要,重要是“绝对值”。

最后,让我们看看我们得到了个什么东西:

请各位不要慌,它就是一个“二次函数”,简化理解它图像如下:

一切就到这里,通过上述过程转换,让Loss这个全局性误差等于“0”,不就是转换成了求得这个函数“极小值”问题了么!

理解到这一层,我想是时候对机器学习其中一个本质做个总结:我们通过对数据进行“标签化”、提取特征“向量化”,将现实客观世界“关系问题”,描述转换成数学函数中求“误差”问题,又通过函数性质转换成求“极值”问题。换句话说,找到了这个数学“解”,也就找到了现实世界“关系描述”。情不自禁感叹“数学之美”!

二. 梯度下降与梯度消失/爆炸

1. 迭代法

我们已经理解到“求极值”这一层面,但还有问题等待解决。在一个算法模型训练最开始,权值w和偏置b都是随机赋予,理论上它可能是出现在整个函数图像中任何位置,那如何让他去找到我们所要求那个值呢。

这里就要引入“迭代”思想:我们可以通过代入左右不同点去尝试,假设代入当前x左面一个点比比右面更小,那么不就可以让x变为左面点,然后继续尝试,直到找到“极小值”么。这也是为什么算法模型需要时间去不断迭代很训练原因

2. 梯度下降

使用迭代法,那么随之而来另外一个问题,这样一个一个尝试,虽然最终结果是一定会找到我们所需要值,但有没有什么方法可以让它离“极值”远时候,挪动步子更大,离“极值”近时候,挪动步子变小(防止越过极值),实现更快更准确地“收敛”

请观察上面那个“二次函数”图像,如果取得点越接近“极小值”,是不是在这个点函数“偏导”越小呢?(偏导即“在那个点函数斜率”),接下来引出下面这个方法:

梯度下降核心思想:Xn代表就是挪动“步长”,后面表示当前这个点在函数“偏导”,这样也就代表当点越接近极值点,那么“偏导”越小,所以挪动“步长”就短;反之如果离极值点很远,则下一次挪动“步长”越大。

把这个公式换到我们算法模型,就找到了“挪动步长”与Loss和(w,b)之间关系,实现快速“收敛”:

通过“迭代法”和“梯度下降法”配合,我们实现了一轮一轮地迭代,每次更新都会越来越接近极值点,直到更新值非常小或已经满足我们误差范围内,训练结束,此时得到(w,b)就是我们寻找模型。

怎么样,现在是不是开始觉得对ML本质理解越来越深入,一旦转换成数学问题,我们就有很多方法可以实现我们目标

3. 梯度消失

梯度消失,即在反响传播过程中,因为层数太多或神经元激励函数作用,导致网络前端w几乎没有变化,越往前隐含层这种情况就越严重。

解决方式:目前常用解决方式是选取合适激励函数,如把Sigmoid函数换位ReLU函数,原理在这里就不过多解释了

4. 梯度爆炸

梯度爆炸,可以理解为梯度消失“反向概念”,梯度消失本质是网络前层w权值变化太小,导致无法收敛,而梯度爆炸则是w权值一次变化量太大,这样可能会导致直接挪动越过“极值点”。

最后

到这里已经基本介绍完神经网络BP前馈基本原理,有没有觉得其实并没有想象中那么难?而深度学习中DNN(深度神经网络),如果不严格细纠话,是可以简单理解为“隐含层层数”增加,基本训练方法和工作原理也是一样通过误差反响传播,当然也做了很多优化来解决BP前馈网络“缺陷”,这个我们在后面还会讲到~

相关阅读

AI产品之路:神经元与神经网络

 

本文由 @ Free 原创发布于人人都是产品经理。未经许可,禁止转载。

题图来自unsplash,基于CC0协议