1线性分类与感知机模型
本节将重心放在感知机模型上,谈谈感知机模型的推理过程以及其存在的问题:
1.1线性回归
定义:利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
线性回归要素:(1) 训练集x;(2) 输出数据y;(3) 拟合的函数(模型);(4) 输入数据的个数(batch size)
线性回归学习过程:为了估计所需要预测的函数,首先需要构造出这类函数的数学表达式。
需要预测的函数为:
接下来进行线性回归过程:
(1) 假设给定样本
(2) 构造代价(误差、损失)函数:
(3) 目标:找到超平面参数θ,使J(θ)最小;
(4) 求解:∂J(θ)/∂θ=0,即可得到θ
1.2线性分类
定义:线性分类器则透过特征的线性组合来做出分类决定,以达到此种目的。简言之,样本通过直线(或超平面)可分。如下图就是一个二分类的例子:
线性二分类的主要思路是如何构造划分两类的“分界直线”,同时,由于需要两类输出的概率,所以需要将两类输出结果量化之0-1之间,此时采用Sigmoid函数。(softmax是否也可?)
线性分类过程:大致求解流程与线性回归相似。
(1) 假设给定样本,这里只能取值为0,1;
(2) 构造代价(误差、损失)函数(MSE()):
(3) 目标:找到超平面参数使最小;
1.3 对数回归与多分类回归
指数回归:
多分类回归:
(1) 分类函数:
(2) 代价函数:
(3) 梯度:
1.4 MP模型
首先给出最简单的神经元MP模型如下:
神经元MP模型用于模仿神经元工作,但是由于人们对神经元的了解并不深入,所以这种模型只是一种简单假设:
可以看到这个模型可以表示为:
接下来详述感知器算法如下:
可以用机器学习的算法得到上述MP模型的w以及偏置b;
这个方法即为感知器算法:输入(Xi,yi),i=1~N,其中Xi为训练数据,yi=+-1;我们的任务是找到一个向量w和一个常数b,使得:
yi=1则W⊤Xi+b>0
yi=-1则W⊤Xi+b<0
某个训练数据Xi满足上述条件则就说它获得了平衡。感知器算法给出了另一种不同于SVM寻找w与b的方法:
随机选则w和b;
取一个训练样本(X,y);
(i)若W⊤X+b>0且y=-1则w赋值为w=w-x,b=b-1(这一步最后会让计算结果比原来最少小了1,也就是W⊤X+b越来越小,最终会小于0,也就是达到上述的(2) yi=-1则W⊤Xi+b<0要求)
(ii)若W⊤X+b<0且y=+1则w赋值为w=w+x,b=b+1(与上一步类似)
再取一个训练样本(X,y)回到(2);
终止条件:直到所有输入输出对(X,y)都不满足(2)中的(i)与(ii)中的之一,退出循环。
到这里我们可能会思考,那么会不会有某一步,在进行(2)步骤时,会让某个输入值变得不满足上述条件,从而让循环最终不能够停下来?接下来我们就这个问题进行证明,说明只要数据线性可分,那么感知器算法最终一定可以停下来。
首先我们定义对于某个训练数据Xi,我们定义它的增广向量如下:
若yi=+1;则xi=[xi1]
若yi=-1;则xi=[-xi-1]
定义这个增广向量维度,可以简化我们的表达,我们对原任务进行修改:寻找W=[Wb]使得对i=1…N有WTXi>0
接下来给出基于增广向量的感知器算法:
Input:x1,x2,⋯,xN Output:w
Return w; |
感知器算法于1957年提出,精度并没有1995年左右的SVM高。但是它给出了机器学习的框架:
一个系统输入为X,输出为Y,f(X,Θ)是机器学习模型,其中的Θ是待学习的参数。我们的目的是寻找预测函数y=f(x,Θ),达到目的的过程是运用数据集(Xi,yi)来求解出Θ。最终的结果是用函数y=f(x,Θ)对之后的输入量可以直接进行预测。那么对于感知器算法,我们的待估计量就是Θ=(W,b),而机器学习模型就是:f(X,θ)=sgn(WTX+b)。这个算法框架包含了所有分类问题。我们对待机器学习模型函数f,要求其不能过拟合也不能欠拟合,欠拟合就是函数过于简单,在训练数据和预测数据上表现的都比较差。过拟合就是函数过于复杂,一般会在训练数据上表现极为精确,但是在预测数据上表现较差。一般情况下我们要设计函数的复杂程度和训练数据相适应才行。
由于感知器算法只能解决线性可分问题,对于一笔画等线性不可分问题就无能为力,所以在此之后感知器算法没有得到大面积关注,直到后来多层神经网络的出现。
在学习非线性作用函数(激活函数)阶段,我们学习了对称以及非对称的sigmoid函数以及对称的阶跃函数,另外我们知道还有很重要的tanh函数和ReLU函数也是经常使用,在ANN中我们经常利用一层全连接后接一层tanh再后面一层全连接后再接一层ReLU的形式,相比之下sigmoid利用率反而较低。
2多层前馈网络与误差反传算法
本节将重心放在forward和backward函数的数学原理上,我们学习torch时就知道我们在定义一个神经网络的类时,往往会自己定义forward,backward会自动生成,不需要自己定义。那么这两个重要的类函数的数学原理如何理解?本节将重点阐述这部分内容:
已知BP学习算法由正向传播和反向传播组成:
① 正向传播是输入信号从输入层经隐层,传向输出层,若输出层得到了期望的输出,则学习算法结束;否则,转至反向传播。
② 反向传播是将误差(样本输出与网络输出之差)按原联接通路反向计算,由梯度下降法调整各层节点的权值和阈值,使误差减小。
BP算法的基本思想:
step1:设置初始权系数w0为较小的随机非零值;
step2:给定输入/输出样本对,计算网络输出, 完成前向传播;
step3:计算目标函数J如J<ε,训练成功,退出;否则转入step4;
step4:反向传播计算由输出层,按梯度下降法将误差反向传播,逐层调整权值。
其中的前向传播步骤具体做法为(正向计算神经网络输出):
反向传播做法如下:
在第一次学习MLP时,我体会到后向传播较难理解,也是给出了后向传播算法的算法流程如下所示:
|
3 性能优化
虽然我们平时在进性神经网络搭建后往往选择在智能体中使用Adam优化器,但是还是有必要对最基础的SGD以及动量法等进行了解:
3.1 动量法
如果把原始的SGD想象成一个纸团在重力作用向下滚动,由于质量小受到山壁弹力的干扰大,导致来回震荡;或者在鞍点处因为质量小速度很快减为 0,导致无法离开这块平地。
动量方法相当于把纸团换成了铁球;不容易受到外力的干扰,轨迹更加稳定;同时因为在鞍点处因为惯性的作用,更有可能离开平地。
3.2 AdaGrad
参数自适应变化:具有较大偏导的参数相应有一个较大的学习率,而具有小偏导的参数则对应一个较小的学习率,具体来说,每个参数的学习率会缩放各参数反比于其历史梯度平方值总和的平方根:
3.3 RMSProp
3.4 Adam
在真正的分类问题以及强化学习智能体设置优化器时我们直接选则Adam即可