1.感知机
1.1 感知机模型
感知机是由美国学者Frank Rosenblatt在1957年提出来的。感知机是作为神经网络(深度学习)的起源的算法。因此,学习感知机的构造也就是学习通向神经网络和深度学习的一种重要思想。
下图就是一个接收两个输入信号的感知机的例子。
x1、 x2是输入信号,y是输出信号, w1、 w2是权重(w是weight的首字母)。图中的⚪称为“神经元”或者“节点”。输入信号被送往神经元时,会被分别乘以固定的权重(w1x1\ w2x2)。感知机的多个输入信号都有各自固有的权重,这些权重发挥着控制各个信号的重要性的作用。也就是说,权重越大,对应该权重的信号的重要性就越高。
感知机是一种二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,+1代表正类,-1代表负类。感知机属于判别模型,它的目标是要将输入实例通过分离超平面将正负二类分离。
1.2 单层感知机和线性不可分问题
感知机模型是美国学者罗森勃拉特(Frank Rosenblatt)为研究大脑的存储、学习和认知过程而提出的一类具有自学习能力的神经网络模型,它把神经网络的研究从纯理论探讨引向了从工程上的实现。
Rosenblatt提出的感知机模型是一个只有单层计算单元的前向神经网络,称为单层感知机。上图的模型就是一个单层的感知机。
线性不可分问题:单层感知器不能表达的问题被称为线性不可分问题。 1969年,明斯基证明了“异或”问题是线性不可分问题。即感知机无法为其划分一个线性分割面使得两值被完全正确分开。.
1.3 多层感知机(MLP)
在输入和输出层间加一或多层隐单元(隐藏层),构成多层感知机(多层前馈神经网络)。加一层隐节点(单元)为三层网络,可解决异或(XOR)问题由输入得到两个隐节点、一个输出层节点的输出,如下图所示。
其中函数f称为激活函数,通常使用常用的sigmoid函数、tanh或relu函数,这个函数的加入可以给神经元引入非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以利用到更多的非线性模型中。不使用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
其中sigmod 函数为:
Tanh 函数为:
三层感知器可识别任一凸多边形或无界的凸区域。更多层感知器网络,可识别更为复杂的图形。多层感知器网络,有如下定理:
定理1:若隐层节点(单元)可任意设置,用三层阈值节点的网络,可以实现任意的二值逻辑函数。
定理2:若隐层节点(单元)可任意设置,用三层S型非线性特性节点的网络,可以一致逼近紧集上的连续函数或按 范数逼近紧集上的平方可积函数。
2.BP神经网络
2.1 多层前馈网络
多层前馈网络,由多层神经网络构成,每层网络将输出传递给下一层网络。神经元间的权值连接仅出现在相邻层之间,不出现在其他位置。如果每一个神经元都连接到上一层的所有神经元(除输入层外),则成为全连接网络。下面讨论的都是此类网络。
2.2 BP神经网络
多层前馈网络的反向传播(BP)学习算法,简称BP算法,是有导师的学习,它是梯度下降法在多层前馈网中的应用。网络结构:见图,u(或x)、y是网络的输入、输出向量,神经元用节点表示,网络由输入层、隐层和输出层节点组成,隐层可一层,也可多层(图中是单隐层),前层至后层节点通过权联接。
其主要的特点是:信号是正向传播的,而误差是反向传播的。
举一个例子,某厂商生产一种产品,投放到市场之后得到了消费者的反馈,根据消费者的反馈,厂商对产品进一步升级,优化,一直循环往复,直到实现最终目的——生产出让消费者更满意的产品。产品投放就是“信号前向传播”,消费者的反馈就是“误差反向传播”。这就是BP神经网络的核心。
2.2.1 前向传播过程
正向传播就是让信息从输入层进入网络,依次经过每一层的计算,得到最终输出层结果的过程。在上面的网络中,我们的计算过程比较直接,用每一层的数值乘以对应的权重+偏置变量(激活函数)
从输入层到隐藏层:
从隐藏层到输出层:
以y1举例。y1里的输出自然有来自b1,b2,...bq的。那么分别按照权重去乘就可以了。类似的我们可以求解出y2——yl
因为参数是随机的,所以第一次计算出的结果跟真实的结果会有一个非常大的误差,所以我们需要根据误差去调整参数,让参数可以更好的去拟合,直到误差达到最小值,这时就需要模型的反向传播。
2.2.2 反向传播过程
基本思想就是通过计算输出层与期望值之间的误差来调整网络参数,从而使得误差变小。计算误差公式如下:(差值的平方)
以下是调整权重的大小,使损失函数不断地变小的常用方法:
- 梯度下降法:从几何意义讲,梯度矩阵代表了函数增加最快的方向,因此,沿着与之相反的方向就可以更快找到最小值
- sgd:在梯度下降法基础上,sgd对单个训练样本进行参数更新,加快收敛速率。
- adam:在梯度下降法基础上,通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率,加快收敛速率
- lbfgs:sgd,Adam等都是在一阶法(梯度下降法)的基础上进行改进,加快收敛速率。而lbfgs在二阶泰勒展开式进行局部近似平均损失的基础上进行改进的,以降低了迭代过程中的存储量,加快收收敛速率。
权重反向更新:
称为学习率,可以调整更新的步伐,合适的学习率能够使目标函数在合适的时间内收敛到局部最小值。
学习率设置太小,结果收敛非常缓慢;学习率设置太大,结果在最优值附近徘徊,难以收敛,一般选取为0.01−0.8
至此,我们完成了一次神经网络的训练过程,通过不断的使用所有数据记录进行训练,从而得到一个分类模型。不断地迭代,不可能无休止的下去,总归有个终止条件。
- 设置最大迭代次数,比如使用数据集迭代100次后停止训练
- 计算训练集在网络上的预测准确率,达到一定门限值后停止训练
资料引用链接:
-
https://blog.csdn.net/Insincerity/article/details/106446689
-
【李沐】动手学深度学习 学习笔记_pytorch/chapter_preliminaries/calculus.ipynb-CSDN博客
-
工大屈老师课件