MLP综述

MLP综述MLP整体思路反向传播算法梯度下降算法

大家好,又见面了,我是你们的朋友全栈君。

   看了CSDN上介绍MLP的文章,有介绍原理,有介绍公式的,这篇文章是基于当时看很多篇别人的博整理的笔记(未标注原文出处,原文作者有意见请联系晴嫣,保证添加到参考链接中),MLP整体思路。


    单层感知器是最简单的神经网络。它包含输入层和输出层,输入层和输出层直接相连。

    单个感知器无法解决非线性问题,由多个感知器组合可以来实现非线性分类面

    但是简单的组合,得到的依旧是线性分类器,为了解决这个问题,有了MLP,MLP是单层感知机的推广,与单层感知机的本质区别是增加了隐含层。

    隐藏层的神经元与输入层是全连接的,假设输入层用向量X表示,则隐藏层的输出就是f(W1X+b1),W1是权重(也叫连接系数),b1是偏置,函数f可以是常用的sigmoid函数或者tanh函数,特点是连续可微。

   最后就是输出层,其实隐藏层到输出层可以看成是一个多类别的逻辑回归,也即softmax回归,所以输出层的输出就是softmax(W2X1+b2),X1表示隐藏层的输出f(W1X+b1)。

   因此,MLP所有的参数就是各个层之间的连接权重以及偏置,包括W1、b1、W2、b2。对于一个具体的问题,如何确定这些参数。求解最佳的参数是一个最优化问题,解决最优化问题,最简单的就是梯度下降法了(SGD):首先随机初始化所有参数,然后迭代地训练,不断地计算梯度和更新参数,直到满足某个条件为止(比如误差足够小、迭代次数足够多时)。这个过程涉及到代价函数、规则化(Regularization)、学习速率(learning rate)、梯度计算等。

    

    因为这种联接图没有闭环或回路。我们可以用反向传播法(back propagation)来训练上述这个神经网络。

    反向传播算法分二步进行,即信号的正向传播和误差的反向传播。这两个过程的工作简述如下。

1.正向传播

    在逐层处理的过程中,每一层神经元的状态只对下一层神经元的状态产生影响。在输出层把现行输出和期望输出进行比较,如果现行输出不等于期望输出,则进入反向传播过程。

2.反向传播

    反向传播时,把误差信号按原来正向传播的通路反向传回,并对每个隐层的各个神经元的权系数进行修改,以望误差信号趋向最小。


BP算法具体流程如下:

①前向传播:给各连接权值分别赋一个区间(-1,1)内的随机数,选择一个数据输入,从第一层开始,计算每一层输出MLP综述并保存各层输出。

②反向传播:计算最后一层输出和目标输出的差e=t-a,并根据公式MLP综述计算最后一层的敏感性MLP综述,其中为网络第M层输出函数对净输入n求导,最后一层为线性函数,求导为1。按照公式计算前一层的敏感性,直到第一层,其中MLP综述为第m层到m-1层的权值。

③调权值:可以从第一层开始,也可以从最后一层开始进行调权。

MLP综述

④选择下一个输入,继续上面的过程,直到网络收敛为止。


BP算法存在的问题:

(1)梯度越来越稀疏:从顶层越往下,误差校正信号越来越小;

(2)收敛到局部最小值:尤其是从远离最优区域开始的时候(随机值初始化会导致这种情况的发生);

(3)一般,我们只能用有标签的数据来训练:但大部分的数据是没标签的,而大脑可以从没有标签的的数据中学习。

    

由此提出改进算法:

基于动量的BP学习算法

    由于BP算法的收敛速度比较慢,可能有多个局部极小点,有不稳定性,故提出基于动量的BP算法。它能平滑振荡提高收敛性能。故引入一个动量系数 ,当动量系数增加时,振荡减小,从而有利于减少振荡数目,保持平均值。

MLP综述

