感知机:
感知机是作为神经网络( 深度学习)的起源的算法。因此,学习感知机的构造也就是学习通向神经网络和深度学习的一种重要思想。
感知机接收多个输入信号,输出- 一个信号。这里所说的“信号”可以想象成电流或河流那样具备“流动性”的东西。像电流流过导线,向前方输送电子- -样,感知机的信号也会形成流,向前方输送信息。
x1、x2是输入信号,y是输出信号,W1、 W2是权重,o是“神经元”或者叫节点,输入信号被送往神经元时,会被|分别乘以固定的权重,也叫加权求和,神经元会计算传送过来的信号的总和。
BP神经网络可以分为两个部分,BP和神经网络。
BP是 Back Propagation 的简写,意思是反向传播。而神经网络,听着高大上,其实就是一类相对复杂的计算网络。四个重要的概念 输入层(input) , 隐藏层 (hidden),输出层(output)和权重(weight) 。而所有的网络都可以理解为由这三层和各层之间的权重组成的网络,只是隐藏层的层数和节点数会多很多。
输入层:信息的输入端
隐藏层:信息的处理端,用于模拟一个计算的过程,
输出层:信息的输出端,也就是我们要的结果
权重:连接每层信息之间的参数。
BP算法的核心思想是:学习过程由信号的正向传播和误差的反向传播两个过程组成。
正向传播:输入层的神经元负责接受外界发来的各种信息,并将信息传递给中间层.
神经元,中间隐含层神经元负责将接收到的信息进行处理变换,根据需求处理信息,
实际应用中可将中间隐含层设置为一层或者多层隐含层结构,并通过最后一层的隐含
层将信息传递到输出层,这个过程就是BP神经网络的正向传播过程。
反向传播:当实际输出与理想输出之间的误差超过期望时,就需要进入误差的反向
传播过程。它首先从输出层开始,误差按照梯度下降的方法对各层权值进行修正,并
依次向隐含层、输入层传播。通过不断的信息正向传播和误差反向传播,各层权值会
不断进行调整,这就是神经网络的学习训练。当输出的误差减小到期望程度或者预先设定的学习迭代次数时,训练结束,BP神经网络完成学习。
如果隐含层中的神经元节点设置过少,结果可能造成神经网络的训练过程收敛变慢或者不收敛。如果隐层中节点过多,模型的预测精度会提高,但同时网络拓扑结构过大,收敛速度慢,普遍性会喊弱。
每层的节点都与下一层的每个节点有一一对应的连线,每条连线代表一个权重,这里你可以把它理解为信息传输的一条通路,但是每条路的宽度是不一样的,每条通路的宽度由该通道的参数,也就是该通路的权重来决定。
真实结果与计算结果的误差被称作 损失 loss ,
当我提前设定一个数值 50,让你来猜,我会告诉你猜的数字是高了还是低了。你每次猜的数字相当于一次信息正向传播给我的结果,而我给你的提示就是反向传播的信息,往复多次,你就可以猜到我设定的数值 50 。 这就是典型的反向传播,即根据输出的结果来反向的调整模型,只是在实际应用中的Bp网络更为复杂和数学,但是思想很类似。
一个函数是由自变量x和决定它的参数θ组成。比如 y=ax + b 中,a,b为函数的固定参数 θ ,x为自变量。那么对于任意一个函数我们可以把它写成 y = f(θ,x)的形式,这里的 θ 代表所有参数的集合[,…],x代表所有自变量的集合[,…]。而 Bp 网络的运行流程就是根据已有的 x 与 y 来不停的迭代反推出参数 θ 的过程,这一过程结合了最小二乘法与梯度下降等特殊的计算技巧
总之我们先知道,损失函数 loss 是一个关于 网络输出结果 与真实结果 y 的,具有极小值的函数 。那么我们就可以知道,如果一个网络的计算结果 与 真是结果 y 之间的损失总是很小,那么就可以说明这个网络非常的逼近真实的关系。所以我们现在的目的,就是不断地通过调整权重u,w,v(也就是网络的参数)来使网络计算的结果 尽可能的接近真实结果 y ,也就等价于是损失函数尽量变小。那么如何调整u,w,v 的大小,才能使损失函数不断地变小呢?这理又要说到一个新的概念:梯度下降法 。
梯度是一个利用求导得到的数值,可以理解为参数的变化量。从几何意义上来看,梯度代表一个损失函数增加最快的方向,反之,沿着相反的方向就可以不断地使损失逼近最小值,也就是使网络逼近真实的关系。
那么反向传播的过程就可以理解为,根据 损失loss ,来反向计算出每个参数(如 , 等)的梯度 d() ,d() …等等,再将原来的参数分别加上自己对应的梯度,就完成了一次反向传播。
线性函数没有上界,经常会造成一个节点处的数字变得很大很大,难以计算,也就无法得到一个可以用的网络。因此人们后来对节点上的数据进行了一个操作,利用sigmoid()函数来处理,使数据被限定在一定范围内。此外sigmoid函数的图像是一个非线性的曲线,因此,能够更好的逼近非线性的关系,因为绝大多数情况下,实际的关系是非线性的。sigmoid在这里被称为 激励函数 ,这是神经网络中的一个非常重要的基本概念。
sigmoid函数能够将函数限制在 0到1 的范围之内
通过一次正向传播,和一次反向传播,我们就可以将网络的参数更新一次,所谓训练网络,就是让正向传播和反向传播不断的往复进行,不断地更新网络的参数,最终使网络能够逼近真实的关系。
经验总结
- 对于一个神经网络来说,更宽更深的网络,能够学到更加复杂的特征,其能够解决的问题也就越复杂,但是其计算过程也越繁琐,参数越多,越容易出现过拟合的情况(过拟合即网络过度学习了数据的特征,将噪声也同时考虑到了网络中,造成网络只在训练集上表现良好,而无法泛化到其他数据上,因此要根据数据的实际情况来设计网络的层数,节点数,激励函数类型 以及 学习率。
- 对于一个神经网络来说,用来训练神经网络的数据集的质量,很大程度上决定了网络的预测效果。数据越丰富,神经网络越能够贴近实际关系,泛化能力越强。
- Bp神经网络是区别于传统数据处理的一种方法,其特点在于寻找数据之间的相关性,并非严格地数学关系,因此是一种有效但是并非严格地网络。对于实际问题的处理非常有用,但不能作为严谨数学计算的方法。