BP神经网络,误差反向传播

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hpyMiss/article/details/83148999

皮一下

“我是谁,我在哪,我要去那?”,自我哔哔下,项目已经开始大半年了,上级一味追求效果,怎么办呢,凉拌吧。虽然用过caffe,用过tensorflow,用过mtcnn、knn、dnn、svm、yolo、ssd、s3fd、faceboxes,但还是个AI小白,神经网络对于我来说就是个典型的黑盒子,想研究一下,不知从哪开始,听说BP算法具有划时代的意义----机器学习跨入深度学习的关键。好奇的小猴子觉得在水帘洞闭关了解了解。

BP核心思想

信号正向传播,误差反向传播

神经元

  1. 生物学大脑结构 ,一个个神经元组成,神经元的作用高中就学过,大概就是输入一个信号,对这个信号进行处理,然后输出将会带来全新的写作体验

  2. 神经元的结构以及干嘛用的 看图说话;在这里插入图片描述
    在这里插入图片描述
    式子比较简单,图形结合一看秒懂,这样一看神经元不就是数学里的一条线么,此时它其实就是个二分类器。所以在线性可分场景,它就是分类器。给个好玩的传送门
    在这里插入图片描述

激活函数:

比较常见的激活函数:sigmoid、Relu、Tanh、softmax
1.sigmoid在这里插入图片描述
用于神经元的输出,范围[0-1],输出结果是属于哪一类的可能性,比如属于正类0.9,负类0.1
缺点

说是激活函数计算量大,反向传播求误差梯度时,很容易出现梯度消失,导致无法完成深层网络的训练(达到饱和)

问题来了,为什么会出现梯度消失呢?
原因是反向传播要对激活函数求导,求导之后它的函数图像:
在这里插入图片描述
由图可看出,很容易无限趋近于0,具有这种性质的激活函数称之为软饱和激活函数,

sigmoid的软饱和性,使得深度神经网络在二三十年里一直难以有效的训练,是阻碍神经网络发展的重要原因。具体来说,由于在后向传递过程中,sigmoid向下传导的梯度包含了一个
因子(sigmoid关于输入的导数),因此一旦输入落入饱和区,的导数就会变得接近于0,导致了向底层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失。一般来说,
sigmoid 网络在 5 层之内就会产生梯度消失现象

  1. 常用激活函数比较(一定要点击传送门
    3.神经网络中的激活函数的作用和选择 (一定要点击传送门

神经网络的结构

1.经过上面的介绍,单个神经元不足以让人心动,唯有组成网络。神经网络是一种分层结构,一般由输入曾,隐藏层,输出层组成。所以神经网络至少有3层,隐藏层多于1,总层数大于3的就是我们所说的深度学习了。

输入层:就是接收原始数据,然后往隐层送 输出层:神经网络的决策输出
隐藏层:该层可以说是神经网络的关键,相当于对数据做一次特征提取。隐藏层的意义,是把前一层的向量变成新的向量。就是坐标变换,说人话就是把数据做平移,旋转,伸缩,扭曲,让数据变得线性可分。可能这个不那么好理解,举个栗子:
下面的图左侧是原始数据,中间很多绿点,外围是很多红点,如果你是神经网络,你会怎么做呢?

一种做法:把左图的平面看成一块布,把它缝合成一个闭合的包包(相当于数据变换到了一个3维坐标空间),然后把有绿色点的部分撸到顶部(伸缩和扭曲),然后外围的红色点自然在另一端了,要是姿势还不够帅,就挪挪位置(平移)。这时候干脆利落的砍一刀,绿点红点就彻底区分开了。

重要的东西再说一遍:神经网络换着坐标空间玩数据,根据需要,可降维,可升维,可大,可小,可圆可扁,就是这么“无敌”在这里插入图片描述

2.正反向传播理解
在这里插入图片描述
不同的应用场景,神经网络的结构要有针对性的设计,这里仅仅是为了推导算法和计算方便才采用这个简单的结构

我们以战士打靶,目标是训练战士能命中靶心成为神枪手作为场景:

那么我们手里有这样一些数据:一堆枪摆放的位置(x,y),以及射击结果,命中靶心和不命中靶心。

我们的目标是:训练出一个神经网络模型,输入一个点的坐标(射击姿势),它就告诉你这个点是什么结果(是否命中)。

我们的方法是:训练一个能根据误差不断自我调整的模型,训练模型的步骤是:

正向传播:把点的坐标数据输入神经网络,然后开始一层一层的传播下去,直到输出层输出结果。
反向传播(BP):就好比战士去靶场打靶,枪的摆放位置(输入),和靶心(期望的输出)是已知。战士(神经网络)一开始的时候是这样做的,随便开一枪(w,b参数初始化称随机值),观察结果(这时候相当于进行了一次正向传播)。然后发现,偏离靶心左边,应该往右点儿打。所以战士开始根据偏离靶心的距离(误差,也称损失)调整了射击方向往右一点(这时,完成了一次反向传播)
当完成了一次正反向传播,也就完成了一次神经网络的训练迭代,反复调整射击角度(反复迭代),误差越来越小,战士打得越来越准,神枪手模型也就诞生了。

猜你喜欢

转载自blog.csdn.net/hpyMiss/article/details/83148999