用感知器对样本分类的matlab程序_神经网络(多层感知器)信用卡欺诈检测(一)...

最近在学习深度学习内容,因此想根据学习进度更新文章,以此巩固学到的知识。多为个人理解,如有错误希望指正。

人工神经网络表示一类机器学习的模型,最初是受到了哺乳动物中央神经系统研究的启发。网络由相互连接的分层组织的神经元组成,这些神经元在受到一定程度上的刺激后就会互相交换信息(激发,fire)

1.感知器。

感知器又称感知机、神经元,是神经网络的组成单元,感知器非常简单,下面看感知器的示意图。

bb2b5c8104a65582b73f2ec6b3836c9c.png
  • 输入,其中,x1,x2,...,xn为特征值,另外还有一个偏移量b,偏移量默认为1。
  • 权值,分别对应各个输入。
  • 求和,即输入乘以权值,再进行累加。
  • 激活函数,求和之后,将求得的结果置入激活函数以获取输出。如果激活函数为f(),那么有 y=f(wx+b)。

以上即为感知器的原理。下面设计一个感知器来实现逻辑与(and)的运算(手算)来帮助大家理解感知器。

ff1613274b14cbd602d5e4f6692b8036.png

讲感知器之前要先定义一下激活函数,这里因为标签是二分类,因此激活函数可以采用阶跃函数。阶跃函数:if x>0,return 1;else return 0 。另外定义一下学习率r,学习率是控制感知器学习速率的一个常数,本例中r=0.1。

之前讲过,输入层除了x以外还有一个偏移量,因此上图变为。

8489c0a4cac7217827eaab8856865153.png

权值初始化,w0=(0,0,0)。

第一次迭代:第一条数据乘以权值序列(点乘),再经过激活函数,输出。即:(1,1,1)*(0,0,0)=1*0+1*0+1*0=0;激活 f(0)=0。由于原标签为1,而我们的输出为0,因此需要调整权重,调整的步幅为r*(label-output)*(1,1,1)=0.1 * 1*(1,1,1)=(0.1,0.1,0.1),将其命名为Δ,因此得到新的权重w1=Δ+w0=(0.1,0.1,0.1)。

第二次迭代:第二条数据乘以权值,blabla。即(0,0,1)*(0.1,0.1,0.1)=0.1;f(0.1)=1,而原标签为0,因此Δ=0.1*(-1)*(0,0,1)=(0,0,-0.1)。w2=Δ+w1=(0.1,0.1,0)。

接下来跳过计算阶段直接给出更新后的权值。

第三次迭代:w3=(0,0.1,-0.1)。

第四次迭代:w4=(0,0.1,-0.1)。

第五次:w5=(0.1,0.2,0)。

第六次:w6=(0.1,0.2,0)。

第七次:w7=(0,0.2,-0.1)。

第八次:w8=(0,0.1,-0.2)。

第九次:w9=(0.1,0.2,-0.1)。

第十次:w10=(0.1,0.2,-0.1)。

第十一次:w11=(0.1,0.2,-0.1)。

第十二次:w12=(0.1,0.1,-0.2)。

第十三次:w13=(0.2,0.2,-0.1)。

第十四次:w14=(0.2,0.2,-0.1)。

第十五次:w15=(0.1,0.2,-0.2)。

第十六次:w16=(0.1,0.2,-0.2)。

第十七次:w17=(0.1,0.2,-0.2)。

...

最后权值稳定在了(0.1,0.2,-0.2),不再更新,说明我们想要的结果已经出来了。

在这个过程中我们可以看到,感知器不断调整权值,而且是有方向的调整,调整步幅为误差和学习率的积,依赖于自身的输入值,最后达到稳定状态。

感知器局限性在于无法解决线性不可分的问题,典型的例子就是异或的问题,在此不表。

当没有激活函数的时候,返回的是实数值,因此在多层感知器求回归问题的时候,最后一层神经元(输出层)通常是不设激活函数的。

2.多层感知器。

多层感知器和感知器类似,区别在于多层感知器有若干隐藏层。如图:

c1611b23cbda60d82bddfd2d3999ed7e.png

由于存在多次的权值乘输入的操作,多层感知器理论上可以逼近任意非线性函数。

3.损失函数

损失函数又叫目标函数,是我们的模型训练的依据,模型会通过迭代去降低损失。对于回归来说,通常以均方误差(MSE)或者是平均绝对误差(MAE)为损失函数,两者都是表示预测值与真实值之间的误差,只不过MSE是误差平方和而MAE是绝对值之和。

对于分类标签,通常以二分对数损失(Binary cross-entropy,适用于二分类标签预测)和多分类对数损失(Categorical cross-entropy,适用于多分类标签预测)。

4.评估指标

评估指标和损失函数类似,但是评估指标不用于模型训练,而是用于评估模型。评估指标用于验证集上,而损失函数用于测试集。

常见评估指标MSE ,MAE,Accuracy,Precision,Recall。前两个用于回归预测,后面的用于分类预测。

5.优化器

接损失函数,损失函数的目的是在训练过程中找到最合适的一组权值序列,也就是让损失函数降到尽可能低。最普通的优化:穷举法,对各个可能的权值遍历,找寻使损失最小的一组,但是这种方法会陷入嵌套循环里,使得运行速率大打折扣,于是就有了优化器。优化器的目的使快速找到最优解。主要讲梯度下降。

8e7ccaf7c50c37f206c8a581a29c7162.png

我们要寻找损失函数的最小值,首先一定有一个初始的权值,伴随一个计算得出来的损失,假如上图最高点就是最开始的损失值。那么我们要想到损失函数最低点,要考虑两点:往哪个方向前进;前进多少距离。因为我们想让损失值下降得最快,肯定是要找当前损失值在损失函数的切线方向,这样走最快。如果是在三维的损失函数上面,则更加明显,三维平面上的点做切线会产生无数个方向,而梯度就是函数在某个点无数个变化的方向中变化最快的那个方向,也就是斜率最大的那个方向。梯度是有方向的,负梯度方向就是下降最快的方向。在上图中,只用考虑一条切线。

那么梯度下降是怎么运行的呢,刚才我们找到了逆梯度方向来作为我们前进的方向,接下来只需要解决走多远的问题。引入学习率,我们要走的距离就是梯度的大小*学习率。因为越优化梯度会越小,因此移动的距离也会越来越短,如上图所示。学习率的设置不能太大,否则可能会跳过最低点而导致梯度爆炸或者梯度消失;也不能设置太小,否则梯度下降可能十分缓慢。感兴趣的可以访问下面的链接来观察梯度下降的不同学习率的变化。

https://devolopers.google.com/machine-learning/crash-course/fitter/graph​devolopers.google.com

常用的优化器:

  • SGD :随机梯度下降。随机取训练集的一部分样本进行梯度计算,这样做会损失一部分精度,但是也减少了迭代次数。
  • RMSprop。结合梯度平方的指数移动平均数来调节学习率的变化,能够在不稳定的目标函数下进行比较好地收敛。
  • Adam。

SGD具有加速度分量,而RMSprop和Adam不仅具有加速度分量,还拥有动量的概念(速度分量),这样可以通过更多的计算代价实现更快的收敛。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值