动量可以维持算法稳定的前提下使用更高的学习速度。动量法降低了网络对于误差曲面局部细节的敏感性,有效的抑制网络陷入局部最小。

可变学习速度的BP算法

    它试图在较平坦的曲面提高学习速度,而在斜率增大时减小学习速度。它的规则如下:

1)如果误差平方(在整个训练集上)在权值更新后增加了百分数z (典型值为1%至5%),则取消权值更新,学习速度乘上一个因子 (1 > r > 0),并且动量系数 g 置为 0。

2)如果误差平方在权值更新后减少,则接受权值更新,并且学习速度乘上一个因子 h>1,如果动量系数 g 先前被置为0,则恢复到先前的值。

3)如果误差平方的增加少于z,则接受权值更新,但是学习速度和动量系数不变。

    改进的BP算法也有些缺点:需要设置一些额外的参数,并且算法性能对参数变化很敏感,参数的选择还和问题有关。容易使一些能收敛的数据变得不可收敛。目前还有许多的改进算法,这些方法中应用最广的是增加了冲量(动量)项的改进BP算法。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150157.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • myeclipse 注册码(8.5版本)「建议收藏」

    myeclipse 注册码(8.5版本)「建议收藏」ID:myEclipse8.5code:zLR8ZC-855575-75526156215269972ID:myEclipse8.51code:zLR8ZC-855575-7552615625006863ID:myEclipse8.52code:zLR8ZC-855575-7552615625006864ID:myEclipse8.53code…

  • C# DateTimePicker:日期时间控件「建议收藏」

    C# DateTimePicker:日期时间控件「建议收藏」日期时间控件(DateTimePicker)在时间控件中的应用最多,主要用于在界面上显示当前的时间。Format属性提供了4个属性值,如下所示。Short:短日期格式,例如2017/3/1;Long:长日期格式,例如2017年3月1日;…

  • 弗洛伊德(Floyd)算法求图的最短路径「建议收藏」

    弗洛伊德(Floyd)算法求图的最短路径「建议收藏」弗洛伊德基本思想弗洛伊德算法作为求最短路径的经典算法,其算法实现相比迪杰斯特拉等算法是非常优雅的,可读性和理解都非常好。基本思想:弗洛伊德算法定义了两个二维矩阵:矩阵D记录顶点间的最小路径例如D[0][3]=10,说明顶点0到3的最短路径为10;矩阵P记录顶点间最小路径中的中转点例如P[0][3]=1说明,0到3的最短路径轨迹为:

  • c中构造函数的作用_python中构造方法的作用

    c中构造函数的作用_python中构造方法的作用C#中构造函数的作用共同点:都是实例化对象,初始化数据的默认构造是说所有的类都从祖先object那继承了空参的构造方法,你不写与写空参构造都存在,而有参数的构造一般是自己写的,写就有不写就没有,它的作用和空参的一样,只是它里面可以有参数,给你个例子来说明吧有一个类Monitor它有属性Stringheight;StringwidthpublicMonitor(){}publ

  • 如何搭建自己的SpringBoot源码调试环境? SpringBoot源码(一)「建议收藏」

    如何搭建自己的SpringBoot源码调试环境? SpringBoot源码(一)「建议收藏」1前言这是SpringBoot2.1源码分析专题的第一篇文章,主要讲如何来搭建我们的源码阅读调试环境。如果有经验的小伙伴们可以略过此篇文章。2环境安装要求IntelliJIDEAJDK1.8Maven3.5以上3从github上将SpringBoot源码项目下载下来首先提供SpringBoot2.1.0的github地址:点这里下载因为要进行阅读源码和分析源码项目,我们是不是要在里面写一些注释帮助我们阅读理解源码,因此需要将SpringBoot源码项目fork到自己的github

  • 使用cocos2d 2.1制作一条河游戏(4): 主要的游戏逻辑BaseLayer设计[通俗易懂]

    使用cocos2d 2.1制作一条河游戏(4): 主要的游戏逻辑BaseLayer设计

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号